Texticle模糊搜索在Ruby on Rails中找不到任何东西

时间:2012-03-18 20:54:47

标签: ruby-on-rails postgresql full-text-search texticle

我已将以下内容添加到我的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的原因是模糊搜索。

我错过了其他任何配置吗?

由于

2 个答案:

答案 0 :(得分:1)

我建议检查一些事情:

  1. 验证是否已为所涉及的每个数据库手动创建扩展。我没有运气'texticle:install_trigram'。如果您正在使用Heroku,可能还有其他步骤,特别是如果您尚未从共享数据库迁移。

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

  3. 手动安装扩展程序:

    本地开发/测试
    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 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;)会怎样?