Django/PostgreSQL全文搜索在AWS RDS PostgreSQL上使用SearchVector与SearchVectorField时的不同搜索结果

2024-09-29 22:00:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用DjangoSearchVectorField来支持全文搜索。然而,当我在模型上使用SearchVectorField与在视图中实例化一个SearchVector类相比,我得到了不同的搜索结果。该问题与AWS RDS PostgreSQL实例无关。两者在我的笔记本电脑上都是一样的。在

让我用一些代码来解释一下:

# models.py

class Tweet(models.Model):
    def __str__(self):
        return self.tweet_id

    tweet_id = models.CharField(max_length=25, unique=True)
    text = models.CharField(max_length=1000)
    text_search_vector = SearchVectorField(null=True, editable=False)

    class Meta:
        indexes = [GinIndex(fields=['text_search_vector'])]

我用一个搜索向量填充了所有行,并在数据库上建立了一个触发器来保持字段的最新状态。在

^{pr2}$

使用on_the_fly实例的on_the_fly查询集返回32个结果。使用from_field的查询集返回0个结果。在

空结果促使我进入shell进行调试。以下是我的python manage.py shell环境中命令行的一些输出:

^{3}$

您可以看到,将数据库中的值与通过Django生成的值进行比较时,搜索向量看起来非常不同。在

有人知道为什么会这样吗?谢谢!在


Tags: 实例textpyselfidtruesearchmodels
1条回答
网友
1楼 · 发布于 2024-09-29 22:00:29

SearchQuery将用户提供的术语转换为数据库与搜索向量进行比较的搜索查询对象。默认情况下,用户提供的所有单词都将通过Stemming algorithms传递,然后它将查找所有结果项的匹配项。 首先给出了词干算法中需要解决的两个问题。在

query = SearchQuery('chance' , config="english")

第二是更换这条线

^{pr2}$

rank=SearchRank('text_search_vector', query)

关于text_search_vector中丢失的单词,这是Stemming algorithms删除被称为stop word的普通单词的标准过程

相关问题 更多 >

    热门问题