我有一个名为 "建筑 "的教程模型。
这里是搜索。
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:*)');
结果是假的
为什么?
谢谢!我有一个名为 "建筑 "的教程模型。
如果我理解你问的是你查询行为的动机。
你可以在你的查询中测试由你的词生成的词组,如下图。
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".
这是因为前两个词工作,第三个词不工作。
更多信息请见 测试和调试文本搜索 文件。