PostgreSQL全文搜索精度

时间:2019-07-13 22:45:43

标签: django 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')

2 个答案:

答案 0 :(得分:0)

对于您的特定示例,"synonym dictionary"应该有所帮助。

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

答案 1 :(得分:0)

我假设您正在使用english文本搜索配置。

investor通过词干算法 not 减少为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)