2

次のクエリを指定すると、SQL と Lucene の間でランキング/スコアが大きく異なります。

[疑似コード] (解釈* の 3 以内の状態*) AND 矛盾

すべての結果がクエリ要件に準拠しているように見えるため、これはパーサーの問題ではないと思います。ただし、結果の上位 1000 では、172 の一般的な結果しか得られません。Lucene と SQL の両方からのすべての結果はクエリ要件に準拠しているように見えるため、私の唯一の推測は、スコアリングが根本的に異なるということです。SQL がスコアリングを処理する方法や、SQL と Lucene のスコアリングを比較する方法に関する情報を見つけるのに苦労しました。2 つのエンジンから同じ結果セットが得られるとは必ずしも期待していませんが、10% 以上の類似性を期待していたので、少なくとも大きな相違点を説明できる必要があります。

この重大な不一致をどのように説明できますか?

4

1 に答える 1

2

「検索クエリ結果のランク付け方法」というタイトルのMSDNのドキュメントから(私の強調):

SQL Serverでの全文検索では、全文クエリによって返されるデータの関連性を示すオプションのスコア(またはランク値)を生成できます。このランク値はすべての行で計算され、特定のクエリの結果セットを関連性で並べ替えるための順序付け基準として使用できます。ランク値は、結果セット内の行の関連性の相対的な順序のみを示します。実際の値は重要ではなく、通常、クエリが実行されるたびに異なります。ランク値は、クエリ間で意味を持ちません

とはいえ、SQL全文検索では、結果に実際の価値はありません。結果の他の行との関係で持つ唯一の値。

これをLuceneでのスコアリングと比較してください。これは、ドキュメントのインデックス作成方法、ドキュメントやフィールドがブーストされているかどうか、フィルターなどに完全に依存しています。

保証がないSQLサーバーとは異なり、Luceneのスコアリングも一貫しています。名前には、SQLサーバーでの全文クエリの結果がランク値であり、Luceneのようにスコアではないことも反映されています。

値は完全に比較できるわけではありませんが、結果も同じではないため、それは理解できます。

于 2012-08-21T15:12:43.690 に答える