Lucene荧光笔符合所有条件

ffdz8vbo  于 2022-11-07  发布在  Lucene
关注(0)|答案(1)|浏览(132)

情况是这样的。
Lucene索引文档中有一个名为“content”的字段,每个文档中的“content”有两个值,例如:

  • 文档1-内容:“天然气和石油”、“能源”
  • 文档2-内容:“天然气”、“石油”

当我搜索“content:(+gas +oil)"时,document 1和document 2都被返回,这是意料之中的。
下一步,我想循环每个内容值以获得点击数,

  • “天然气和石油”
  • “能源”
  • “气体”
  • “石油”

我用了荧光笔,目的是让“gasandoil”被返回,因为只有这一个“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
    }
}

先谢谢你

lmvvr0a8

lmvvr0a81#

Highlighter是基于term的,所以解决这个问题的最好方法是重建索引,并以不同的方式组织它,即:

document1 - content: "gas and oil"
document2 - content: "energy"
document3 - content: "gas"
document4 - content: "oil"

因此,当搜索“content:(+gas +oil)"时,只会命中document1。

相关问题