コピーフィールド
ドキュメントのフィールドを複数の方法で解釈したい場合があります。Solr には、フィールドのコピーを作成するメカニズムがあり、受信した 1 つの情報に複数の異なるフィールドタイプを適用できます。
コピー元のフィールドの名前は*ソース*と呼ばれ、コピー先のフィールドの名前は*デスティネーション*と呼ばれます。スキーマファイルでは、フィールドのコピーを作成するのは非常に簡単です。
<copyField source="cat" dest="text" maxChars="30000" />
この例では、Solr に `cat` フィールドを `text` という名前のフィールドにコピーさせたいと考えています。フィールドは分析の前にコピーされるため、元のコンテンツが同じであっても、異なる分析チェーンを使用し、インデックスに異なる方法で格納される 2 つのフィールドを持つことができます。
上記の例では、入力ドキュメントに `text` デスティネーションフィールド独自のデータがある場合、`cat` フィールドのコンテンツは追加の値として追加されます。すべての値が元々クライアントによって指定されていた場合と同様です。最終的に複数の値を取得するフィールド(複数値のソースから、または複数の `copyField` ディレクティブから)の場合は、フィールドを `multivalued="true"` として設定することを忘れないでください。
この機能の一般的な用途は、ユーザーまたはクライアントがクエリするフィールドを指定しない場合にデフォルトのクエリフィールドとして機能する単一の「検索」フィールドを作成することです。たとえば、`title`、`author`、`keywords`、`body` はすべてデフォルトで検索されるフィールドであり、各フィールドのコピーフィールドルールは `catchall` フィールドにコピーされます(たとえば、任意の名前を付けることができます)。後で `solrconfig.xml` にルールを設定して、デフォルトで `catchall` フィールドを検索できます。これに対する 1 つの注意点として、コピーフィールドを使用するとインデックスが大きくなることです。ただし、これが問題になるかどうか、および最終的なサイズは、コピーされるフィールドの数、コピー先のフィールドの数、使用中の分析、および使用可能なディスク容量によって異なります。
`int` パラメータである `maxChars` パラメータは、デスティネーションフィールドに追加される値を構築するときに、ソース値からコピーされる文字数の上限を設定します。この制限は、ソースフィールドから一部のデータをコピーしたいが、インデックスファイルのサイズも制御したい場合に役立ちます。
`copyField` のソースとデスティネーションの両方に、先頭または末尾のアスタリスクを含めることができます。アスタリスクは任意の文字列と一致します。たとえば、次の行は、ワイルドカードパターン `*_t` に一致するすべての受信フィールドのコンテンツを `text` フィールドにコピーします。
<copyField source="*_t" dest="text" maxChars="25000" />
|
コピーはストリームソースレベルで行われ、コピーが別のコピーに供給されることはありません。 つまり、コピーフィールドを連鎖させることはできません。たとえば、here
から there
へ、そして there
から elsewhere
へコピーすることは *できません*。 ただし、同じソースフィールドを複数の宛先フィールドにコピーすることはできます。
<copyField source="here" dest="there"/>
<copyField source="here" dest="elsewhere"/>