PostgreSQL 全文搜索准确性



有没有办法提高Postgres上全文搜索的准确性?我正在与 Django 一起使用它,对 invest 的简单搜索不会返回带有单词 investor 的结果。我认为这是因为词干提取算法将投资*和投资者作为两个不同的词干返回。

def get_queryset(self):
    query_string = self.request.GET.get('q')
    vector = SearchVector('description', weight='A') + SearchVector('location', weight='A') + SearchVector('name', weight='A')
    query = SearchQuery(query_string)
    return PeopleSnapshot.objects.annotate(rank=SearchRank(vector, query)).order_by('-rank')

对于您的特定示例,"同义词词典"应该会有所帮助。

还有更复杂的"同义词库词典",您可以通过更改"ispell词典"来自定义实际的词干。两者都在同一页上提到。

我假设您使用的是english文本搜索配置。

investor不会通过词干提取算法简化为invest

SELECT to_tsvector('english', 'investor');
 to_tsvector  
--------------
 'investor':1
(1 row)

如果你想要前缀匹配,你必须这样做:

SELECT to_tsvector('english', 'investor')
       @@ to_tsquery('english', 'invest:*');
 ?column? 
----------
 t
(1 row)

最新更新