![](/img/trans.png)
[英]Sqlalchemy full text search with multiple columns and partial search in postgresql
[英]Partial matches with PostgreSQL full text search
Django的 PostgreSQL全文搜索文檔使用以下示例:
>>> 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
相同的結果。 我想使用全文搜索,以便在我開始工作后,我可以利用諸如可重復使用的搜索向量,加權查詢和排名之類的東西。
有沒有辦法通過部分單詞查詢獲得結果?
django.contrib.postgres.search
模塊在PotgreSQL的全文搜索引擎上實現 。
具體來說,它將文本值轉換為PostgreSQL“tsvector”值,並將搜索項轉換為PostgreSQL“tsquery”值。 因此,如果您正在使用此功能,您應該了解如何使用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'
問題與文本不符。 Django正在告訴你正確的事情。
這確實匹配一個tsquery的一個例子是'Chees:*'
:
=> SELECT 'Cheese on Toast recipes'::tsvector @@ 'Chees:*'::tsquery;
?column?
----------
t
(1 row)
更大的答案是:如果要正確使用此功能,您需要了解如何以PostgreSQL期望的方式形成全文搜索查詢:-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.