![](/img/trans.png)
[英]“to_tsquery” on tsvector yields different results when using “simple” and “english”?
[英]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”,如果同时对tsvector
和tsquery
使用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.