有没有办法提高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)