Lucene高亮显示:高亮显示标记部分



您好。

主要问题如下:我是否正确理解Lucene只能从令牌流中突出显示一个完整的令牌?

事实上,我陷入了以下情况:

  1. 有一个文档保留了一些标识符字段,让它是"IMEI"(15位数字)。"IMEI"不需要飞溅到单独的令牌,所以我在索引时使用KeywordAnalyser。

  2. 用户可以通过提供"IMEI"的部分来搜索文档。好的,它也是可以解决的,只需将用户字符串包装为前缀或通配符查询并进行搜索。

  3. 现在我只需要突出显示"IMEI"的那些部分,它对应于用户输入的请求。在这里我卡住了。如果文档。IMEI=12346789054321,用户输入2345,Lucene总是突出显示整个令牌:1234678905432 1,但我需要的是123456789054321。

有可能实现这一点吗?如果有,如何实现?

PS:这是代码片段:

    String imei = "1234567890";
    KeywordAnalyzer analyzer = new KeywordAnalyzer();
    Query query = new WildcardQuery(new Term("IMEI", "*2345*"));
    QueryScorer scorer = new QueryScorer(query);
    Fragmenter fragmenter = new SimpleSpanFragmenter(scorer);
    Formatter formatter = new SimpleHTMLFormatter("<b>", "</b>");
    Highlighter highlighter = new Highlighter(formatter, scorer);
    System.out.println(highlighter.getBestFragment(analyzer, "IMEI", imei));

通过编写自己的Formatter实现解决了这个问题。

相关内容

  • 没有找到相关文章

最新更新