如何使用通配符正确地突出显示Lucene(.NET)?

Sco*_*ord 6 c# lucene lucene.net highlighting

我在ASP.NET/C#Web应用程序中直接使用Lucene.NET API.当我使用通配符搜索时,例如"fuc*",荧光笔不会突出显示任何内容,但是当我搜索整个单词时,如"fuchsia",它会突出显示.Lucene是否能够使用与之匹配的相同逻辑来突出显示?

以下各种可能相关的代码片段:

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);
Run Code Online (Sandbox Code Playgroud)

然后在每次击中......

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, "...");
Run Code Online (Sandbox Code Playgroud)

我正在使用QueryParser和StandardAnalyzer.

Adr*_*lon 4

您需要确保将解析器重写方法设置为SCORING_BOOLEAN_QUERY_REWRITE.

自从 Lucene v2.9 出现以来,这种改变似乎就变得必要了。

希望这可以帮助,

  • 我实际上是想在解析器上设置重写样式。即使用解析器对象的 SetMultiTermRewriteMethod 方法。华泰 (2认同)