簡體   English   中英

Postgres to_tsquery-奇怪的結果

[英]Postgres to_tsquery - strange results

我對to_tsquery和regconfig參數的用法感到非常困惑。

使用Windows上的PostgreSQL 9.0.2。

SELECT name_with_city 
FROM company 
WHERE name_with_city @@ to_tsquery('simple', 'aires|aires:*')

0 rows retrieved.

..這是正確的結果,但是:

SELECT name_with_city 
FROM company 
WHERE name_with_city @@ to_tsquery('english', 'aires|aires:*')

"Bel-Air Express Paris"
"Med-Air Miami"
"APS Air Parts Tel Aviv"
"Air Malta Luga"
"Air Nauru Melbourne"
...
542 rows retrieved.

似乎要搜索“ air”而不是“ aires”。據我了解,這是由於“ english”字典造成的。

但是使用“簡單”也不總是可行。

SELECT name_with_city 
FROM company 
WHERE name_with_city @@ to_tsquery('simple', 'harms|harms:*')

0 rows retrieved.

這是錯誤的,但是

SELECT name_with_city 
FROM company 
WHERE name_with_city ILIKE 'harms%'

"Harms & Wende Hamburg"
1 rows retrieved.

..是正確的。

我必須改用什么查詢? 據我了解,我可以使用to_tsquery在文本列中查找部分單詞,例如:搜索“ tech *”將給出“ Lufthansa Technik”和“ Technical Aero”而不是“ Airtech”。

如果默認的tsearch配置(請參閱get_current_ts_config() )為english ,則

name_with_city @@ to_tsquery('simple', 'harms|harms:*')

等效於:

to_tsvector('english', name_with_city) @@ to_tsquery('simple', 'harms|harms:*');

實際上,這不是您想要避免的英語莖干,而是希望:

to_tsvector('simple', name_with_city) @@ to_tsquery('simple', 'harms|harms:*');

對於示例字符串“ Harms&Wende Hamburg”,如果同時對tsvectortsquery使用simple配置,則示例查詢將匹配:

select 1 WHERE to_tsvector('simple','Harms & Wende Hamburg') 
    @@ to_tsquery('simple', 'harms|harms:*');
=> 1

結論:要么發出SET default_text_search_config='simple'要么在TS查詢中明確使用to_tsvector('simple', column_name)形式,而不僅僅是column_name

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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