我正在创建一个 Web 应用程序来搜索具有教育、经验等属性的人。我不能对所有字段使用全文搜索,因为有些必须是模糊匹配。(例如:如果我们搜索 biotech,它应该选择 bio tech、biotech 和 bio-tech)。我的数据库在配置文件模型中有大约 200 个条目,这些条目将出现在搜索结果中。
教育和经验等其他模型通过外键连接到个人资料
因此,我决定选择在什么领域使用什么方法。对于学位名称等较短的字段(在教育模型中),我想使用三元相似度。对于教育描述等领域,我使用全文搜索。
但是,由于我必须在多个字段中执行此操作,因此我使用了简单的查找而不是使用搜索向量。
Profile.objects.filter(
Q(first_name__trigram_similar=search_term) |
Q(last_name__trigram_similar=search_term) |
Q(vision_expertise__search=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(educations__description__search=search_term) |
Q(experiences__title__trigram_similar=search_term) |
Q(experiences__company__trigram_similar=search_term) |
Q(experiences__description__search=search_term) |
Q(publications__title__trigram_similar=search_term) |
Q(publications__description__search=search_term) |
Q(certification__certification_name__trigram_similar=search_term) |
Q(certification__certification_authority__trigram_similar=search_term) |
Q(bio_description__search=search_term) |
)
我每次搜索都会得到预期的结果。但是,获得它所需的时间非常缓慢。我不知道如何使它更快。