我正在使用Lucene.net来搜索给定的文档。要求是一旦搜索完成,它应该突出显示文档中的搜索词。我见过返回最佳片段的示例。但我需要的是突出显示主要内容。
using (StandardAnalyzer standardAnalyzer = new StandardAnalyzer(Version.LUCENE_30, stopWords))
{
QueryParser parser = new QueryParser(Version.LUCENE_30, "Content", standardAnalyzer);
parser.AllowLeadingWildcard = true;
Query qry = parser.Parse(searchText);
Directory indexDir = CreateRAMDirectory(htmlContent);
IndexReader reader = IndexReader.Open(indexDir, true);
IndexSearcher searcher = new IndexSearcher(reader);
searcher.SetDefaultFieldSortScoring(true, true);
IFormatter formatter = new SimpleHTMLFormatter("<span style=\"font-weight:bold; background-color:yellow;\">", "</span>");
SimpleFragmenter fragmenter = new SimpleFragmenter(1000);
QueryScorer scorer = null;
scorer = new QueryScorer(qry);
ScoreDoc[] hits = searcher.Search(qry, null, 10000, Sort.RELEVANCE).ScoreDocs;
Highlighter highlighter = new Highlighter(formatter, scorer);
highlighter.TextFragmenter = fragmenter;
foreach (var result in hits)
{
int docId = result.Doc;
float score = result.Score;
Document doc = searcher.Doc(docId);
Lucene.Net.Analysis.TokenStream stream = standardAnalyzer.TokenStream("Content", new IO.StringReader(searchText));
String highlighterData = highlighter.GetBestFragments(stream, searchText, 1000, "");
}
}
我是www.example.com的新手Lucene.net,我如何才能让整个文档中的搜索词内容突出显示而不是片段?
2条答案
按热度按时间qlfbtfca1#
碎片程序控制返回的文本块的大小。要使用整个字段内容,只需使用
NullFragmenter
,而不是SimpleFragmenter
。luaexgnf2#
我也遇到了同样的问题,即使使用NullFragmenter,它也只返回了大约51 kB的文本。通过分析对象,我发现在highlighter中有另一个属性,它设置了一个片段的最大长度。将该值设置为字符串的长度,那么整个文档将被处理。