簡體   English   中英

solr / lucene idf得分

[英]solr / lucene idf score

我正在努力更好地理解lucene如何評分我的搜索,以便我可以對我的搜索配置或文檔內容進行必要的調整。

以下是分數細分的一部分。

產品:

    0.34472802 = queryWeight, product of:
        2.2 = boost
        7.880174 = idf(docFreq=48, maxDocs=47667)
        0.019884655 = queryNorm
      1.9700435 = fieldWeight in 14363, product of:
        1.0 = tf(freq=1.0), with freq of:
          1.0 = termFreq=1.0
        7.880174 = idf(docFreq=48, maxDocs=47667)
        0.25 = fieldNorm(doc=14363)
0.26806915 = (MATCH) max of:
  0.07832639 = (MATCH) weight(shortDescription:tires^1.1 in 14363) [DefaultSimilarity], result of:
    0.07832639 = score(doc=14363,freq=1.0 = termFreq=1.0

我理解如何計算提升,因為這是我的配置值

但是如何計算idf(7.880174 = idf值)。

根據lucene,idf公式為:idf(t)= 1 + log(numDocs /(docFreq + 1))

我檢查了核心管理控制台,發現我的docFreq = maxDocs = 47667。

使用lucene的公式,我無法計算預期的7.880174。 相反,我得到:idf = 3.988 = 1 + log(47667 /(48 + 1))。

我的配方中是否有一些我遺漏的東西。

我認為你的log功能選擇10作為基礎,而在lucene中我們選擇e作為基礎。

log(47667/(48+1), 10) = 2.9880217397306
log(47667/(48+1), e) = 6.8801743154459

lucene的idf方法的源代碼是:

  public float idf(int docFreq, int numDocs) {
    return (float)(Math.log(numDocs/(double)(docFreq+1)) + 1.0);
  }

如您所見, idf使用Java Math.log計算idfMath.log選擇e作為log函數。 有關詳細信息,請參閱Java Math api

看起來lucene網站有一個錯字。

http://lucene.apache.org/core/3_6_0/api/core/org/apache/lucene/search/Similarity.html

狀態1 + log(numDocs /(docFreq + 1))

但它實際上是1 + ln(numDocs /(docFreq + 1))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM