文档章节

Solr 高亮源码阅读

go2school
 go2school
发布于 2015/08/26 22:19
字数 315
阅读 151
收藏 3

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解析过程,发现它完全跳过了“第一台计算机”这几句。个人怀疑是我使用的中文分词包有问题。


© 著作权归作者所有

共有 人打赏支持
go2school
粉丝 10
博文 34
码字总数 14674
作品 0
技术主管
Solr初探(5)——Solrj的基本使用

导入依赖 导入Solr源码包文件夹下的以及文件夹下的所有包到项目中。除此之外,还要加上包和测试包。 添加/更新数据 Solrj的使用十分简单,下面是一个添加数据的例子: (1)BaseURL就是Solr的...

yuanlaijike
04/10
0
0
Solr学习总结(五)SolrNet的基本用法及CURD

  上一篇已经讲到了Solr 查询的相关的参数。这里在讲讲C#是如何通过客户端请求和接受solr服务器的数据, 这里推荐使用SolrNet,主要是:SolrNet使用非常方便,而且用户众多,一直都在更新,...

章为忠
2015/12/24
0
0
Apache solr使用

一、Solr介绍 最近在一个项目中做了一个全文检索的功能,刚开始本来打算用Apache Lucene去实现,毕竟之前对Lucene有一点了解,但是在网上看技术类文章时看见了别人介绍Apache Solr,感觉挺好...

引鸩怼孑
2015/09/10
91
0
有关solr的一些不明白的地方,希望得到大家的解答

最近在学习solr的使用,但是有一些不理解的地方希望在这方面了解的人能给我一些解答,非常的感谢。 第一:solr的高亮,在使用solrJ时,resp.getHighlighting().get(id).get("content")进行高...

BravoZu
2012/07/31
239
0
使用SSM+Solr优雅的实现电商项目中的搜索功能

在学习了Redis&Spring-Data-Redis入门和Solr&Spring-Data-Solr入门后,接下来就该是项目实战了。这次我们用Vue.JS和ElementUI写前端页面,优雅的整合SSM-Shiro-Redis-Solr框架。 手摸手教你优...

TyCoding
09/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring中static变量不能@value注入的原因

今天本想使用@Value的方式使类中的变量获得yml文件中的配置值,然而一直失败,获得的一直为null。 类似于这样写的。 public class RedisShardedPool { private static ShardedJedisPool pool...

钟然千落
16分钟前
0
0
CentOS7防火墙firewalld操作

firewalld Linux上新用的防火墙软件,跟iptables差不多的工具。 firewall-cmd 是 firewalld 的字符界面管理工具,firewalld是CentOS7的一大特性,最大的好处有两个:支持动态更新,不用重启服...

dingdayu
今天
1
0
关于组件化的最初步

一个工程可能会有多个版本,有国际版、国内版、还有针对各种不同的渠道化的打包版本、这个属于我们日常经常见到的打包差异化版本需求。 而对于工程的开发,比如以前的公司,分成了有三大块业...

DannyCoder
今天
2
0
Spring的Resttemplate发送带header的post请求

private HttpHeaders getJsonHeader() { HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); ......

qiang123
昨天
3
0
Spring Cloud Gateway 之 Only one connection receive subscriber allowed

都说Spring Cloud Gateway好,我也来试试,可是配置了总是报下面这个错误: java.lang.IllegalStateException: Only one connection receive subscriber allowed. 困扰了我几天的问题,原来...

ThinkGem
昨天
31
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部