【问题标题】:Texticle fuzzy search not finding anything in Ruby on RailsTexticle 模糊搜索在 Ruby on Rails 中找不到任何内容
【发布时间】:2012-03-18 20:54:46
【问题描述】:

我已将以下内容添加到我的 gemfile 中:

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

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

我正在使用 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 =&gt; 'Marriot'),那么它可以工作,但我使用 Texticle 的原因是为了进行模糊搜索。

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    我建议检查几件事:

    1. 验证是否已为所涉及的每个数据库手动创建了扩展。我对'texticle:install_trigram'没有运气。如果您使用 Heroku,则可能需要执行其他步骤,尤其是在您尚未从共享数据库迁移的情况下。

    2. 使用模糊搜索方法。在最新版本的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 Trigram

    新的Texticle搜索方法(源代码)

    【讨论】:

      【解决方案2】:

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

      您可以在此处阅读 Postgres 文档:

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

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

      如果您执行 Hotel.search('Marr:*') 会发生什么?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-05
        • 2014-10-20
        • 2018-08-01
        • 2015-04-03
        相关资源
        最近更新 更多