0

私は1つの巨大なモデルを持っています(それは基本的に私のアプリ全体です)。このモデルには、多対多、:through =>などを含む7つ以上の関連付けがあります。このモデルには、いくつかの単純な属性(タイトル、URLなど)もあります。

インデックス作成で気になるのは、3つまたは4つの単純な属性(タイトル、URL、説明、カテゴリ)だけです。残りは気にしない。

を使用するとすべてが完全に機能しますload: trueが、オフにするとすぐにすべてが壊れます。これを修正する唯一の方法は、すべての関連付けに対して複雑なマッピング、:touch、:touchコールバックなどを追加することです。

これは、3つまたは4つの単純な属性を検索するためだけの膨大な量のコードになるため、これが間違っていることを理解していることを願っています。

何について話しているのかわかりませんが、elasticsearchインデックスを検索しても、IDのリストを返し、通常のレールの方法でループすることはできますか?

ありがとう!

4

1 に答える 1

2

タイヤが内部でどのように機能するかは正確にはわかりませんが、ドキュメントから理解できる限り、loadオプションがtrueの場合、データベースからすべてのレコードが読み込まれます。だから、本番環境では使いたくないと思います。このオプションがないと、表示したいデータのほとんどがelasticsearchに保存されているはずなので、Tireはelasticsearchから情報を取得します。おそらく、elasticsearchに保存されている情報を追加する必要があります。マッピングに保存するフィールドを構成することで実行できます。そうしないと、elasticsearchに常にソースフィールドがあります。これは、インデックスを作成したJSONドキュメントとまったく同じです。

あなたの最後の質問に対する答えはイエスです。ソース全体を取得する代わりに、elasticsearchから取得するフィールドを選択できます。あなたの場合、私が正しく理解していれば、idフィールドのみを構成します。Tireでそれを行う方法はわかりませんが、elasticsearchリクエストに関しては、次のようなURLで行うことができます。

curl localhost:9200/_search?fields=id -d '{
  "query" : {
    "match_all" : {}
  }
}'

または、次のようにクエリで直接入力します。

{
    "fields" : ["id"],
    "query" : {
        "match_all" : {}
    }
}
于 2012-09-26T15:43:16.787 に答える