Вопрос о подсчете очков Lucene - PullRequest
4 голосов
/ 04 августа 2009

У меня есть вопрос по поводу подсчета очков Lucene. У меня есть два документа в индексе, один содержит «мое имя», а другой - «мое имя». Когда я ищу ключевое слово «мое имя», второй документ указывается выше первого. Я хочу, чтобы в документе содержалось точное ключевое слово, которое я набрал, сначала он должен быть указан, а затем другой Может кто-нибудь помочь мне, как это сделать. Спасибо.

Ответы [ 4 ]

3 голосов
/ 04 августа 2009

Вторая попытка ответа: Поведение Lucene по умолчанию должно быть тем, о чем вы просите. Критическим фактором здесь является lengthNorm () часть оценки, которая иногда оценивает более длинные документы ниже, чем более короткие. См. API сходства Lucene для контекста. Если, скажем, lengthNorm была одинаковой для двух совпадений, они были отсортированы произвольно.

Функция объяснение () поможет вам понять, почему документы были оценены так, как они были, а не по умолчанию.

Я предполагаю, что вы используете BooleanQuery. Если вы опубликуете точный способ формулировки вашего запроса, я могу сказать больше. См. Также Синтаксис анализатора запросов . Я надеюсь, что это ближе к отметке.

0 голосов
/ 23 августа 2013

У меня похожая проблема. И я решил это с помощью PhraseQuery, который поддерживает slop (относительная позиция термина в документе учитывается). Надеюсь, это поможет.
Подробнее: Как оценка Lucene зависит от относительной позиции запроса?

0 голосов
/ 06 августа 2009

Я изменю запрос следующим образом.

(my AND name) OR "my name"

Здесь, дополнительный запрос фразы добавляет к оценке, когда есть совпадение фразы. В случае, если документ имеет «мое имя» в качестве содержимого, запрос фразы не приведет к дополнительной оценке. Но документ с содержанием «мое имя» будет иметь дополнительную оценку и будет отображаться вверху.

Здесь я предполагаю, что нормализация длины игнорируется.

0 голосов
/ 04 августа 2009

Если вы используете lucli из командной строки (загрузите последний исходный код Lucene и он находится в каталоге contrib), вы можете использовать команду объяснения, чтобы Lucene объяснил, почему он так высоко его оценил.

Получится что-то вроде этого:

---------------- 2 оценка: 0.6089077 ---------------------

(бла-бла, ваш документ)

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)    

(Извините, у меня был только большой индекс, чтобы получить пример, а не простой!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...