gpt4 book ai didi

django - 如何使用 tsvector 字段在带有 postgresql 全文搜索的 Django 中执行排名?

转载 作者:行者123 更新时间:2023-11-29 11:17:09 25 4
gpt4 key购买 nike

我需要使用 postgresql 全文搜索功能和带有 django.contrib.postgres 的 Django 执行排名查询模块。

根据 the doc , 使用 SearchRank 很容易做到这一点通过执行以下操作上课:

>>> from django.contrib.postgres.search import SearchQuery, SearchRank, SearchVector
>>> vector = SearchVector('body_text')
>>> query = SearchQuery('cheese')
>>> Entry.objects.annotate(rank=SearchRank(vector, query)).order_by('-rank')

这可能效果很好,但这并不是我想要的,因为我的表中有一个字段已经包含我想使用的 tsvectorized 数据(而不是在每个搜索查询时重新计算 tsvector ).

不幸的是,我不知道如何将这个 tsvector 字段提供给 SearchRank类而不是 SearchVector原始数据字段上的对象

有谁能指出如何处理这个问题吗?

编辑:当然,只是尝试实例化一个 SearchVector来自 tsvector 字段的代码不起作用,并因出现此错误而失败(大约因为我是从法语翻译过来的):

django.db.utils.ProgrammingError: ERROR: function to_tsvector(tsvector) does not exist

最佳答案

如果您的模型有 SearchVectorField像这样:

from django.contrib.postgres.search import SearchVectorField

class Entry(models.Model):
...
search_vector = SearchVectorField()

你会使用 F expression :

from django.db.models import F

...
Entry.objects.annotate(
rank=SearchRank(F('search_vector'), query)
).order_by('-rank')

关于django - 如何使用 tsvector 字段在带有 postgresql 全文搜索的 Django 中执行排名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41507862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com