我们可以在Lucence.net搜索结果中获得匹配项的位置吗?
问题描述:
我正在使用Lucene.net在Asp.net应用程序中实现全文搜索功能。搜索结果页面应该高亮显示匹配项目。我得到了Lucene.Net.Search.Hits的实例,并使用.Doc(int i)方法来获取Lucene Document。我们可以在Lucence.net搜索结果中获得匹配项的位置吗?
但我不知道如何通过一些Lucene类的现有方法或属性来获得匹配项的位置。 Lucene.net是否提供了支持高亮查询字符串的功能?
答
正如前面说回答者中找到,你应该使用荧光笔或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
选项在将您的查询传递给荧光笔之前,应将其重写
- 传递给荧光笔分析器应该是你用于索引相同和搜索
'要突出一个领域,它应该被添加到索引中Field.Store.YES option'你并不需要如果您计划突出显示诸如原始(文本)文件索引的extarnal源文件,则存储该文件。 –
@ L.B。如果您想突出显示文档字段的文本并且不知道这样的荧光笔要求,它可能是一个陷阱。 – buru