シャード間での重複排除 | KandaSearch Community Support Forum

シャード間での重複排除

トピック作成者:ks-solruserml-bot (2024/12/28 18:29 投稿)
1
OpenOpen

(The bot translated the original post https://lists.apache.org/thread/5m7vwr82ccrm8pckoz3bpl8cj8hqqn9g into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)

こんにちは皆さん、
私たちは現在、3つのシャードを使用しており、SKUが販売者にリンクされています。現在は実施していませんが、ドキュメントルーティングを使用して特定の販売者のSKUを同じシャードに配置し、その上で同じ販売者の類似SKUを重複排除することは可能です。しかし、重複排除すべき類似SKUが異なる販売者に関連付けられる場合(その結果、異なるシャードに存在する可能性があります)、Collapseフィルターはシャードをまたいだ操作をサポートしていないことは承知しています。

似たような問題に直面した方はいらっしゃいますか?(この問題が独特とは思えません)。異なるシャード上のドキュメントを重複排除するためにどのように対処したのかを教えていただければ幸いです。

よろしくお願いします。
Dan

返信投稿者:ks-solruserml-bot (2024/12/28 18:29 投稿)

こんにちは、

私たちは、SolrのQueryComponentに重複排除を追加するため、一部の箇所でそれをオーバーライドしました。ファジーな重複排除にはminhashを使用していますが、任意の署名フィールドで機能するよう設計されています。

具体的には以下のことを行いました:

  • createMainQuery()をオーバーライド
    署名フィールドを指定するパラメータ、および「追加で取得する結果数」を制御するパラメータ(factor)を追加できるようにしました。後者のパラメータは、たとえば最初の10件を取得したい場合に、ほとんどが重複していると最終的に5件しか返されないといったケースに対応するためです。

  • mergeIds()をオーバーライド
    ここではすべての結果を収集します。この際、minhashフィールドを保持するカスタムShardDocオブジェクトを使用しました。スコアでソートされていることを前提に、重複が順序通りに現れると仮定しています。PriorityQueueで結果を収集する際、現在のフィールドと直前のフィールドの署名を比較するだけです。

このアプローチにはいくつか明らかな欠点があります。要求された完全な結果セットを得るのが難しい場合があります。私たちの場合、ユーザーはほとんどの場合最初のページ以上を閲覧しない(測定に基づいて確信しています)ため、リクエストの超過係数(overRequestFactor)を低く保っています。この設定は、初期結果セットのほとんどが重複排除によって空になるようなケースでは問題を引き起こすことはまれです。しかし、非常に深くページを移動する場合はおそらく問題が発生するでしょう。

利点としては以下があります:

  • 上位N件の署名を比較するだけなので高速です。
  • Minhashを使用することでファジーな重複排除が可能です。
  • ドキュメントが特定のシャードにルーティングされている必要がありません。

以上が私たちの実装内容です。

トピックへ返信するには、ログインが必要です。

KandaSearch

Copyright © 2006-2025 RONDHUIT Co, Ltd. All Rights Reserved.

投稿の削除

この投稿を削除します。よろしいですか?