我已将以下内容添加到我的gemfile中:
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(&#39; e&#39;)
时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 :(得分:1)
我建议检查一些事情:
验证是否已为所涉及的每个数据库手动创建扩展。我没有运气'texticle:install_trigram'。如果您正在使用Heroku,可能还有其他步骤,特别是如果您尚未从共享数据库迁移。
使用fuzzy_search方法。在最新版本的Texticle中,实际上有3种新方法;原来的#search方法已被弃用。
手动安装扩展程序:
本地开发/测试psql -U <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 Trigrams(模糊搜索)
安装PostgreSQL Trigram
新Texticle搜索方法(源代码)
答案 1 :(得分:0)
我对Texticle工作方式的理解是,它会对你的字符串列进行全文搜索,但默认情况下不一定要进行模糊搜索。如果您查看它在Postgres中生成的查询,则会在“&#39; e”上查找匹配项。而不是任何包含字母的单词&#39;。
您可以在此处阅读Postgres文档:
http://www.postgresql.org/docs/9.1/static/datatype-textsearch.html
那就是说,我看到支持前缀匹配但不支持文档中的后缀,虽然我可能会遗漏一些东西。
如果你做Hotel.search(&#39; Marr:*&#39;)会怎样?