Apache Solrは初めてです。 documentation の部分を読んだ後でも、multiValued
フィールドタイププロパティの機能と使用方法を明確に理解することは困難です。
Solrは、multiValuedとマークされたフィールドを内部的に処理/処理/処理しますか?
multiValuedのフィールドとそうでないフィールドのSolrでのインデックス作成の違いは何ですか?
誰かが良い例で説明できますか?
Docによると:
multiValued = true | false
このフィールドにドキュメントごとに複数の値が含まれる可能性がある場合、つまりドキュメント内で複数回表示できる場合はtrue
複数値フィールドは、フィールドに複数の値が存在する場合に役立ちます。簡単な例はタグです。インデックスを作成する必要のあるタグが複数ある場合があります。したがって、複数値のタグフィールドがある場合、solr応答は文字列値ではなくリストを返します。注意すべき1つのポイントは、次のようなタグの値ごとに複数の行を送信する必要があることです。
<field name = "tags"> tag1 </ tags> <field name = "tags"> tag2 </ tags> ... < field name = "tags"> tagn </ tags>
すべての値のインデックスを作成したら、任意の値で結果を検索またはフィルタリングできます。次のようなクエリを使用して、tag1のすべてのドキュメントを検索できます。
q=tags:tag1
またはタグを使用して、次のような結果を除外します
q=query&fq=tags:tag1
フィールドが複数の値を持つことができるかどうか、スキーマで定義されたmultiValued。
例えば:
IDというfieldTypeがあり、multiValued = falseの場合、次のようなドキュメントのインデックスが作成されます。
doc {
id : [ 1, 2]
...
}
インデックススレッドで例外がスローされ、ドキュメントはインデックス付けされません(スキーマの検証は失敗します)。
一方、フィールドに複数の値がある場合は、multiValued = trueを設定して、インデックス作成が正しく行われることを保証します。次に例を示します。
doc {
id : 1
keywords: [ hello, world ]
...
}
この場合、「キーワード」をmultiValuedフィールドとして定義します。
私はコピーフィールドでのみ複数の値フィールドを使用しているので、このように考えてください。たとえば、次のフィールドがある場合、コピーフィールドでない限り、すべてのフィールドは単一値になります。
<field name="id" type="string" indexed="true" stored="true"/>
<field name="name" type="string" indexed="true" stored="true"/>
<field name="subject" type="string" indexed="true" stored="true"/>
<field name="location" type="string" indexed="true" stored="true"/>
1つのフィールドのみを照会し、場合によっては上記の4つのフィールドすべてを検索する場合、copyfieldを使用する必要があります。最初に新しいフィールド呼び出し「all」を作成してから、すべてを「all」にコピーします
<field name="all" type="text" indexed="true" stored="true" multiValued="true"/>
<copyField source="*" dest="all"/>
ここで、フィールド「all」は複数値にする必要があります。