有什么方法可以提高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')
答案 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)