2009-08-04 8 views
4

Luceneスコアリングに関する質問があります。私は索引に2つの文書を持っています.1つは「私の名前」を含み、もう1つは「私の名」を含みます。キーワード「my name」を検索すると、2番目の文書が最初の文書の上に表示されます。私が望むのは、文書に入力した正確なキーワードが含まれている場合は、最初にリストし、その後にリストする必要があるということです。誰でも私にこのことを手伝ってもらえますか?ありがとう。Luceneスコアリングに関する質問

答えて

3

回答の2番目の試み: Luceneのデフォルト動作は、あなたが求めているものでなければなりません。 ここで重要な要素は、スコアの一部であるlengthNorm()です。これは、長い文書のほうが短い文書よりも低いスコアを持つことがあります。コンテキストについては、Lucene's Similarity APIを参照してください。たとえば、lengthNormが2回のヒットで同一であった場合、それらは任意にソートされました。

explain()機能を使用すると、ドキュメントが元の状態に戻っていない理由を確認できます。

あなたはBooleanQueryを使用していると仮定します。あなたの質問が定式化された正確な方法を投稿すれば、私はもっと言うことができるかもしれません。 Query Parser Syntaxも参照してください。 これがマークに近いといいですね。

+0

これにより、2番目の文書が*唯一の*文書に一致します。ポスターは単に他のスコアよりも高いスコア*を得るように要求しました。 – Avi

+0

ご返信ありがとうございます。しかし、私がしたいことは違うものです。 "my"と "name"という2つの単語を含むすべての文書を検索したいと思います。ここで問題となるのは、入力したキーワードが「私の名前」であるため、フレーズ「私の名前」がリストの一番上に表示され、「私の名」を含む結果が一番下に表示されます。 –

+0

私はこれを反映するために私の答えを編集しました。もう一度読んでください。 –

0

コマンドラインから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)  

(申し訳ありませんが、私は唯一の例を下車する大きな指標ではなく、シンプルなものを持っていた!)

0

私は次のようにクエリを変更します。

(my AND name) OR "my name" 

ここで、追加のフレーズクエリは、フレーズマッチがあるたびにスコアに追加されます。文書が内容として「私の名字」を持っている場合、フレーズクエリは追加のスコアにはなりません。しかし、内容が「私の名前」の文書は追加のスコアを持ち、一番上に表示されます。

ここでは、長さの正規化は無視されると仮定しています。

関連する問題