2

私は同様の質問を探していましたが、何も役に立たないようです。

クエリ結果を並べ替えたいのですが、ブーストの順序は維持します。

たとえば、orQuery内部に3つのクエリを使用して、を作成しOccur.SHOULD、2.0、1.0、および0.2をブーストします。次に、並べ替えを行うときに、ブースト2.0の結果を一番上に保持して並べ替え、次にブースト1.0の結果も並べ替え、最後に最後のクエリ(0.2)の結果も並べ替えます。

結果は、ソートされた結果の3つのグループとして想像できます。

使えるものはありますか?

4

2 に答える 2

1

箱から出してこれを行うことはできないと思います。独自に実装することもできますCollectorが、3つの検索を個別に実行し、後で結果をマージする方がはるかに簡単です。

于 2013-03-25T16:00:40.180 に答える
1

これについては、いくつかの方法があります。

1-ブーストの違いを大きくします。

クエリで適用するブースト係数が十分に大きい場合は、スコアに影響を与える他のすべての係数をオーバーライドする必要があります。したがって、0.2、1.0、および2.0ではなく、.000001、1.0、および1000000を試してみることができます。何か使えるものができるまで、少し実験してください。次に、デフォルトのようにrelevance(Sort.RELEVANCE)で並べ替えると、必要な並べ替えが得られるだけでなく、これらのサブグループ内のスコアリングの他のすべての便利な側面も維持されます。

2-実際にクエリブーストによる並べ替えを適用します

これは、ブーストファクターで厳密に並べ替えるために必要なオプションであり、次に、単一のクエリで他の並べ替えパラメーターを使用する必要があります。

Luceneの並べ替えでは、用語に適用されたブースト係数を直接表示することはできません(正当な理由で、やりたいことは少し奇妙なことです。ブーストはスコアに影響を与えることを目的としており、スコアではありません)。最も近いのは、関連性による並べ替えです。もちろん、これは他の多くの要素を考慮に入れています。

生のブースト係数を取得する必要がある場合は、類似性をオーバーライドする必要があります。

考慮すべき3つのブーストがあります。

  • クエリブースト:クエリの一部として適用され、これはに渡されますSimilarity.computeWeight
  • フィールドとドキュメントのブースト:インデックス時に適用され、結合され、インデックスに格納され、「長さノルム」係数とも結合されます。

取得することに興味があると思われる唯一のブーストは、クエリレベルのブーストです。これは、最も簡単に対処できるはずです。TFIDFSimilarityを変更するか、[Similarity]のサブクラスを最初から作成することができます。いずれにせよ、ほとんどのロジックをスタブアウトして、クエリブーストを返すだけです。

于 2013-03-25T16:17:22.463 に答える