您好。
主要问题如下:我是否正确理解Lucene只能从令牌流中突出显示一个完整的令牌?
事实上,我陷入了以下情况:
-
有一个文档保留了一些标识符字段,让它是"IMEI"(15位数字)。"IMEI"不需要飞溅到单独的令牌,所以我在索引时使用KeywordAnalyser。
-
用户可以通过提供"IMEI"的部分来搜索文档。好的,它也是可以解决的,只需将用户字符串包装为前缀或通配符查询并进行搜索。
-
现在我只需要突出显示"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实现解决了这个问题。