c# - 如何让 Lucene (.NET) 使用通配符正确突出显示?

标签 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);

然后在每次点击...

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。

最佳答案

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

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

希望对您有所帮助,

关于c# - 如何让 Lucene (.NET) 使用通配符正确突出显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2837642/

相关文章:

c# - 如何用最小起订量模拟 System.Xml.XmlWriter.WriteAttributeString()?

c# - 重铸为派生类型

java - Lucene 2.9 TokenStream API 是否比旧版本更快?

c# - Lucene.net 和部分 "starts with"词组搜索

c# - 从 log4net 转发到 NLog

c# - WPF DataGrid 在编辑时预填充单元格默认值

mysql - 如何使用 for 循环将新字段添加到文档索引 Lucene 中。

solr - 如何从 Solr/Lucene 索引获取所有 token 的列表?

c# - Lucene .NET 的多短语同义词

asp.net - Lucene.NET --> 拒绝访问段