Luceneスコアリングに関する質問があります。私は索引に2つの文書を持っています.1つは「私の名前」を含み、もう1つは「私の名」を含みます。キーワード「my name」を検索すると、2番目の文書が最初の文書の上に表示されます。私が望むのは、文書に入力した正確なキーワードが含まれている場合は、最初にリストし、その後にリストする必要があるということです。誰でも私にこのことを手伝ってもらえますか?ありがとう。Luceneスコアリングに関する質問
答えて
回答の2番目の試み: Luceneのデフォルト動作は、あなたが求めているものでなければなりません。 ここで重要な要素は、スコアの一部であるlengthNorm()です。これは、長い文書のほうが短い文書よりも低いスコアを持つことがあります。コンテキストについては、Lucene's Similarity APIを参照してください。たとえば、lengthNormが2回のヒットで同一であった場合、それらは任意にソートされました。
explain()機能を使用すると、ドキュメントが元の状態に戻っていない理由を確認できます。
あなたはBooleanQueryを使用していると仮定します。あなたの質問が定式化された正確な方法を投稿すれば、私はもっと言うことができるかもしれません。 Query Parser Syntaxも参照してください。 これがマークに近いといいですね。
コマンドラインからlucliを使用している場合(最新のLuceneソースをダウンロードしてcontribディレクトリにある)、Luceneがそれを非常に高く評価した理由を説明するために "explain"コマンドを使用できます。 ------------ 0.6089077:
---------------- 2スコア:
それはこのようなもので出てきます---------
(何とか何とかドキュメント)
Explanation:4.260467 = (MATCH) sum of:
0.59024054 = (MATCH) weight(description:warwick in 276780), product of:
0.05595057 = queryWeight(description:warwick), product of:
5.2746606 = idf(docFreq=13531, numDocs=843621)
0.010607426 = queryNorm
10.549321 = (MATCH) fieldWeight(description:warwick in 276780), product of:
1.0 = tf(termFreq(description:warwick)=1)
5.2746606 = idf(docFreq=13531, numDocs=843621)
2.0 = fieldNorm(field=description, doc=276780)
0.832554 = (MATCH) weight(keywords:warwick in 276780), product of:
0.066450186 = queryWeight(keywords:warwick), product of:
6.264497 = idf(docFreq=5028, numDocs=843621)
0.010607426 = queryNorm
12.528994 = (MATCH) fieldWeight(keywords:warwick in 276780), product of:
1.0 = tf(termFreq(keywords:warwick)=1)
6.264497 = idf(docFreq=5028, numDocs=843621)
2.0 = fieldNorm(field=keywords, doc=276780)
0.19180772 = (MATCH) weight(url:warwick in 276780), product of:
0.048220757 = queryWeight(url:warwick), product of:
4.5459433 = idf(docFreq=28043, numDocs=843621)
0.010607426 = queryNorm
3.9777002 = (MATCH) fieldWeight(url:warwick in 276780), product of:
1.0 = tf(termFreq(url:warwick)=1)
4.5459433 = idf(docFreq=28043, numDocs=843621)
0.875 = fieldNorm(field=url, doc=276780)
0.023709858 = (MATCH) weight(content:warwick in 276780), product of:
0.03373665 = queryWeight(content:warwick), product of:
3.1804748 = idf(docFreq=109863, numDocs=843621)
0.010607426 = queryNorm
0.7027923 = (MATCH) fieldWeight(content:warwick in 276780), product of:
1.4142135 = tf(termFreq(content:warwick)=2)
3.1804748 = idf(docFreq=109863, numDocs=843621)
0.15625 = fieldNorm(field=content, doc=276780)
0.46163678 = (MATCH) weight(siteDescription:warwick in 276780), product of:
0.0494812 = queryWeight(siteDescription:warwick), product of:
4.6647696 = idf(docFreq=24901, numDocs=843621)
0.010607426 = queryNorm
9.329539 = (MATCH) fieldWeight(siteDescription:warwick in 276780), product of:
1.0 = tf(termFreq(siteDescription:warwick)=1)
4.6647696 = idf(docFreq=24901, numDocs=843621)
2.0 = fieldNorm(field=siteDescription, doc=276780)
0.96127754 = (MATCH) weight(siteUrl:warwick in 276780), product of:
0.10097861 = queryWeight(siteUrl:warwick), product of:
9.519615 = idf(docFreq=193, numDocs=843621)
0.010607426 = queryNorm
9.519615 = (MATCH) fieldWeight(siteUrl:warwick in 276780), product of:
1.0 = tf(termFreq(siteUrl:warwick)=1)
9.519615 = idf(docFreq=193, numDocs=843621)
1.0 = fieldNorm(field=siteUrl, doc=276780)
0.62917286 = (MATCH) weight(title:warwick in 276780), product of:
0.05776636 = queryWeight(title:warwick), product of:
5.4458413 = idf(docFreq=11402, numDocs=843621)
0.010607426 = queryNorm
10.891683 = (MATCH) fieldWeight(title:warwick in 276780), product of:
1.0 = tf(termFreq(title:warwick)=1)
5.4458413 = idf(docFreq=11402, numDocs=843621)
2.0 = fieldNorm(field=title, doc=276780)
0.57006776 = (MATCH) weight(second_title:warwick in 276780), product of:
0.05498614 = queryWeight(second_title:warwick), product of:
5.18374 = idf(docFreq=14819, numDocs=843621)
0.010607426 = queryNorm
10.36748 = (MATCH) fieldWeight(second_title:warwick in 276780), product of:
1.0 = tf(termFreq(second_title:warwick)=1)
5.18374 = idf(docFreq=14819, numDocs=843621)
2.0 = fieldNorm(field=second_title, doc=276780)
(申し訳ありませんが、私は唯一の例を下車する大きな指標ではなく、シンプルなものを持っていた!)
私は次のようにクエリを変更します。
(my AND name) OR "my name"
ここで、追加のフレーズクエリは、フレーズマッチがあるたびにスコアに追加されます。文書が内容として「私の名字」を持っている場合、フレーズクエリは追加のスコアにはなりません。しかし、内容が「私の名前」の文書は追加のスコアを持ち、一番上に表示されます。
ここでは、長さの正規化は無視されると仮定しています。
私は同様の問題があります。そして、私はslop
をサポートするPhraseQuery
を使用して解決しました(文書内の用語の相対位置はトークンを考慮しています)。これが助けてくれることを願って。
詳細:How can Lucene's scoring depend on relative position of query?
- 1. Lucene - 句数に対するスコアリング効果
- 2. Azure:デシジョンフォレストモデルのスコアリングに関する問題
- 3. LuceneでBM25スコアリングを追加する
- 4. 2.2から2.9へのLuceneのアップグレードに関する質問
- 5. 質問Luceneとの回答
- 6. Luceneスコアリング:TermVectorsを使用したTermQuery
- 7. Luceneドキュメント正規表現クエリでスコアリング/ランキング
- 8. luceneのインクリメンタルアップデートに関する問題
- 9. タブバーコントローラに関する質問
- 10. プロセスマップに関する質問
- 11. loadNibNamedに関する質問:
- 12. Erlangに関する質問
- 13. インデックスに関する質問
- 14. BSplineに関する質問
- 15. reallocに関する質問
- 16. インテントサービスに関する質問
- 17. データベースに関する質問
- 18. dbms_stats.gather_table_statsに関する質問
- 19. ハイバネートマッピングに関する質問
- 20. APIに関する質問
- 21. リフレクションパッケージに関する質問
- 22. ラチェットソケットに関する質問
- 23. nthに関する質問
- 24. Msbuildに関する質問
- 25. presentModalViewControllerに関する質問
- 26. initWithNibNameに関する質問
- 27. カスタムアダプターに関する質問
- 28. ArrayIndexOutOfBoundsExceptionに関する質問?
- 29. runOnUiThreadに関する質問
- 30. データベースに関する質問
これにより、2番目の文書が*唯一の*文書に一致します。ポスターは単に他のスコアよりも高いスコア*を得るように要求しました。 – Avi
ご返信ありがとうございます。しかし、私がしたいことは違うものです。 "my"と "name"という2つの単語を含むすべての文書を検索したいと思います。ここで問題となるのは、入力したキーワードが「私の名前」であるため、フレーズ「私の名前」がリストの一番上に表示され、「私の名」を含む結果が一番下に表示されます。 –
私はこれを反映するために私の答えを編集しました。もう一度読んでください。 –