2

这是我第一次在 postgresql 中使用全文搜索,我遇到了一个奇怪的问题。Rails 4(我不认为 Rails 是我的问题的一部分)构建如下 sql 代码:

SELECT COUNT(*) FROM "bookmarks"
WHERE (to_tsvector(title || ' ' || description)
@@ (to_tsquery('english', 'ruby')))

它的每一个词都像一个魅力,但那些有红宝石/红宝石之类的衍生物

如果我搜索designer,它匹配designerand designers。美好的。
我想ruby匹配rubyrubies。目前它不匹配任何东西,甚至不匹配ruby。我错过了什么?

4

1 回答 1

4

如果您需要指定english为 的文本配置to_tsquery,您也需要指定它to_tsvector以获得一致的结果。

尝试

SELECT COUNT(*) FROM "bookmarks"
WHERE (to_tsvector('english', title || ' ' || description)
@@ (to_tsquery('english', 'ruby')))

什么时候english是默认的文本搜索配置,to_tsvector('ruby')会展开到'rubi':1哪个匹配to_tsquery('english', 'ruby')

但是如果文本搜索配置设置为别的,它会以不同的方式展开并且不会匹配。

例子:

set default_text_search_config='english';
select to_tsvector('ruby') @@ to_tsquery('english','rubies') as result;
 result 
--------
 t
(1 row)

set default_text_search_config='french';
select to_tsvector('ruby') @@ to_tsquery('english','rubies') as result;
 result 
--------
 f
(1 row)
于 2013-06-15T16:13:58.087 回答