20

タイヤのドキュメントを読んでいる間、(私の理解では..)がフィードに使用されているので、どちらかmappingまたは方法を使用する必要があるという印象を受けました。to_indexed_jsonmappingto_indexed_json

問題は、両方が使用されているチュートリアルをいくつか見つけたことです。なぜ?

基本的に、私のアプリは現在動作してto_indexed_jsonいますが、一部の属性のブースト値を設定する方法がわかりません(したがって、マッピングを検討し始めた理由)。両方を使用すると競合が発生するのではないかと考えていました。

4

1 に答える 1

50

mappingとメソッドは関連しto_indexed_jsonていますが、実際には 2 つの異なる目的を果たします。

このメソッドの目的は、インデックス内のドキュメント プロパティのマッピングmappingを定義することです。特定のプロパティを「not_analyzed」として定義して、トークンに分割したり、プロパティに特定のアナライザーを設定したり、(言及したように) インデックス作成時間ブーストファクターを設定したりしない場合があります。マルチフィールドプロパティ、日付タイプのカスタム フォーマットなどを定義することもできます。

次に、このマッピングが使用されます。Tireがモデルのインデックスを自動的に作成するとき。

メソッドの目的は、ドキュメント/モデルのJSON シリアル化to_indexed_jsonを定義することです。

デフォルトto_indexed_jsonメソッドは、マッピング定義を使用して、マッピングで定義されたプロパティのみを使用します — マッピングを定義するのに十分な注意を払っている場合デフォルトでTireはマッピングが定義されたプロパティのみをインデックス化することに基づいています。

さて、モデルが実際にElasticsearchのJSON にどのようにシリアル化されるかをしっかり把握したい場合は、独自のメソッドを定義するだけですto_indexed_json(README の指示に従って)。

このカスタムは通常、マッピング定義をMyModel#to_indexed_method気にせず、(ActiveRecord の を活用するか、 jbuilderなどの JSON ビルダーを使用するか、単純な古いHashを構築してを呼び出すことにより) JSON シリアライゼーションをゼロから構築します。to_jsonHash#to_json

したがって、質問の最後の部分に答えるには、 と の両方mappingを使用してもto_indexed_jsonまったく競合が発生せず、実際には Elasticsearch の高度な機能を使用する必要があります。

総括する:

  1. メソッドを使用しmappingて、検索エンジンのモデルのマッピングを定義します
  2. カスタムto_indexed_jsonメソッドを使用して、検索エンジンがドキュメント/モデルをどのように認識するかを定義します。
于 2012-07-28T10:36:07.437 に答える