Solr 高亮源码阅读

Solr高亮使用了很多Lucene的源码,在Lucene源码org.apache.lucene.search.highlight包的Highlighter.java里的方法:

public final TextFragment[] getBestTextFragments(

    TokenStream tokenStream,

    String text,

    boolean mergeContiguousFragments,

    int maxNumFragments)

会对text文本(document中一个field的文本),逐个token,逐个token 的判断是否应该高亮。而其中关键语句

startOffset = tokenGroup.matchStartOffset;

endOffset = tokenGroup.matchEndOffset;

tokenText = text.substring(startOffset, endOffset);

String markedUpText=formatter.highlightTerm(encoder.encodeText(tokenText), tokenGroup);

formatter.highlightTerm这个函数会对解析的tokenText,判断其是否应该高亮,返回给markedUpText。判断的依据就是tokenGroup里保存的一个score,只有当这个score大于0时,才返回高亮文本,而返回的高亮文本会通过预设的pre tag和post tag包起来,也就是默认的<em>和</em>标签。


08/27/2015

今天调试代码,发现的奇怪问题是对于某些中文词,tokenGroup里保存的startOffset和endOffset值居然是一样的,但词的长度却记录下了。造成高亮的代码忽略了这些词,真是非常奇怪。比如对于文本“早在上世纪40年代第一台计算机诞生”,我逐个跟踪token解析过程,发现它完全跳过了“第一台计算机”这几句。个人怀疑是我使用的中文分词包有问题。


转载于:https://my.oschina.net/u/2242064/blog/497626

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值