我不太清楚我對你是指查詢清楚,但我們說的情況是這樣的:
如果您搜索「gonzaga」,則文檔B將獲得更高的分數,因爲儘管每個名稱中有一個匹配,但文檔B的名稱短得多,只有三個詞,而較短的字段更重。這是LengthNorm指的是TFIDFSimilarity documentation。
但還有其他因素。如果我們只是扔掉每個名稱到的QueryParser,看看會發生什麼吧,是這樣的:
Query queryA = queryparser.parse(docA.name);
Query queryB = queryparser.parse(docB.name);
然後生成的查詢是很大的不同:
name:carlos name:fernando name:luis name:maria name:victor name:miguel name:rafael name:gabriel name:gonzaga name:xavier name:francisco name:de name:assis name:jose name:simao name:de name:braganca name:baboia name:bourbon name:e name:saxe name:coburgo name:gotha
VS
name:tomas name:antonio name:gonzaga
有爲什麼這些會產生不同的分數是很多原因。上面討論的lengthNorm,可以提高匹配更多查詢詞的結果的coord因子很可能會起作用tf,這會使文檔中更多的詞匹配更多的idf,這更適合於整個詞出現頻率較低索引等。
得分只與查詢運行的結果集相關。對查詢或索引狀態的更改可能會導致不同的分數,而且它們不打算具有可比性。您可以使用IndexSearcher.explain來了解如何計算分數。
「這些產生相同分數的原因有很多。」你的意思是爲什麼他們不會**得到相同的分數?在你的例子中,queryA和queryB,讓我們說,對於queryA響應,我們得到帶有SCR1分數的DocB,對於queryB響應,我們得到帶有SCR1的DocA。這兩個分數是否相同。看起來不會,但只是想澄清問題 – Ganesh
對,你不會指望得分相等。即使在這些只有兩個文檔的簡單情況下,lengthNorm,coord因子和queryNorm也會不同。 – femtoRgon