2009-08-04 6 views
4

Lucene 점수에 관한 질문이 있습니다. 색인에 두 개의 문서가 있는데, 하나는 "내 이름"이고 다른 하나는 "내 이름"입니다. "my name"이라는 키워드를 검색하면 두 번째 문서가 첫 번째 문서 위에 나열됩니다. 필자가 입력 한 정확한 키워드가 문서에 포함되어 있으면 먼저 나열하고 그 다음에 다른 문서를 나열해야합니다. 누구든지이 일을하는 방법을 도울 수 있습니까? 감사.Lucene 채점에 관한 질문

답변

3

두 번째 시도 : Lucene의 기본 동작은 사용자가 요구하는 것이어야합니다. 여기서 중요한 요소는 점수의 일부인 lengthNorm()입니다. 이보다 짧은 문서보다 더 긴 문서는 점수가 부과되는 경우가 있습니다. 문맥에 대해서는 Lucene's Similarity API을 참조하십시오. 예를 들어, 두 개의 히트에 대해 lengthNorm이 동일하다면, 그들은 임의로 정렬됩니다.

explain() 기능은 문서가 원래대로 표시되는 이유를 확인하는 데 도움이됩니다.

나는 당신이 BooleanQuery를 사용하고 있다고 가정합니다. 귀하의 질의가 공식화 된 정확한 방법을 게시하면 더 말할 수있을 것입니다. Query Parser Syntax도 참조하십시오. 이것이이 마크에 더 가깝기를 바랍니다.

+0

이렇게하면 두 번째 문서가 * 유일한 * 문서와 일치하게됩니다. 포스터는 단지 다른 사람보다 * 높은 * 점수 *를 얻으려고 요청했습니다. – Avi

+0

답장을 보내 주셔서 감사합니다. 그러나 내가하고 싶은 것은 다른 것입니다. 나는 "my"와 "name"두 단어를 포함하는 모든 문서를 검색하려고합니다. 여기서 문제는 입력 한 키워드가 "내 이름"이므로 전체 구문 "내 이름"이 목록의 맨 위에 있고 "내 이름"이 포함 된 결과가 맨 아래에 표시되도록하려는 것입니다. . –

+0

나는이를 반영하기 위해 나의 대답을 편집했다. 다시 읽으십시오. –

0

명령 줄에서 lucli를 사용하는 경우 (최신 Lucene 소스를 다운로드하고 contrib 디렉토리에 있음) "설명"명령을 사용하여 Lucene이 왜 점수를 매겼는지 설명 할 수 있습니다. ------------ 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" 

여기에서 추가 구문 쿼리는 구문 검색이있을 때마다 점수에 추가합니다. 문서의 내용이 "내 이름"인 경우 구문 쿼리가 추가 점수가되지 않습니다. 그러나 내용이 "내 이름"인 문서는 추가 점수를 가지며 맨 위에 표시됩니다.

여기서 정규화 길이가 무시된다고 가정합니다.