这是情况。
Lucene索引文档中有一个名为“content”的字段,每个文档中的“content”有两个值。例如:
- document1 - 内容:“天然气和石油”、“能源”
- document2 - 内容:“gas”、“oil”
当我搜索“content:(+gas +oil)”时,document1 和 document2 都会返回,这是预期的。
下一步,我想循环每个内容的命中值,
- “天然气和石油”
- “活力”
- “气体”
- “油”
我使用荧光笔,目的是返回“ gas and oil ”,因为只有这个“gas and oil”点击了这个查询“(+gas +oil)”。
但我实际上得到
- “天然气和石油”
- “气”
- “油”
似乎查询在荧光笔上不起作用,所以当我使用查询“(+gas +oil)”或查询“(gas oil)”进行突出显示时,并没有太大区别。
我用错了荧光笔吗?有没有办法只得到“天然气和石油”?
我使用的代码示例
for (final String value : values) {
final QueryScorer scorer = new QueryScorer(query);
final Highlighter highlighter = new Highlighter(scorer);
highlighter.setTextFragmenter(new SimpleFragmenter(2000));
final TokenStream tokenStream = analyzer.tokenStream(field, new StringReader(value));
final CachingTokenFilter filter = new CachingTokenFilter(tokenStream);
final String highlightedText = highlighter.getBestFragment(filter, value);
if (StringUtils.isNotBlank(highlightedText)) {
//TODO
}
}
提前致谢