我有一个名为"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"。
这是因为前两个有效,第三个无效。
测试和调试文本搜索文档中的更多信息。