Tanpa kode kelas, sulit untuk menemukan cara yang lebih baik untuk mengoptimalkan kueri Anda.
Anda dapat menambahkan Gin atau Inti indeks untuk mempercepat kesamaan trigram.
Anda dapat membuat anotasi dengan SearchVector seperti di bawah ini:
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)
)
Anda dapat mempercepat pencarian teks lengkap menggunakan SearchVectorField
Untuk mengetahui tentang pencarian teks lengkap dan trigram Anda dapat membaca artikel yang saya tulis tentang subjek:
"Pencarian Teks Lengkap di Django dengan PostgreSQL"