1

長いクエリとコレクション内のドキュメントの間のコサイン類似度を取得したかったのです。Lucence を使用してコレクションのインデックスを作成し、クエリを送信してドキュメントを取得しています。

ただし、一部のクエリで次のエラーが発生します。

"Caused by: org.apache.lucene.search.BooleanQuery$TooManyClauses: maxClauseCount is set to 1024"

重みを上げるために、クエリ内のいくつかの用語を複製しました。しかし、lucene は、ドキュメントとクエリの両方に tf-idf を使用してコサイン類似度を計算する代わりに、単純なブール検索を行っているようです。

誰でもこれを確認できますか?

4

1 に答える 1

1

このページでは、luceneで使用されるスコアリングについて説明します。

http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/Similarity.html

それは述べています:

ドキュメントdのクエリqのスコアは、情報検索のベクトル空間モデル(VSM)のドキュメントとクエリベクトル間の内積または内積に相関します。そのモデルのクエリベクトルにベクトルが近いドキュメントは、スコアが高くなります。

つまり、luceneはブール検索を使用しているだけではありません。

あなたの例外はあなたのクエリと、luceneがそれを変換する方法に関連しています。失敗するクエリの例を挙げていただければ助かります。

さらに、あなたは次のように書きます。

クエリ内のいくつかの用語を複製して、それらの重みを高めました。

これを行う必要はありません。代わりに、クエリ内の用語に重みを割り当てることができます:http: //lucene.apache.org/java/2_0_0/queryparsersyntax.html

たとえば、リンゴとオレンジを検索し、オレンジをブーストするには、次のように記述できます。

apple orange^4
于 2011-08-30T15:40:32.673 に答える