動的フィールドの使用

動的フィールドを使用して、スキーマで明示的に定義されていないフィールドのコンテンツのインデックスを作成し、複数のSolrフィールドを処理する方法。

動的フィールドを使用すると、スキーマによって明示的に定義されていないフィールドのコンテンツのインデックスを作成できます。動的フィールドを使用すると、複数のSolrフィールドを同じ方法で処理できます。動的フィールドの一般的な使用法は、インデックス作成の必要がないフィールドを識別するか、またはスキーマのないインデックスを実装することです。

CQLベースのSolrコアでは、動的で多値のSolrスキーマ・フィールドはサポートされていません。

空間サブフィールドのプレフィックス命名規則 

空間サブフィールドの動的フィールドは、プレフィックス命名規則を使用して、Cassandraマップ型を有効にし、地理空間的データを保存します。
<types>
<fieldType class="solr.LatLonType" multiValued="false" name="LatLonType" subFieldPrefix="llt_"/>
<fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" positionIncrementGap="0"/>
</types>
<fields>
<dynamicField indexed="true" name="latmap*" stored="true" type="LatLonType"/>
<dynamicField name="llt_*"  type="tdouble"  indexed="true"  stored="true"/>
</fields>

ベスト・プラクティス

  • 動的フィールドの使用を回避または制限します。

    Luceneは、各ユニーク・フィールド(カラム)名に対してメモリーを割り当てます。このため、カラムA、B、Cを持つ行と、カラムB、D、Eを持つ行がある場合は、5つのメモリーのチャンクが割り当てられます。何百万もの行の場合、ヒープだけでは扱いにくいです。

  • 動的フィールドを使用する代わりに、コピー・フィールドを使用し、結合フィールドに対してクエリーを実行します。
  • FieldInputTransformer(FIT)APIをオプションとして使用します。

動的フィールドを使用するには

  • Solr動的フィールドをschema.xmlに含めます。

    フィールドの最初または最後でワイルドカードを使用してフィールドに名前を付けます。たとえば、スキーマのフィールド名にアスタリスクのプレフィックスまたはサフィックスを付けると、動的フィールドが指定されます。

    • dyna_*
    • *_s
  • CQLでマップ・コレクション・カラムを定義するには、schema.xmlフィールドに使用したものと同じ基本名(アスタリスクなし)を使用します。

    たとえば、CQLマップ・コレクションの名前には、schema.xmlおよびdyna_内のdyna_*を使用します。

  • マップ・キーにテキスト型を使用します。例:
    CREATE TABLE my_dynamic_table (
      . . .
    dyna_ map<text, int>,
      . . .
    );
  • CQLを使用して、ベース名を各マップ・ペアの最初のコンポーネントにプレフィックスまたはサフィックスとして使用し、マップにデータを挿入します。プレフィックスを使用したマップの形式は、以下のようになります。

    { prefix_literal : literal, prefix_literal : literal, . . . }

    たとえば、CQLマップは以下のように表示されます。
    'dyn_' :{dyn_1 :1, dyn_2 :2, dyn_3 :3}
    DSE検索は、上級チュートリアルで示されているように、Solr動的フィールドをCassandraマップ・コレクション・カラムにマッピングします。