Nếu không có mã lớp, rất khó để tìm ra cách tốt hơn để tối ưu hóa truy vấn của bạn.
Bạn có thể thêm Gin hoặc Gist chỉ mục để tăng tốc độ tương đồng bát quái.
Bạn có thể tạo chú thích bằng SearchVector như bên dưới:
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)
)
Bạn có thể tăng tốc độ tìm kiếm toàn văn bằng SearchVectorField
Để tìm hiểu về tìm kiếm toàn văn và bát quái, bạn có thể đọc bài báo tôi đã viết về chủ đề:
"Tìm kiếm toàn văn bản trong Django với PostgreSQL "