2012-04-27 26 views
8

我有兩個文檔並使用Luke進行調查,在代碼中我確認它具有相同的行爲,使用StandardAnalyzerLucene .net Boost在使用*通配符時不起作用

一個文件與提升1

stored/uncompressed,indexed,tokenized<Description:Nummer ett> 
stored/uncompressed,indexed,tokenized<Id:2> 
stored/uncompressed,indexed,tokenized<Name:Apa> 

文檔兩次與升壓2

stored/uncompressed,indexed,tokenized<Description:Nummer två> 
stored/uncompressed,indexed,tokenized<Id:1> 
stored/uncompressed,indexed,tokenized<Name:Apa> 

搜索APA現場名稱與使用升壓 返回並以正確的順序。

Document 2 has Score 1,1891 
Document 1 has Score 0.5945 

搜索AP * 返回中沒有秩序,同樣的比分

Document 1 Score 1.0000 
Document 2 Score 1.0000 

搜索APA * 返回中沒有秩序,同樣的比分

Document 1 Score 1.0000 
Document 2 Score 1.0000 

這是爲什麼?即使我必須使用通配符,我也想返回一些文件的更高的提升值。這可能嗎?

歡呼所有酷編碼器!

這就是我想要的幫兇。

搜索字符串,並希望匹配。使用通配符。 搜索「呂氏春秋」 +「*」

Document 
Name 
City 

我想他的名字是隆德比名稱倫特或市的文件以獲得更高的評級是隆德例如文檔。這是由於我會知道哪些文件是最受歡迎的。我想獲得斯德哥爾摩市和斯德哥爾摩市的文件,但是按照我的選擇訂購。

回答

10

由於WildcardQueryMultiTermQuery一個子類,你所得到的1

不斷分數如果選中的t.getBoost()定義:)

t.getBoost(是項t搜索時間提升在詢問文本中指定的查詢q爲 (請參閱查詢語法),或由 對setBoost()的應用程序調用設置。請注意,在多項查詢中確實沒有直接訪問一個詞條的提升API,但 相當多的詞條在查詢中被表示爲多個TermQuery 對象,因此可以訪問查詢中詞條的提升通過 調用子查詢getBoost()

http://lucene.apache.org/core/old_versioned_docs/versions/3_0_1/api/core/org/apache/lucene/search/Similarity.html#formula_termBoost

一個可能的黑客可能會設置查詢分析器的重寫方法:

myCustomQueryParser.SetMultiTermRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE) 
+0

這是一個答案我哈d很難找到在書中尋找和搜索。謝謝,知道它是如何工作的,解決這個問題會容易得多。 – JustusTh 2012-04-30 06:22:39

+0

@JustusTh很高興知道它對你有所幫助。 – ZeNo 2012-04-30 06:53:53

+0

它確實有幫助,但也許不是所有的方式,都會對它有效。我認爲這很簡單,因爲我的問題是我想很多人想要的。 – JustusTh 2012-05-02 10:28:47