2011-08-24 172 views
0

我有興趣瞭解更多關於Lucene查詢得分的更具體的信息。在他們的文檔中,他們提到了VSM。我熟悉VSM,但它似乎與他們所允許的查詢類型不一致。瞭解Lucene查詢

我嘗試通過BooleanScorer2和BooleanWeight的源代碼,並沒有真正有效。

我的問題是,有人可以通過執行BooleanScorer來解釋它如何組合查詢。

另外,有沒有辦法簡單地發出幾個條款,只是得到這些條款的原始tf.idf分數,它在文檔中描述的方式?

+0

如果我問的話,請提供,但是有沒有理由不接受RObert的答案?看起來他徹底解釋了一切! – javanna

回答

4

的地方,開始是http://lucene.apache.org/java/3_3_0/api/core/org/apache/lucene/search/Similarity.html

我認爲這清除了你的不一致? Lucene結合了信息檢索的布爾模型(BM)和信息檢索的向量空間模型(VSM) - 由BM「批准」的文件由VSM評分。

接下來要看的是Searcher.explain,它可以給你一個字符串,解釋如何計算(查詢,文檔)對的分數。

通過執行BooleanScorer來跟蹤我可能很具有挑戰性,我認爲它最容易首先理解BooleanScorer2,它使用像ConjunctionScorer/DisjunctionSumScorer這樣的子核心,並將BooleanScorer視爲優化。

如果這讓人困惑,那麼在TermScorer上開始更簡單。我個人看它「自下而上」反正:

  • 一個查詢產生的重量在整個指數有效:這個集成升壓,IDF,queryNorm,甚至容易引起混淆,任何「外部」的提升/'父'像booleanquery這樣的持有該術語的查詢。這個重量是一次計算的。
  • Weight對於每個索引段創建一個Scorer(例如TermScorer),對於單個詞條,此記分器具有它在公式中需要的所有內容,除了什麼是依賴於文檔的:文檔內詞條頻率(TF)它必須讀取帖子和文檔的長度標準化值(標準)。所以這就是爲什麼termscorer將文檔評分爲weight * sqrt(tf)* norm。在實踐中,這被緩存爲tf值,以便對大多數文檔進行評分是單一乘法。
  • 除了它的記分員負責nextDoc()'ing和advance()'subscorers之外,BooleanQuery確實沒有做太多的事情,並且當布爾模型滿足時,它結合了subscorers的分數,應用協調工廠(coord())基於多少個子核心匹配。

一般來說,由於在所有發佈的表單中,記分員負責兩件事情:匹配和計算分數,因此很難追蹤lucene記分文件的方式。在Lucene的主幹(http://svn.apache.org/repos/asf/lucene/dev/trunk/)中,這些現在是分開的,這樣一種相似性基本上對評分的所有方面負責,並且這是分開的從匹配。所以這裏的API可能更容易理解,也許更難,但至少你可以參考許多其他評分模型(BM25,語言模型,隨機性背離,基於信息的模型)的實現,如果你感到困惑:http://svn.apache.org/repos/asf/lucene/dev/branches/flexscoring/lucene/src/java/org/apache/lucene/search/similarities/