Lucene.net 在文本中突出显示搜索到的术语

ttygqcqt  于 2022-11-07  发布在  Lucene
关注(0)|答案(2)|浏览(254)

我正在使用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,我如何才能让整个文档中的搜索词内容突出显示而不是片段?

qlfbtfca

qlfbtfca1#

碎片程序控制返回的文本块的大小。要使用整个字段内容,只需使用NullFragmenter,而不是SimpleFragmenter

Fragmenter fragmenter = new NullFragmenter();
.....
highlighter.TextFragmenter = fragmenter;
luaexgnf

luaexgnf2#

我也遇到了同样的问题,即使使用NullFragmenter,它也只返回了大约51 kB的文本。通过分析对象,我发现在highlighter中有另一个属性,它设置了一个片段的最大长度。将该值设置为字符串的长度,那么整个文档将被处理。

highlighter.TextFragmenter = new NullFragmenter();
highlighter.MaxDocCharsToAnalyze = text.Length;

相关问题