Django's documentation使用以下示例:
>>> Entry.objects.filter(body_text__search='Cheese')
[<Entry: Cheese on Toast recipes>, <Entry: Pizza Recipes>]
我想使用它,但是通过只搜索单词的一部分来获得相同的结果。目前,这没有结果:
>>> Entry.objects.filter(body_text__search='Chee')
[]
基本上我希望得到与body_text__icontains
相同的结果。我想使用全文搜索,以便在我开始工作之后,我可以利用诸如可重复使用的搜索向量,加权查询和排名之类的东西。
是否有某种方法可以通过部分字词查询获得结果?
答案 0 :(得分:2)
django.contrib.postgres.search
module已在PotgreSQL's full-text search engine上实施。
具体来说,它将文本值转换为PostgreSQL“tsvector”值,并将搜索词转换为PostgreSQL“tsquery”值。因此,如果您正在使用此功能,则应了解how to search using tsquery
。
你给出的例子在PostgreSQL中说明如下:
=> SELECT 'Cheese on Toast recipes'::tsvector @@ 'Cheese'::tsquery;
?column?
----------
t
(1 row)
=> SELECT 'Cheese on Toast recipes'::tsvector @@ 'Chees'::tsquery;
?column?
----------
f
(1 row)
因此,'Chees'
的tsquery与文本不匹配。 Django正在告诉你正确的事情。
匹配的tsquery的示例是'Chees:*'
:
=> SELECT 'Cheese on Toast recipes'::tsvector @@ 'Chees:*'::tsquery;
?column?
----------
t
(1 row)
更大的答案是:如果您想正确使用此功能,您需要了解如何按照PostgreSQL期望的方式形成全文搜索查询: - )