Django在Postgres中的排名搜索不匹配



我有一个名为"building"的教程模型。

这是搜索。

tutorial_search = Tutorial.objects.annotate(
rank=SearchRank(SearchVector('name'), query)
).filter(rank__gte=0.0001).order_by('-rank')

此查询查找我的型号

query = 'bui:*'

但是这个不是

query = 'buildi:*'

我搞不清是什么原因造成的。是英国口音吗?看起来像是简单的搜索。

编辑:

我在postgres中尝试了纯SQL查询,得到了相同的结果。这项工作:

SELECT to_tsvector('building') @@ to_tsquery('(build:*)');

返回真

但是这个:

SELECT to_tsvector('building') @@ to_tsquery('(buildi:*)');

返回错误

为什么?

谢谢!

如果我理解您询问查询行为的动机。

您可以在查询中测试由单词生成的词法,如下所示:

SELECT ts_lexize('english_stem', 'building');
ts_lexize 
-----------
{build}
SELECT ts_lexize('english_stem', 'build');
ts_lexize 
-----------
{build}
SELECT ts_lexize('english_stem', 'buildi');
ts_lexize 
-----------
{buildi}

正如您所看到的,"building"one_answers"build"生成的lexem是相同的("build"(,"buildi"生成不同的"buildi"。

这是因为前两个有效,第三个无效。

测试和调试文本搜索文档中的更多信息。

最新更新