美好的一天。
主要问题如下:我是否正确理解Lucene只能突出显示来自令牌流的完整令牌?
事实上,我坚持以下情况:
有一个文件保留了一些标识符字段,让它成为IMEI' (15位数字)。 ' IMEI'不需要将其分割为令牌,因此我在索引时使用KeywordAnalyser。
用户可以通过提供' IMEI'的部分来搜索文档。好吧,它也是可以解决的,只需将用户字符串包装到前缀或通配符查询中并进行搜索。
现在我只需要突出显示那些与用户输入的请求相对应的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));
答案 0 :(得分:1)
通过编写我自己的Formatter实现解决了这个问题。