【问题标题】:Django/Postgres - No function matches the given name and argument typesDjango/Postgres - 没有函数匹配给定的名称和参数类型
【发布时间】:2018-02-25 04:42:06
【问题描述】:

我正在尝试在我的 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')

我得到错误:

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

我一直在测试其他选项,而我能够成功通过搜索查询而不会出错的唯一方法是使用两个字符串代替 queryvector .

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

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

为什么会出现此错误,我该如何解决?

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

【问题讨论】:

    标签: python django postgresql search casting


    【解决方案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

    【讨论】:

    • 当我尝试这个时,我得到“Q 未定义”。你从哪里得到的?
    • 从 django.db.models 导入 Q
    • 好的,现在我已经导入 Q 我收到另一个错误:TypeError: Complex annotations require an alias
    猜你喜欢
    • 2013-08-20
    • 2014-09-05
    • 1970-01-01
    • 2021-02-13
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    相关资源
    最近更新 更多