lucene使用中设置结果高亮显示的问题

用下面的代码设置查询结果高亮显示,可结果<font color='red'>, </font>都给加到text的最前面了,就比如说我对“我爱中国”里的“中国”进行查询,返回的text是“<font color='red'></font>我爱中国”,为什么呢
代码如下

String text = doc.get(fields[2]);
SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<font color='red'>", "</font>");  
Highlighter highlighter = new Highlighter(simpleHTMLFormatter,new QueryScorer(query1));   
highlighter.setTextFragmenter(new SimpleFragmenter(text.length())); 
TokenStream tokenStream = luceneAnalyzer.tokenStream("", new StringReader(text));
String highLightText = highlighter.getBestFragment(tokenStream, text); 

该回答引用ChatGPT

根据您提供的代码,问题可能出现在 SimpleFragmenter 中使用的 text.length()。这个方法返回整个文本的长度,这可能会导致高亮显示过长,从而出现不必要的标记。


尝试将 SimpleFragmenter 中使用的 text.length() 替换为一个更合适的值,例如要高亮显示的文本的最大长度或一些其他适当的值。例如,您可以使用 SimpleFragmenter(100) 来将高亮显示的片段长度限制为 100 个字符。


另外,如果您发现高亮显示的结果在错误的位置出现,您可以尝试使用 highlighter.getBestFragments(tokenStream, text, n) 方法,其中 n 是要返回的高亮显示片段的数量。这将返回一个包含多个高亮显示片段的字符串数组,您可以从中选择正确的结果。