我试图使用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
环境中命令行的一些输出:
您可以看到,将数据库中的值与通过Django生成的值进行比较时,搜索向量看起来非常不同。在
有人知道为什么会这样吗?谢谢!在
SearchQuery将用户提供的术语转换为数据库与搜索向量进行比较的搜索查询对象。默认情况下,用户提供的所有单词都将通过Stemming algorithms传递,然后它将查找所有结果项的匹配项。 首先给出了词干算法中需要解决的两个问题。在
第二是更换这条线
^{pr2}$与
关于
text_search_vector
中丢失的单词,这是Stemming algorithms删除被称为stop word的普通单词的标准过程相关问题 更多 >
编程相关推荐