重複排除

重複またはほぼ重複するドキュメントがインデックス内で問題になる場合は、重複排除の実装を検討する価値があるかもしれません。

重複またはほぼ重複するドキュメントがインデックスに入るのを防ぐこと、または重複フィールドの折り畳みのために署名/フィンガープリントでドキュメントにタグ付けすることは、低衝突またはファジーハッシュアルゴリズムで効率的に実現できます。Solr は、Signature クラスを介してこのタイプの重複排除技術をネイティブにサポートしており、新しいハッシュ/署名の実装を簡単に追加できます。署名はいくつかの方法で実装できます。

  • MD5Signature: 正確な重複検出に使用される 128 ビットハッシュ。

  • Lookup3Signature: 正確な重複検出に使用される 64 ビットハッシュ。これは MD5 よりもはるかに高速で、インデックスを作成するのにサイズが小さくなります。

  • TextProfileSignature: ほぼ重複検出のための Apache Nutch のファジーハッシュ実装。調整可能ですが、長いテキストで最適に機能します。

ファジー/ニアハッシュ用の他の、より高度なアルゴリズムを後で追加できます。

重複排除プロセスを追加すると、allowDups 設定が変更され、ユニークフィールドの Term ではなく、更新用語(この場合は signatureField を使用)に適用されるようになります。

もちろん、signatureField はユニークフィールドにすることもできますが、一般的にはユニークフィールドはユニークであることが望ましいです。ドキュメントが追加されると、署名が自動的に生成され、指定された signatureField のドキュメントに添付されます。

設定オプション

Solr で重複排除を設定するには、solrconfig.xmlスキーマの 2 か所があります。

solrconfig.xml 内

SignatureUpdateProcessorFactory は、この例のように、更新リクエストプロセッサチェーンの一部として solrconfig.xml に登録する必要があります。

<updateRequestProcessorChain default="true">
  <processor class="solr.LogUpdateProcessorFactory" />
  <processor class="solr.processor.SignatureUpdateProcessorFactory">
    <str name="signatureField">id</str>
    <str name="fields">name,features,cat</str>
    <str name="signatureClass">solr.processor.Lookup3Signature</str>
  </processor>
  <processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>

SignatureUpdateProcessorFactory はいくつかのプロパティを受け取ります。

signatureClass

オプション

デフォルト: org.apache.solr.update.processor.Lookup3Signature

署名ハッシュを生成するための Signature 実装。

実装の完全なクラスパスを指定する必要があります。利用可能なオプションについては上記で説明されており、関連するクラスパスは次のとおりです。

  • org.apache.solr.update.processor.Lookup3Signature

  • org.apache.solr.update.processor.MD5Signature

  • org.apache.solr.update.process.TextProfileSignature

fields

オプション

デフォルト: すべてのフィールド

署名ハッシュを生成するために使用するフィールドをコンマ区切りリストで指定します。デフォルトでは、ドキュメントのすべてのフィールドが使用されます。

signatureField

オプション

デフォルト: signatureField

フィンガープリント/署名を保持するために使用するフィールドの名前。フィールドはスキーマで定義する必要があります。

enabled

オプション

デフォルト: true

重複排除処理を無効にする場合は、false に設定します。

overwriteDupes

オプション

デフォルト: true

true の場合、この署名に一致するドキュメントがすでに存在する場合は、上書きされます。overwriteDupes=true を使用している場合は、スキーマで signatureFieldindexed="true" である必要があります。

SolrCloud での SignatureUpdateProcessorFactory の使用

SolrCloud で SignatureUpdateProcessorFactory を使用する場合は、2 つの重要な点に注意する必要があります。

  1. overwriteDupes=true 設定は、uniqueKey フィールドを signatureField として使用する場合の特別なケース *以外* では機能しません。他の signatureField で重複排除を試みても、更新がレプリカに転送される方法のために正しく機能しません。

  2. uniqueKey フィールドを signatureField として使用する場合、ドキュメントが(生成された)uniqueKey フィールドに基づいて正しいシャードリーダーにルーティングされるように、DistributedUpdateProcessor より前に SignatureUpdateProcessorFactory を実行する必要があります。

(overwriteDupes=false で他の signatureField を使用して、重複排除なしで各ドキュメントの署名を生成する場合 — には制限はありません。)