2010-05-14 80 views
6

我在我的ASP.NET/C# web應用程序中直接使用Lucene.NET API。當我使用通配符進行搜索時,如「fuc *」,熒光筆不會突出顯示任何內容,但是當我搜索整個單詞時,如「紫紅色」,它會突出顯示。 Lucene是否有能力使用與之相匹配的相同邏輯來突出顯示?如何讓Lucene(.NET)使用通配符正確突出顯示?

各種可能相關的下面的代碼片段:

var formatter = new Lucene.Net.Highlight.SimpleHTMLFormatter(
    "<span class='srhilite'>", 
    "</span>"); 

var fragmenter = new Lucene.Net.Highlight.SimpleFragmenter(100); 
var scorer = new Lucene.Net.Highlight.QueryScorer(query); 
var highlighter = new Lucene.Net.Highlight.Highlighter(formatter, scorer); 
highlighter.SetTextFragmenter(fragmenter); 

,然後在每一擊...

string description = Server.HtmlEncode(doc.Get("Description")); 
var stream = analyzer.TokenStream("Description", 
    new System.IO.StringReader(description)); 
string highlighted_text = highlighter.GetBestFragments(
    stream, description, 1, "..."); 

而且我用的QueryParser和StandardAnalyzer。

回答

4

您需要確保將解析器重寫方法設置爲SCORING_BOOLEAN_QUERY_REWRITE

自Lucene v2.9出現以來,這一改變似乎變得必要。

希望這會有所幫助,

+0

錯誤......怎麼回事?從我在文檔中看到的,我需要一個MultiTermQuery來解決這個問題,但我只有一個Query。我應該測試typeof MultiTermQuery並投射嗎? – 2010-05-18 13:42:44

+0

我一味地嘗試過: query = parser.Parse(searchText); ((Lucene.Net.Search.PrefixQuery)query).SetRewriteMethod(Lucene.Net.Search.PrefixQuery.SCORING_BOOLEAN_QUERY_REWRITE);如果(query.GetType()== typeof(Lucene.Net.Search.PrefixQuery)) {(Lucene.Net.Search.PrefixQuery)query)。 } 它讓事情變得更糟。 – 2010-05-18 13:49:20

+2

我的意思是在解析器上設置重寫樣式。即使用解析器對象的SetMultiTermRewriteMethod方法。 HTH – 2010-05-18 17:46:18