Zonder de klascode is het moeilijk om een betere manier te vinden om uw zoekopdracht te optimaliseren.
Je kunt een Gin toevoegen of Samenvatting index om de trigram-overeenkomst te versnellen.
U kunt een annotatie maken met de SearchVector zoals hieronder:
from django.contrib.postgres.aggregates import StringAgg
from django.contrib.postgres.search import SearchQuery, SearchVector
search_vectors = (
SearchVector('vision_expertise') +
SearchVector('bio_description') +
SearchVector(StringAgg('experiences__description', delimiter=' ')) +
SearchVector(StringAgg('educations__description', delimiter=' ')) +
SearchVector(StringAgg('publications__description', delimiter=' '))
)
Profile.objects.annotate(
search=search_vectors
).filter(
Q(search=SearchQuery(search_term)) |
Q(first_name__trigram_similar=search_term) |
Q(last_name__trigram_similar=search_term) |
Q(educations__degree__trigram_similar=search_term) |
Q(educations__field_of_study__trigram_similar=search_term) |
Q(educations__school__trigram_similar=search_term) |
Q(experiences__title__trigram_similar=search_term) |
Q(experiences__company__trigram_similar=search_term) |
Q(publications__title__trigram_similar=search_term) |
Q(certification__certification_name__trigram_similar=search_term) |
Q(certification__certification_authority__trigram_similar=search_term)
)
U kunt het zoeken in volledige tekst versnellen met een SearchVectorField
Om meer te weten te komen over zoeken in volledige tekst en trigram kun je het artikel lezen dat ik over dit onderwerp heb geschreven:
"Full-Text Search in Django met PostgreSQL"