【问题标题】:Only getting query terms as highlighted results with lucene highlighter (3.0)仅使用 lucene highlighter (3.0) 将查询词作为突出显示的结果
【发布时间】:2011-03-24 16:41:50
【问题描述】:

我正在使用当前代码获取片段以在 lucene 输出上突出显示,但结果始终只是搜索到的字符串。

var parser = new MultiFieldQueryParser(new[] { "contents", "PageName" }, 
    new StandardAnalyzer());                   
Query query = parser.Parse(Query);

QueryScorer scorer = new QueryScorer(query);
Formatter formatter = new SimpleHTMLFormatter(config.HighlightFormatterPrefix,
    config.HighlightFormatterSuffix);
Highlighter highlighter = new Highlighter(formatter, scorer);
highlighter.SetTextFragmenter(new SimpleFragmenter(100));
TokenStream stream = new StandardAnalyzer().TokenStream("contents",
    new StringReader(Query));
return highlighter.GetBestFragments(stream, Query, 2, ".");

如果有帮助,这里是用于查询的代码:

var parser = new MultiFieldQueryParser(new[]{"contents","PageName"}, 
    new StandardAnalyzer());
Query query = parser.Parse(searchString);

Hits results = searcher.Search(query);
var hits = new List<LuceneSearchResult>();
for (int index = 0; index < results.Length(); index++)
{
    Document document = results.Doc(index);

    var searchResult = new LuceneSearchResult();
    searchResult.Document = document;
    searchResult.Query = searchString;
    searchResult.Id = document.GetField("ID").StringValue();
    searchResult.Score = results.Score(index);
    hits.Add(searchResult);
}

我搜索的内容与为突出显示的片段返回的字符串完全相同。

【问题讨论】:

    标签: c# search lucene lucene.net


    【解决方案1】:

    我发现了问题。生成的工作代码是结果的变化:

    var parser = new QueryParser("contents", new StandardAnalyzer());
    Query query = parser.Parse(Query);
    SimpleHTMLFormatter formatter = new SimpleHTMLFormatter(config.HighlightFormatterPrefix, config.HighlightFormatterSuffix);
    QueryScorer fragmentScorer = new QueryScorer(query,"contents");
    Highlighter highlighter = new Highlighter(formatter, fragmentScorer);
    highlighter.SetTextFragmenter(new SimpleFragmenter(100));
    TokenStream tokenStream = new SimpleAnalyzer().TokenStream(config.MainContentFieldName, new StringReader(field.StringValue()));
    
    return highlighter.GetBestFragments(tokenStream, field.StringValue(), 2, ".");
    

    我在查询中从多个字段更改为单个字段,因为页面名称在摘要中永远不会有用,并且从 Formatter 更改为 SimpleFormatter

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-07
      • 2022-10-18
      • 1970-01-01
      • 2015-05-08
      • 2011-04-13
      • 2010-12-19
      • 2016-05-28
      相关资源
      最近更新 更多