2017-09-16 70 views
0

我试图在我的Django和Postgresql项目中创建一个搜索系统,但当我尝试进行查询时,我仍然遇到错误。Django/Postgres - 没有函数匹配给定的名称和参数类型

每当我试着在shell这些命令:

vector = SearchVector('title','tags') 
query = SearchQuery('book') | SearchQuery('harry') 

My_Library.objects.annotate(similarity=TrigramSimilarity(vector,test),).filter(similarity__gt=0.3).order_by('-similarity') 

我得到的错误:“无功能的指定名称和参数类型匹配,就可能需要增加明确的类型转换。”

我一直在测试其他的选择了一段时间,我可以顺利过关没有一个错误的搜索查询的唯一方法是通过在查询矢量的场所使用两个字符串。

My_Library.objects.annotate(similarity=TrigramSimilarity('title','my search query'),).filter(similarity__gt=0.3).order_by('-similarity') 

这将成功通过我的搜索,没有错误。

为什么我得到这个错误,我该如何解决?

我一直立足我的代码关闭此Full Text Search文档

回答

0

TrigramSimilarity的需要2 strings作为参数

你试图传递一个SearchVectorSearchQuery。 如果您想通过多个标签来搜索将无法正常工作

,你可能需要聚合与|相似查询的多,然后排序上的相似性,是这样的:

from django.db.models import Q 

My_Library.objects.annotate(
    Q(similarity=TrigramSimilarity('title','my search query'),)) | 
    Q(similarity=TrigramSimilarity('title','my search query'),)) 
    ).filter(similarity__gt=0.3).order_by('-similarity') 

更多细节Q https://docs.djangoproject.com/en/1.11/ref/models/querysets/#q-objects

+0

当我尝试这个时,我得到“Q没有定义”。你从哪里弄来的? – Mathyou

+1

from django.db.models import Q – MrE

+0

https://docs.djangoproject.com/en/1.11/ref/models/querysets/#q-objects – MrE

相关问题