当前位置: 首页 > 编程语言 > C#

Lucene Hightlighter有时会莫名其妙地返回空白片段分享

时间:2023-04-10 15:56:37 C#

C#学习教程:LuceneHightlighter有时莫名其妙地返回空白段。我正在尝试使用Lucene.Net.Highlight.Highlighter类来显示搜索结果的相关片段,但它不能始终如一地工作。大多数时候,调用Highlighter.GetBestFragments()完全符合我的预期(显示其中包含给定查询字符串的相关文本片段),但有时它只返回一个空字符串。我已经对我的输入进行了三重检查,我可以验证我正在使用的查询字符串是否存在于输入文本中,但荧光笔有时会随机返回一个空字符串。这个问题是可重现的;返回空白片段的文档在用于相同查询时将继续返回空白片段,具有合法片段的文档将继续具有合法片段。但是,问题不是特定于文档的。一些查询返回文档的有效片段,其他查询返回同一文档的空字符串。这个问题似乎也与我的分析仪无关;无论我使用的是StandardAnalyzer还是SnowballAnalyzer,都会出现问题。经过几个小时的探索,我在查询/文档中找不到任何失败的模式,除了那些有效的模式。请记住,这种情况发生在使用完全相同的查询专门从Lucene索引中提取的文档上。这意味着Searcher能够在目标文档中找到相关的查询字符串,但Highlighter不能。这是Lucene的一个错误吗?如果是这样,我该如何解决呢?私有静态SimpleFragmenter_fragmenter=newSimpleFragmenter(50);...{使用(varsearcher=newIndexSearcher(analyzerInfo.Directory,false)){QueryParserparser=newQueryParser(Lucene.Net.Util.Version.LUCENE_29,"Text",analyzerInfo.Analyzer);parser.SetMultiTermRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE);//构建查询BooleanQuerybooleanQuery=newBooleanQuery();booleanQuery.Add(newTermQuery(newTerm("PageNum","0")),BooleanClause.Occur.MUST);booleanQuery.Add(parser.Parse(searchQuery),BooleanClause.Occur.MUST);查询query=booleanQuery.Rewrite(searcher.GetIndexReader());//从查询中获取结果ScoreDoc[]hits=searcher.Search(query,50).ScoreDocs;列表结果=hits.Select(hit=>MapLuceneDocumentToData(searcher.Doc(hit.Doc))).ToList();//将相关片段添加到搜索结果中(s为什么选择某个结果)QueryScorerscorer=newQueryScorer(query);荧光笔highlighter=newHighlighter(_formatter,scorer);highlighter.SetTextFragmenter(_fragmenter);foreach(DVDocresultinresults){TokenStreamstreamyz.analyzerTokenStream("Text",newStringReader(result.Text));}result.RelevantFragments=highlighter.GetBestFragments(stream,result.Text,3,"...");}//清理analyzerInfo.Analyzer.Close();搜索器.Close();返回结果;(注意:DVDoc本质上只是一个结构,它存储有关找到的文档的信息。MapLuceneDocumentToData方法将LuceneDocument转换为我的自定义DVDoc类,没有魔法。)因为每个人都喜欢示例输入和输出:我正在使用Lucene.NET版本2.9.4g。默认情况下,Highlighter只会处理文档的前51200个字符。要增加此限制,请设置MaxDocCharsToAnalyze属性。http://lucene.apache.org/core/old_versioned_docs/versions/2_9_2/api/contrib-highlighter/org/apache/lucene/search/highlight/Highlighter.html#setMaxDocCharsToAnalyze(int)以上是C#学习教程:LuceneHighlighter有时会莫名其妙地返回空白剪辑共享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击权利联系管理会员删除。如需转载请注明出处: