1

Elasticsearch の実装に Tire を使用しています。私の環境は Linux,Rails 3.2 with Ruby 1.9.3 です。gem Tire(0.5.8) の助けを借りて、Elasticsearch を使用してインデックスを作成できます。しかし、パフォーマンスを向上させるために、インデックス付きデータから表示されるデータを取得し、データベースにヒットしないようにしたいと考えています(INSERTとUPDATEのみにdbを使用したい)。

これを達成するために、私は以下のコードを使用しています:

result = Tire.search 'jobs', load: true do

  query do
    string "is_active:1"
  end
  filter :range,  status: {gte: 0 }
  sort { by :created_at, 'desc' }
 end

  return result.results

load:true を使用しているため、不要なデータベース (MySQL) にヒットします。しかし、load 属性を削除すると、結果が得られません。上記のテーブルのすべての列にインデックスが付けられていることを確認できます ("xxx:9200/jobs/_mapping?pretty=1")。

どうすればそれを達成できるか提案してください。

ありがとう。

4

2 に答える 2

0

load: true、返された結果ごとにデータベースを呼び出します。それがなければ、結果はItemモデルのインスタンスのように振る舞うこれらのオブジェクトになります。

モデルにマッピングが設定されていることを確認してから、インデックスをインポートする必要があります。

class User
    include Mongoid::Document
    field :name, type: String
    mapping do
        indexes :name
    end
 end

次に、実行するインデックスでモデルが設定された後、 rake tire:import CLASS=User ユーザー クラスにインデックスが作成されます。あなたがした後

search = Tire.search(User.index_name) do
    query { string 'billy' }
end
puts search.results.first.name

ここにたくさんの良いドキュメントがあります https://github.com/karmi/tire

于 2013-05-31T17:28:03.487 に答える