2012-03-18 75 views
3

我已经添加在寻找什么红宝石下面我的Gemfile:Texticle模糊搜索未on Rails的

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

我然后跑bundle install和捆绑安装宝石

我使用Rails 3.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的原因是用于模糊搜索。

我是否缺少其他配置?

感谢

回答

0

我的Texticle工作方式的理解是,它会做全文搜索你的字符串列,但默认情况下没有必要做模糊搜索。如果您查看在Postgres中生成的查询,它将在'e'上查找匹配项,而不是包含字母'e'的任何单词。

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

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

这么说,我看到支持前缀匹配,但在该文档中没有postfix的,虽然我可能失去了一些东西。

如果你做Hotel.search('Marr:*')会发生什么?

1

有一对夫妇的事情,我会建议检查:

  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卦

新Texticle搜索方法(源代码)