कक्षा कोड के बिना अपनी क्वेरी को अनुकूलित करने का बेहतर तरीका खोजना मुश्किल है।
आप एक Gin जोड़ सकते हैं। या Gist ट्रिग्राम समानता को गति देने के लिए सूचकांक।
आप SearchVector के साथ एक एनोटेशन बना सकते हैं नीचे के रूप में:
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)
)
आप का उपयोग करके पूर्ण-पाठ खोज को गति दे सकते हैं SearchVectorField
पूर्ण-पाठ खोज और ट्रिग्राम के बारे में जानने के लिए आप इस विषय पर मेरे द्वारा लिखे गए लेख को पढ़ सकते हैं:
"पूर्ण-पाठ में खोजें PostgreSQL के साथ Django"