【问题标题】:How do I get Lucene (.NET) to highlight correctly with wildcards?如何让 Lucene (.NET) 使用通配符正确突出显示?
【发布时间】:2011-02-19 17:26:22
【问题描述】:

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

以下各种可能相关的代码-sn-ps:

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。

【问题讨论】:

    标签: c# lucene lucene.net highlighting


    【解决方案1】:

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

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

    希望这会有所帮助,

    【讨论】:

    • Err... 怎么样?从我在文档中看到的内容来看,我需要一个 MultiTermQuery 来解决这个问题,但我只有一个 Query。我应该测试 typeof MultiTermQuery 并进行转换吗?
    • 我一味尝试:query = parser.Parse(searchText); if (query.GetType() == typeof(Lucene.Net.Search.PrefixQuery)) { ((Lucene.Net.Search.PrefixQuery)query).SetRewriteMethod(Lucene.Net.Search.PrefixQuery.SCORING_BOOLEAN_QUERY_REWRITE); } 这让事情变得更糟。
    • 我实际上是想在解析器上设置重写样式。即使用解析器对象的 SetMultiTermRewriteMethod 方法。 HTH
    猜你喜欢
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 2010-11-11
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    相关资源
    最近更新 更多