我们可以在Lucence.net搜索结果中获得匹配项的位置吗?

问题描述:

我正在使用Lucene.net在Asp.net应用程序中实现全文搜索功能。搜索结果页面应该高亮显示匹配项目。我得到了Lucene.Net.Search.Hits的实例,并使用.Doc(int i)方法来获取Lucene Document。我们可以在Lucence.net搜索结果中获得匹配项的位置吗?

但我不知道如何通过一些Lucene类的现有方法或属性来获得匹配项的位置。 Lucene.net是否提供了支持高亮查询字符串的功能?

您可以使用HighlighterFastVectorHighlighter可以在contrib

正如前面说回答者中找到,你应该使用荧光笔或FastVectorHighlighter从contrib请。

下面是使用荧光笔lib中获得突出片段的例子:

Formatter formatter = new SimpleHTMLFormatter("<span><b>", "</b></span>"); 
Lucene.Net.Highlight.Scorer scorer = new QueryScorer(query, field); 
Lucene.Net.Highlight.Encoder encoder = new SimpleHTMLEncoder(); 
var highlighter = new Highlighter(formatter, encoder, scorer); 
highlighter.SetTextFragmenter(new SimpleFragmenter(100)); 

string[] fragments = 
    highlighter.GetBestFragments(DefaultAnalyzer, field, doc.Get(field), 3); 

一些荧光笔相关陷阱:

  • 要突出一个领域,它应该被添加到索引中Field.Store.YES选项

  • 在将您的查询传递给荧光笔之前,应将其重写

  • 传递给荧光笔分析器应该是你用于索引相同和搜索
+0

'要突出一个领域,它应该被添加到索引中Field.Store.YES option'你并不需要如果您计划突出显示诸如原始(文本)文件索引的extarnal源文件,则存储该文件。 –

+0

@ L.B。如果您想突出显示文档字段的文本并且不知道这样的荧光笔要求,它可能是一个陷阱。 – buru