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 の高度な機能を使用する必要があります。
総括する:
- メソッドを使用し
mappingて、検索エンジンのモデルのマッピングを定義します
- カスタム
to_indexed_jsonメソッドを使用して、検索エンジンがドキュメント/モデルをどのように認識するかを定義します。