Postgres中的Django排名搜索不匹配

问题描述 投票:0回答:1

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

这里是搜索。

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

这个查询可以找到我的模型

query = 'bui:*'

但这个人没有

query = 'buildi:*'

我不知道是什么原因。是英语口音吗?"似乎很简单的搜索。

EDIT.我在postgres中尝试了纯SQL查询,得到的结果是一样的。

我在postgres中尝试了纯SQL查询,得到了同样的结果。

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

返回True

但这个。

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

结果是假的

为什么?

谢谢!我有一个名为 "建筑 "的教程模型。

python django postgresql full-text-search
1个回答
0
投票

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

你可以在你的查询中测试由你的词生成的词组,如下图。

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}

正如你所看到的 "build "和 "build "生成的词组是一样的 ("build") 而 "buildi "生成的是不同的 "buildi".

这是因为前两个词工作,第三个词不工作。

更多信息请见 测试和调试文本搜索 文件。

© www.soinside.com 2019 - 2024. All rights reserved.