フィールド型の定義とプロパティ
フィールド型は、ドキュメントがインデックスに作成されたとき、またはクエリがインデックスに送信されたときに、フィールドで発生する分析を定義します。
フィールド型定義には、次の4種類の情報を含めることができます
-
フィールド型の名前(必須)。
-
実装クラス名(必須)。
-
フィールド型が
TextField
の場合、フィールド型のフィールド分析の説明。 -
フィールド型プロパティ - 実装クラスによっては、必須のプロパティがある場合があります。
スキーマ内のフィールド型定義
フィールド型は、コレクションの スキーマで定義されます。各フィールド型は、fieldType
要素の間で定義されます。オプションで、types
要素内でグループ化できます。
以下は、text_general
というタイプのフィールド型定義の例です
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> (1)
<analyzer type="index"> (2)
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
1 | 上記の例の最初の行には、フィールド型の名前 text_general と、実装クラスの名前 solr.TextField が含まれています。 |
2 | 定義の残りの部分は、Solr でのドキュメント分析で説明されているフィールド分析に関するものです。 |
実装クラスは、フィールドが正しく処理されるようにする責任があります。クラス名では、文字列 solr
は org.apache.solr.schema
または org.apache.solr.analysis
の省略形です。したがって、solr.TextField
は実際には org.apache.solr.schema.TextField
です。
フィールド型プロパティ
フィールド型の class
はフィールド型の動作の大部分を決定しますが、オプションのプロパティも定義できます。たとえば、次の日付フィールド型の定義では、sortMissingLast
および omitNorms
という2つのプロパティを定義しています。
<fieldType name="date" class="solr.DatePointField"
sortMissingLast="true" omitNorms="true"/>
特定のフィールド型に指定できるプロパティは、主に次の3つのカテゴリに分類されます
-
フィールド型のクラスに固有のプロパティ。
-
一般プロパティ Solr が任意のフィールド型でサポートするもの。
-
フィールドのデフォルトプロパティ。フィールド型で指定でき、デフォルトの動作の代わりにこの型を使用するフィールドによって継承されます。
一般プロパティ
これらはフィールドの一般プロパティです
name
-
必須
デフォルト: なし
fieldTypeの名前です。この値は、フィールド定義の "type" 属性で使用されます。名前は英数字またはアンダースコア文字のみで構成し、数字で開始しないことを強く推奨します。これは現在、厳密には強制されていません。
class
-
必須
デフォルト: なし
この型のデータを保存およびインデックス化するために使用されるクラス名です。組み込みクラス名の先頭に "solr." を付けると、Solr がクラスを検索するパッケージを自動的に判断することに注意してください。例えば、
solr.TextField
は機能します。サードパーティのクラスを使用する場合は、完全修飾クラス名が必要になる可能性があります。
solr.TextField
の完全修飾名はorg.apache.solr.schema.TextField
です。 positionIncrementGap
-
オプション
デフォルト: なし
複数値フィールドの場合、複数の値間の距離を指定します。これにより、誤ったフレーズの一致を防ぎます。
autoGeneratePhraseQueries
-
オプション
デフォルト: なし
テキストフィールドの場合。
true
の場合、Solr は隣接する用語のフレーズクエリを自動的に生成します。false
の場合、フレーズとして扱われるには、用語を二重引用符で囲む必要があります。 synonymQueryStyle
-
オプション
デフォルト:
as_same_term
重複するクエリ用語(つまり、同義語)のスコアを組み合わせるために使用されるクエリです。「青いTシャツ」の検索で、クエリ時の同義語が
tshirt,tee
である場合を考えます。-
as_same_term
: 用語をブレンドします。つまり、SynonymQuery(tshirt,tee)
では、各用語が同じように重要であると扱われます。このオプションは、用語が真の同義語(例:「テレビ、tv」)の場合に適しています。 -
pick_best
: スコアリング時に最も重要な同義語を選択しますDismax(tee,tshirt)
。同義語が下位語に展開される場合(q=jeans w/ jeans⇒jeans,pants)
に、正確なものが親および兄弟の概念よりも前に来るようにする場合に使用します。 -
as_distinct_terms
: スコアリングを最も重要な同義語(pants OR slacks)
に偏らせます。このブログ記事 Solr Synonyms and Taxonomies: Mea Culpa では、同義語の展開に関する Solr の動作について説明しています。
-
enableGraphQueries
-
オプション
デフォルト:
true
テキストフィールドの場合、
sow=false
(デフォルト)でクエリを実行する場合に適用されます。グラフ対応のフィルター(例:Synonym Graph Filter や Word Delimiter Graph Filter)を含むクエリアナライザーを持つフィールドタイプの場合は、true
を使用します。一部のトークンが欠落している場合にドキュメントを照合できるフィルターを含むクエリアナライザーを持つフィールドタイプの場合は、
false
を使用します(例:Shingle Filter)。
docValuesFormat
-
オプション
デフォルト: なし
このタイプのフィールドに使用するカスタム
DocValuesFormat
を定義します。これには、Schema Codec Factory などのスキーマ対応コーデックを使用する必要があります。 postingsFormat
-
オプション
デフォルト: なし
このタイプのフィールドに使用するカスタム
PostingsFormat
を定義します。これには、Schema Codec Factory などのスキーマ対応コーデックを使用する必要があります。
Lucene インデックスの後方互換性は、デフォルトのコーデックでのみサポートされています。スキーマで |
フィールドのデフォルトプロパティ
これらは、フィールドタイプで指定することも、個々のフィールドで指定してフィールドタイプによって提供される値をオーバーライドすることもできるプロパティです。
各プロパティのデフォルト値は、基になる FieldType
クラスによって異なり、それは <schema/>
の version
属性によって異なります。以下の表には、version="1.6"
を宣言するスキーマを想定して、Solr が提供するほとんどの FieldType
実装のデフォルト値が含まれています。
プロパティ | 説明 | 暗黙的なデフォルト |
---|---|---|
|
|
|
|
|
|
|
|
|
|
ソートフィールドが存在しない場合のドキュメントの配置を制御します。 |
|
|
|
|
|
|
|
|
|
* |
|
|
* |
|
|
* |
|
これらのオプションは、Solr に各ドキュメントの完全なタームベクターを保持するように指示し、オプションで、それらのベクター内の各用語の出現箇所に関する位置、オフセット、およびペイロード情報を含めます。これらは、強調表示やその他の補助機能を高速化するために使用できますが、インデックスサイズの点でかなりのコストがかかります。Solr の一般的な使用では必須ではありません。 |
|
|
Solr に、このフィールドの値を持たないドキュメントを追加しようとする試みを拒否するように指示します。このプロパティのデフォルトは false です。 |
|
|
フィールドで DocValues が有効になっている場合、これを true に設定すると、fl パラメータ で「*」に一致するときに、( |
|
|
大きいフィールドは常に遅延ロードされ、実際の値が 512KB 未満の場合にのみドキュメントキャッシュ内のスペースを占有します。このオプションには |
|
適切な数値タイプの選択
一般的な数値ニーズには、予期される特定の値に応じて、IntPointField
、LongPointField
、FloatPointField
、または DoublePointField
クラスのいずれかを使用することを検討してください。これらの「次元ポイント」ベースの数値クラスは、使用する範囲のサイズに関係なく、効率的な範囲クエリをサポートするために特別にエンコードされたデータ構造を使用します。ソートやファセットに必要な場合は、これらのフィールドで DocValues を有効にしてください。
一部の Solr 機能はまだ「次元ポイント」では機能しない場合があり、その場合は、同等の TrieIntField
、TrieLongField
、TrieFloatField
、および TrieDoubleField
クラスを検討することもできます。これらのフィールドタイプは非推奨であり、将来の主要な Solr リリースで削除される可能性がありますが、必要に応じて引き続き使用できます。インデックスサイズを最小限に抑えたい場合は precisionStep="0"
を設定しますが、ユーザーが数値型に対して頻繁に範囲クエリを実行すると予想される場合は、デフォルトの precisionStep
(指定しない)を使用するか、precisionStep="8"
(デフォルト)として指定します。これにより、インデックスサイズが増加する代わりに、範囲クエリの速度が向上します。
テキストの操作
テキストを適切に処理することで、テキスト検索で可能な限り最良の結果をユーザーに提供し、ユーザーを満足させることができます。
1つの手法は、キーワード検索の受け皿としてテキストフィールドを使用することです。ほとんどのユーザーは検索に精通しておらず、最も一般的な検索は単純なキーワード検索になる可能性があります。copyField
を使用して、さまざまなフィールドを取り込み、キーワード検索用の単一のテキストフィールドにすべてまとめて入れることができます。
Solr に付属の「techproducts」の例のスキーマでは、copyField
宣言を使用して、cat
、name
、manu
、features
、および includes
の内容を単一のフィールド text
にダンプしています。さらに、ユーザーが製品番号をキーワード検索に渡して特定の製品を検索したい場合に備えて、ID
を text
にコピーすることも良い考えです。
もう1つの手法は、copyField
を使用して同じフィールドをさまざまな方法で使用することです。次のような著者のリストであるフィールドがあるとします。
Schildt, Herbert; Wolpert, Lewis; Davies, P.
著者で検索するには、フィールドをトークン化し、小文字に変換し、句読点を削除します。
schildt / herbert / wolpert / lewis / davies / p
ソートの場合、句読点を削除した小文字に変換された、トークン化されていないフィールドを使用します。
schildt herbert wolpert lewis davies p
最後に、ファセットの場合、StrField
を介して主要な著者のみを使用します。
Schildt, Herbert
フィールドタイプの類似性
フィールドタイプは、オプションで、コレクションの「グローバル」類似性が許容する場合に、このタイプのフィールドを参照するドキュメントをスコアリングするときに使用される <similarity/>
を指定できます。
デフォルトでは、類似性を定義しないフィールドタイプは、BM25Similarity
を使用します。グローバルとタイプごとの類似性の両方を構成する方法の詳細と例については、類似性を参照してください。