Lucene突出显示:突出显示令牌部分

时间:2014-08-27 11:57:35

标签: java lucene

美好的一天。

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

事实上,我坚持以下情况:

  1. 有一个文件保留了一些标识符字段,让它成为IMEI' (15位数字)。 ' IMEI'不需要将其分割为令牌,因此我在索引时使用KeywordAnalyser。

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

  3. 现在我只需要突出显示那些与用户输入的请求相对应的IMEI'部分。在这里,我坚持了下来。 如果document.IMEI = 123456789054321,并且用户输入了2345,Lucene总是突出显示整个令牌: 123456789054321 ,但我需要的是1 2345 6789054321。

    < / LI>

    是否有可能实现这一点,如果是的话 - 怎么做?

    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));
    

1 个答案:

答案 0 :(得分:1)

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