Texticle模糊搜索在RubyonRails中找不到任何东西



我在我的gemfile中添加了以下内容:

gem 'texticle', "2.0", :require => 'texticle/rails' # search gem

然后我运行bundle install并捆绑安装了gem

我使用的是Rails3.1.0,我使用的也是Postgres数据库。

我验证我在数据库表中是否有我要查找的字符串:

ruby-1.9.2-p290 :004 > Hotel.first
Hotel Load (0.4ms)  SELECT "hotels".* FROM "hotels" LIMIT 1
 => #<Hotel id: 1, title: "Marriot Hotel", created_at: "2012-03-01 23:53:16", updated_at: "2012-03-01 23:53:16"> 

当我运行`Hotel.search('e')时

ruby-1.9.2-p290 :005 > Hotel.search(:title => 'e')
Hotel Load (1.4ms)  SELECT "hotels".*, ts_rank(to_tsvector("hotels"."title"), to_tsquery('e')) AS "rank0.4785527956789428" FROM "hotels" WHERE (to_tsvector('english', "title") @@ to_tsquery('e')) ORDER BY "rank0.4785527956789428" DESC
 => [] 

我一无所获。我试着运行Hotel.search('e'),但仍然一无所获。如果我尝试Hotel.search(:title => 'Marriot'),那么它是有效的,但我使用Texticle的原因是为了模糊搜索。

我是否缺少任何其他配置?

感谢

我建议检查以下几件事:

  1. 验证是否已为所涉及的每个数据库手动创建扩展。我在"texticle:install_trigram"上运气不佳。如果你使用的是Heroku,可能会有额外的步骤,尤其是如果你还没有从共享数据库迁移的话。

  2. 使用fuzzy_search方法。在Texticle的最新版本中,实际上有3种新方法;最初的#search方法已被弃用。

手动安装扩展:

本地开发/测试
psql -U &lt;username>
l
c db_development
CREATE EXTENSION pg_trgm;
dx
c db_test
CREATE EXTENSION pg_trgm;
dx
q
Heroku集成/生产
heroku pg:psql
dx
CREATE EXTENSION pg_trgm;
dx

更多?

PostgreSQL三角图(模糊搜索)

  • PostgreSQL 9.1的新增功能-PostgreSQL wiki
  • trigram |汤博乐

安装PostgreSQL Trigram

  • benhamill安装Trigram Rake任务·拉请求#63·温柔/texticle·GitHub
  • texticle:install_trigram-在Heroku上?·第15期·温柔/texticle·GitHub

新的文本搜索方法(源代码)

  • texticle/lib/texticle.rb在master·texticle/texticle·GitHub

我对Texticle工作方式的理解是,它将对字符串列进行全文搜索,但默认情况下不一定进行模糊搜索。如果你看看它在Postgres中生成的查询,它在寻找"e"上的匹配,而不是任何包含字母"e"的单词。

你可以在这里阅读Postgres文档:

http://www.postgresql.org/docs/9.1/static/datatype-textsearch.html

也就是说,我在文档中看到了对前缀匹配的支持,但不支持后缀,尽管我可能遗漏了一些内容。

如果你搜索酒店会发生什么?

最新更新