4

特定の Solr アプリケーションでは、重複した結果を破棄する必要があります。id次のように、schema.xml で一意のキーとして設定されたフィールドがあります。

<uniqueKey>id</uniqueKey>

既存のドキュメントの ID で呼び出す/update/json?commit=trueと、既存のドキュメントが適切に更新されます。ただし、呼び出す/update/json?commit=true&overwrite=falseと、同じIDで追加のドキュメントが追加されます! 既存のドキュメントの ID を持つドキュメントを破棄するように Solr を構成するにはどうすればよいですか? 属性が減価償却されているallowDupsことに気付いたので、Solr 4.x を実行する新しいコードに導入したくありません。いずれにせよ、デフォルトはfalseそうであるため、とにかく重複が追加される理由はわかりません。

それが重要な場合、idフィールドは次のように定義されます。

<field name="id" type="string" stored="true" indexed="true" multiValued="false" required="true"/>

明確にするために、私は更新したくないし、新しいドキュメントを作成したくありません. 新しいドキュメントを破棄したい。idフィールドは、他のいくつかのフィールドのコンテンツのハッシュとして計算されます。したがって、この同じハッシュ (id) を持つ別のフィールドが既に存在する場合、それを更新したくなく(同じハッシュの最も古いドキュメントを常に保持する必要があります) 、新しいレコードを作成したくありません(重複)。新しいドキュメントを破棄したいだけです。

INSERT IGNORE INTOSQL ステートメントに類似した動作を探しています。

4

2 に答える 2

4

この動作は、overwrite=false を使用しているためです。あなたはあなたが見ている行動を明示的に求めています。

これはここに文書化されています: https://cwiki.apache.org/confluence/display/solr/Uploading+Data+with+Index+Handlers#UploadingDatawithIndexHandlers-JSONFormattedIndexUpdates

「同じドキュメントの以前のバージョンを上書きするために一意のキー制約をチェックする必要があるかどうかを示します」

したがって、上書きが「true」の場合、これが既存のドキュメントを上書きしているかどうかを確認し、既存のドキュメントがあれば削除します。overwrite が false の場合、チェックせずに、このドキュメントが一意であると想定して、新しいドキュメントを追加します。

パラメータが「overwriteCheck」と名付けられた場合、これはより明確になります。

于 2016-06-22T16:44:14.993 に答える