動的フィールドの使用

動的フィールドを使用して、スキーマで明示的に定義されていないフィールドの内容のインデックスを作成する方法。

動的フィールドを使用すると、スキーマによって明示的に定義されていないフィールドのコンテンツのインデックスを作成できます。動的フィールドの一般的なユース・ケースは、インデックスを作成する必要がないフィールドの特定や、スキーマのないインデックスの実装です。

動的でmultiValuedが指定されている検索スキーマ・フィールドは、CQLベースの検索インデックスではサポートされていません。

ベスト・プラクティス

  • 動的フィールドの使用を避けるか、制限します。

    Apache Lucene®は、各ユニーク・フィールド(カラム)名にメモリーを割り当てます。たとえば、カラムA、B、Cを含む行と、B、D、Eを含む行がある場合、Luceneはメモリーの5つのチャンクを割り当てます。行数が数百万に及ぶと、ヒープでは処理できません。

  • 動的フィールドを使用する代わりにデフォルトのクエリー・フィールドを使用して、統合フィールドに対してクエリーを実行します。
  • FieldInputTransformer(FIT)APIを使用します。

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

空間サブフィールドの動的フィールドは、プレフィックス命名規則を使用してマップ型の使用を有効にし、地理空間データを格納します。
<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>

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

  • 検索インデックス・スキーマにApache Solr動的フィールドを含めます。

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

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

    たとえば、検索インデックス・スキーマでdyna_*を使用し、CQLマップ・コレクションの名前にdyna_を使用します。

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

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

    CQLマップは以下のように表示されます。
    'dyna_' : {dyna_1 : 1, dyna_2 : 2, dyn_3 : 3}
    DSE Searchは、マップ・コレクション・カラムに動的フィールドをマップします。