3

私はここで長い間ブラウザを使用してきましたが、まだ尋ねられていない質問をしたことはありません. だからここに行きます:

SOLR 検索を使用して問題が発生しました。SOLR での一部の検索 (DVD プレーヤーとしましょう) では、最初の 50 件の結果で同じメーカーから多くの検索結果が返される傾向があります。

エンドユーザーに最高の検索エクスペリエンスを提供したいだけでなく、カタログ内の最高の種類の製品も提供したいと仮定すると、同じブランドが検索結果に表示されないようにするための一種のデメリットをどのように提供しますか? 5回以上。記録のために、私はかなり標準的な DisMax 検索ハンドラーを使用しています。

このロジックは、「DVD プレーヤー」や「ハード ドライブ」などの非常に幅広いクエリにのみ適用され、当然、「Samsung DVD プレーヤー」の検索結果を形成するためには使用しません。

SOLR にこれを自動的に行う便利な機能があるかどうか、または検索ハンドラー ロジックの変更を開始する必要があるかどうかはわかりません。

4

3 に答える 3

0

ここにいくつかのアイデアがありますが、私はそれらを自分で試したことはありません。

Solr用のCarrotプラグインを使用して、検索結果をクラスター化することができます。たとえば、メーカーで検索結果をクラスター化し、それをカスタムRequestHandlerにフィードして、多様性のために結果を並べ替えます(各製造元クラスターからのチェリーピッキング)。

ただし、このアプローチには、必要以上に大きくフェッチする必要があるという欠点があります。次に、検索結果が合成されます。

于 2012-06-15T09:07:19.980 に答える
0

私はこれを使用していませんが、フィールドの折りたたみ/グループ化が必要だと思います。

http://wiki.apache.org/solr/FieldCollapsing

私がこの機能を正しく理解していれば、http://news.google.com/が同様のニュース記事をグループ化する方法と同じように、同様の結果がグループ化されます。

于 2012-06-14T17:30:52.600 に答える
-1

これを達成することは、長くて複雑なプロセスですが、試す価値があります。検索しているメインフィールドがタイトルと呼ばれる単一のフィールドであるとしましょう。最初に、「DVDプレーヤー」を含むすべてのドキュメントのスコアが同じであることを確認する必要があります。これは、フィールドノルム(省略されたNorms = trueを設定)や用語の頻度(無視するようにsolrプラグインを作成)コードなどのsolrスコアリングパラメーターを無視することで実行できます。

実装の詳細:

1)次のクラスをコンパイルし、Solr WEB-INF/classesに配置します


package my.package; 
import org.apache.lucene.search.DefaultSimilarity;

public class CustomSimilarity extends DefaultSimilarity {

public float tf(float freq) {
    return freq > 0 ? 1.0f : 0.0f;
}

}

  1. solrconfig.xmlで、この新しい類似性クラスを使用します。

類似性class="my.package.CustomSimilarity"

これはすべて、タイトルに「DVDプレーヤー」が含まれるすべてのドキュメントのスコアを同じにするのに役立ちます。その後、ランダムタイプの1つのフィールドを定義できます。次に、solrを照会するときに、最初にスコアで、次にランダムフィールドで並べ替えることができます。DVDプレーヤーを含むすべてのドキュメントのスコアが同じになるため、結果はランダムなフィールドごとに整理され、カタログ内の製品の種類が増えます。

于 2012-06-15T10:07:44.447 に答える