当查询有派生词时,postgresql 全文搜索找不到任何东西

标签 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')))

它对每一个词都很有魅力,但那些有像 ruby/rubies

这样的衍生词

如果我搜索 designer,它会匹配 designerdesigners。很好。
我希望 ruby 匹配 rubyrubies。目前它不匹配任何东西,甚至 ruby 也不匹配。我错过了什么?

最佳答案

如果您需要将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)

关于当查询有派生词时,postgresql 全文搜索找不到任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17125356/

相关文章:

mysql - 从 MySQL 加载数据到 Postgres

sql - 有没有办法在 SQL 中找到活跃用户?

mysql - 根据搜索值从表排序中检索数据??/

ruby-on-rails - Errno::ENOENT: 没有这样的文件或目录@rb_sysopen -/tmp/

ruby - 如何声明一个可在整个 Rails 应用程序中访问的变量?

django - docker-compose 和初始化数据库

MYSQL 全文 - 意外结果

mysql联合与全文搜索错误

mysql - 对大量文档执行全文搜索

activerecord - 如何通过has_many通过关联使用Rails 4的强参数?