簡體   English   中英

部分匹配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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM