文档章节

Solr 高亮源码阅读

go2school
 go2school
发布于 2015/08/26 22:19
字数 315
阅读 155
收藏 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解析过程,发现它完全跳过了“第一台计算机”这几句。个人怀疑是我使用的中文分词包有问题。


© 著作权归作者所有

共有 人打赏支持
下一篇: Solr删除文档
go2school
粉丝 11
博文 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
244
0
使用SSM+Solr优雅的实现电商项目中的搜索功能

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

TyCoding
09/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Android 报错 Could not find com.android.tools.build:aapt2:3.2.1-4818971.

报错信息: Could not find com.android.tools.build:aapt2:3.2.1-4818971.Searched in the following locations: file:/C:/Users/96110/AppData/Local/Android/Sdk/extras/m2reposito......

lanyu96
16分钟前
0
0
我的Linux系统九阴真经

我的Linux系统九阴真经 在今天,互联网的迅猛发展,科技技术也日新月异,各种编程技术也如雨后春笋一样,冒出尖来了。各种创业公司也百花齐放百家争鸣,特别是针对服务行业,新型互联网服务行...

linuxCool
59分钟前
19
0
Python程序员需要知道的30个技巧

1 直接交换两个数字位置 1x, y = 10, 202print(x, y)3x, y = y, x4print(x, y)5#1 (10, 20)6#2 (20, 10) 2 比较运算符的链接 1n = 102result = 1 < n < 203print(result)4# True5result = 1 ......

糖宝lsh
59分钟前
11
0
[LintCode] Linked List Cycle(带环链表)

描述 给定一个链表,判断它是否有环。 样例 给出 -21->10->4->5, tail connects to node index 1,返回 true。 这里解释下,题目的意思,在英文原题中,tail connects to node index 1 表示的...

honeymose
今天
10
0
Nginx平滑添加模块

Nginx已经编译安装并运行了一段时间, 然后某一天, 发现需要用到某个模块但当初没有编译, 这个时候怎么办呢? 卸载重新安装肯定可以的, 如果Nginx版本没有变更的话, 则有一个相对平滑的方法来添...

老菜鸟0217
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部