3

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 => 'Marriot')うまくいきますが、Texticle を使用している理由はあいまい検索のためです。

他の構成がありませんか?

ありがとう

4

2 に答える 2

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トリグラムのインストール

新しいテキスタイル検索方法(ソースコード)

于 2012-09-14T13:58:45.477 に答える
0

Texticle の仕組みについての私の理解では、文字列列に対して全文検索を実行しますが、デフォルトで必ずしもあいまい検索を実行するとは限りません。Postgres で生成されたクエリを見ると、文字「e」を含む単語ではなく、「e」に一致するものを探しています。

ここでPostgresのドキュメントを読むことができます:

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

そうは言っても、ドキュメントでは接頭辞の一致はサポートされていますが、接尾辞はサポートされていませんが、何か不足している可能性があります。

Hotel.search('Marr:*') を実行するとどうなりますか?

于 2012-08-19T15:27:32.263 に答える