[英]Texticle fuzzy search not finding anything in Ruby on Rails
我已將以下內容添加到我的gemfile中:
gem 'texticle', "2.0", :require => 'texticle/rails' # search gem
然后我運行了bundle install
和bundle安裝了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 => 'Marriot')
然后它可以工作,但我使用Texticle的原因是模糊搜索。
我錯過了其他任何配置嗎?
謝謝
我建議檢查一些事情:
驗證是否已為所涉及的每個數據庫手動創建擴展。 我沒有運氣'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搜索方法(源代碼)
我對Texticle工作方式的理解是,它會對你的字符串列進行全文搜索,但默認情況下不一定要進行模糊搜索。 如果你查看它在Postgres中生成的查詢,它正在尋找'e'上的匹配,而不是任何包含字母'e'的單詞。
你可以在這里閱讀Postgres文檔:
http://www.postgresql.org/docs/9.1/static/datatype-textsearch.html
也就是說,我看到支持前綴匹配但不支持文檔中的后綴,雖然我可能會遺漏一些東西。
如果你做Hotel.search('Marr:*')會怎么樣?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.