Django / Postgres - 没有函数匹配给定的名称和参数类型

时间:2017-09-16 00:14:13

标签: python django postgresql search casting

我试图在我的Django和Postgresql项目中创建一个搜索系统,但是当我尝试进行查询时,我一直遇到错误。

每当我在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')

我收到错误:

"没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。"

我已经测试了一段时间的其他选项,并且我能成功传递搜索查询而没有错误的唯一方法是使用两个字符串代替 query 矢量

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

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

为什么我会收到此错误,我该如何解决?

我已将我的代码基于此Full Text Search文档

1 个答案:

答案 0 :(得分:1)

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