【发布时间】:2019-01-22 14:15:26
【问题描述】:
我想对模型中的两个字段执行全文搜索。这是我当前的代码:
if 'keyword' in request.GET:
search_term = request.GET['keyword']
vector = SearchVector('Title', weight='A') + SearchVector('Content', weight='B')
articles = articles.annotate(similarity=TrigramSimilarity(vector, search_term),).filter(similarity__gt=0.01).order_by('-similarity')
此代码返回错误信息
function similarity(tsvector, unknown) does not exist
我认为这是因为我没有正确组合字段,因为当我只用一个字段代替 vector 时,它可以正常工作。如果 pg_trgm 扩展没有正确安装,trigram 搜索就不能在一个字段上工作,对吧?在多个领域中搜索的正确方法是什么?
【问题讨论】:
-
更好的方法是使用 Q 对象:docs.djangoproject.com/en/2.1/topics/db/queries/…
-
@Ahtisham 不能仅使用 Q 进行全文搜索。OP 是正确的,答案如下。
-
@dirkgroten 我很困惑。所以 Q 不是解决方案吗?您能否详细说明如何正确地对多个字段进行全文搜索?提前致谢
-
@dirkgroten 我知道问题不在于没有安装 pg_trgm,因为只有一个字段时三元组搜索有效;只有当我尝试组合字段时它才不起作用,所以我认为我组合它们是错误的。如果我只用一个字段代替“矢量”,它就可以完美地工作
标签: django