Xav*_*rac 3 postgresql full-text-search ruby-on-rails-4
这是我第一次在 postgresql 中使用全文搜索,我遇到了一个奇怪的问题。Rails 4(我不认为 Rails 是我的问题的一部分)构建如下所示的 sql 代码:
SELECT COUNT(*) FROM "bookmarks"
WHERE (to_tsvector(title || ' ' || description)
@@ (to_tsquery('english', 'ruby')))
Run Code Online (Sandbox Code Playgroud)
除了红宝石/红宝石之类的衍生物之外,它对每一个词都有魅力
如果我搜索designer,它会匹配designer和designers。美好的。
我想ruby匹配ruby和rubies。目前它不匹配任何东西,甚至不匹配ruby。我错过了什么?
如果需要指定english为文本配置to_tsquery,则也需要指定它以to_tsvector获得一致的结果。
尝试用
SELECT COUNT(*) FROM "bookmarks"
WHERE (to_tsvector('english', title || ' ' || description)
@@ (to_tsquery('english', 'ruby')))
Run Code Online (Sandbox Code Playgroud)
当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)
Run Code Online (Sandbox Code Playgroud)