2017-08-03 27 views
0

我有以下Lucene的說明:Lucene的.Net和定製得分

{1.25 = (MATCH) sum of: 

    0.5 = (MATCH) weight(Caption:vrom^0.5 in 0) [MySimilarity], result of: 
    0.5 = score(doc=0,freq=1 = termFreq=1 
), product of: 
     0.5 = queryWeight, product of: 
     0.5 = boost 
     1 = idf(docFreq=1, maxDocs=4) 
     1 = queryNorm 
     1 = fieldWeight in 0, product of: 
     1 = tf(freq=1), with freq of: 
      1 = termFreq=1 
     1 = idf(docFreq=1, maxDocs=4) 
     1 = fieldNorm(doc=0) 

    0.75 = (MATCH) weight(Caption:vroma^0.75 in 0) [MySimilarity], result of: 
    0.75 = score(doc=0,freq=1 = termFreq=1 
), product of: 
     0.75 = queryWeight, product of: 
     0.75 = boost 
     1 = idf(docFreq=1, maxDocs=4) 
     1 = queryNorm 
     1 = fieldWeight in 0, product of: 
     1 = tf(freq=1), with freq of: 
      1 = termFreq=1 
     1 = idf(docFreq=1, maxDocs=4) 
     1 = fieldNorm(doc=0) 
} 

,我想,以過濾由他們的查詢重量匹配結果爲MAX匹配和不匹配的總和。

我需要做的是,從每個文檔中,我想採取在每個條款中給出的最高數字。 (在這個例子中,我想將0.75作爲匹配分數而不是1.25)。這是可能的,甚至是正確的嗎?

我到目前爲止所做的是創建一個相似性,以改變計算得分的方式,但是我仍然錯過了獲取MAX而不是SUM的部分。

我正在使用Lucene .Net版本4.8(測試版)。

預先感謝您!

回答

0

感謝您的解決方案,但我仍然有一個問題。 當我試圖做到這一點時,我得到了和以前一樣的結果。我的代碼如下(從here我用的例子):

BooleanQuery finalQuery = new BooleanQuery(); 
DisjunctionMaxQuery q1 = new DisjunctionMaxQuery(0.01f); 
Query query = new FuzzyQuery(new Term("Caption", "roma")); 
q1.Add(query); 
finalQuery.Add(q1, Occur.MUST); 

結果我得到的是(在相同的問題):

{1.25 = (MATCH) sum of: 

    0.5 = (MATCH) weight(Caption:vrom^0.5 in 0) [MySimilarity], result of: 
    0.5 = score(doc=0,freq=1 = termFreq=1 
), product of: 
     0.5 = queryWeight, product of: 
     0.5 = boost 
     1 = idf(docFreq=1, maxDocs=4) 
     1 = queryNorm 
     1 = fieldWeight in 0, product of: 
     1 = tf(freq=1), with freq of: 
      1 = termFreq=1 
     1 = idf(docFreq=1, maxDocs=4) 
     1 = fieldNorm(doc=0) 

    0.75 = (MATCH) weight(Caption:vroma^0.75 in 0) [MySimilarity], result of: 
    0.75 = score(doc=0,freq=1 = termFreq=1 
), product of: 
     0.75 = queryWeight, product of: 
     0.75 = boost 
     1 = idf(docFreq=1, maxDocs=4) 
     1 = queryNorm 
     1 = fieldWeight in 0, product of: 
     1 = tf(freq=1), with freq of: 
      1 = termFreq=1 
     1 = idf(docFreq=1, maxDocs=4) 
     1 = fieldNorm(doc=0) 
} 

我試了一下,並沒有修改相似,但我也一樣。在這種情況下的結果是:

{0.505973 = (MATCH) sum of: 

    0.2023892 = (MATCH) weight(Caption:vrom^0.5 in 0) [DefaultSimilarity], result of: 
    0.2023892 = score(doc=0,freq=1 = termFreq=1 
), product of: 
     0.3187582 = queryWeight, product of: 
     0.5 = boost 
     1.693147 = idf(docFreq=1, maxDocs=4) 
     0.3765274 = queryNorm 
     0.6349302 = fieldWeight in 0, product of: 
     1 = tf(freq=1), with freq of: 
      1 = termFreq=1 
     1.693147 = idf(docFreq=1, maxDocs=4) 
     0.375 = fieldNorm(doc=0) 

    0.3035838 = (MATCH) weight(Caption:vroma^0.75 in 0) [DefaultSimilarity], result of: 
    0.3035838 = score(doc=0,freq=1 = termFreq=1 
), product of: 
     0.4781373 = queryWeight, product of: 
     0.75 = boost 
     1.693147 = idf(docFreq=1, maxDocs=4) 
     0.3765274 = queryNorm 
     0.6349302 = fieldWeight in 0, product of: 
     1 = tf(freq=1), with freq of: 
      1 = termFreq=1 
     1.693147 = idf(docFreq=1, maxDocs=4) 
     0.375 = fieldNorm(doc=0) 
}