本发明涉及网络搜索技术领域,确切地说是一种独立搜索的apachelucene评分高亮方法。
背景技术:
在当今基于apachelucene实现的搜索引擎如:apachesolr、elasticsearch等中,高亮与搜索都是捆绑在一起使用的,因为高亮需要文档的原始内容;但是在亿级数据量的大数据生产环境中,原始内容存储会带来磁盘io性能瓶颈,以及主备节点数据同步慢的性能问题;
本发明提供了一种方法,将搜索与高亮分开,既搜索服务只索引不存储原始内容;高亮服务单独部署;这样既可以提升搜索性能,也可以提升高亮的性能以及可扩展性。
技术实现要素:
本发明要解决的技术问题是将搜索与高亮分开,既搜索服务只索引不存储原始内容;高亮服务单独部署;这样既可以提升搜索性能,也可以提升高亮的性能以及可扩展性。
为解决上述技术问题,本发明采用如下技术手段:
一种独立搜索的apachelucene评分高亮方法;其特征在于:该方法包括如下步骤:
步骤1:数据接收,高亮服务接收客户端通过http协议传输过来的搜索语句参数;
步骤2:数据转化,将步骤1接收搜索语句参数转成apachelucene的query对象;
步骤3:数据预处理,初始化apachelucene的评分器(queryscorer)以及初始化高亮器(highlighter);通过评分器(queryscorer)对query对象进行评分和分词,得到query的词组,对需要做高亮的文本进行分词器分词,得到文本词;
步骤4:数据处理,遍历文本分词后的结果,与通过评分器(queryscorer)评分后的query分词结果进行一一匹配;
步骤5:数据输出,通过步骤4的匹配,如果能匹配上,则加上高亮标记,否则返回原始内容。
作为优选,本发明更进一步的技术方案是:
所述的数据转化,编写highlighthandler类,继承apachesolr的requesthandlerbase抽象类以及实现solrcoreaware、plugininfoinitialized接口;然后重写handlerequestbody方法,接着调用qparser的getparser方法得到qparser将搜索语句转成apachelucene的query对象。
所述的数据预处理,newqueryscorer且构造函数传入query参数,newhighlighter构造函数传入queryscorer。
所述的数据输出,调用highlighter的getbestfragment方法传入分词器以及需要高亮的文本,得到高亮后的文本。
所述的数据接收之前需要先单独部署一套apachesolr集群,不存储数据,专门用来做高亮。
所述的apachelucene评分机制且独立于搜索的高亮方法可安插插件,插件为在solrconfig.xml中配置<requesthandler>,class的highlighthandler。
本发明主要解决了apachesolr在亿级数据量的大数据生成环境中,存在的搜索与高亮性能问题。搜索服务与高亮服务独立分开部署,这样可以使得功能的可扩展性大大提升;同时搜索服务不需要存储原始内容,也极大的提升了搜索性能(因为索引文件变小了,磁盘io开销减小);同时高亮服务可以单独的做高亮,不需要关心搜索,而且高亮服务可以横向扩展增强并发量。
附图说明
图1为本发明的一种独立搜索的apachelucene评分高亮方法流程图。
图2为本发明的一种独立搜索的apachelucene评分高亮方法结构框图。
具体实施方式
下面结合实施例,进一步说明本发明。
具体实施例1:
参见图1、2可知,本发明通过:
1、高亮服务接收客户端通过http协议传输过来的搜索语句参数;
2、将搜索语句参数转成apachelucene的query对象;
3、创建apachelucene的评分器(queryscorer)以及高亮器(highlighter);
4、通过评分器(queryscorer)对query对象进行评分和分词;
5、对需要做高亮的文本进行分词器分词;
6、遍历文本分词后的结果,与通过评分器(queryscorer)评分后的query分词结果进行一一匹配;如果能匹配上,则加上高亮标记,否则返回原始内容。
具体实施例2:
本发明1、单独部署一套apachesolr集群,不存储数据,专门用来做高亮。
2、编写highlighthandler类,继承apachesolr的requesthandlerbase抽象类以及实现solrcoreaware、plugininfoinitialized接口;然后重写handlerequestbody方法,接着调用qparser的getparser方法得到qparser将搜索语句转成apachelucene的query对象;接着newqueryscorer且构造函数传入query参数,newhighlighter构造函数传入queryscorer,最后调用highlighter的getbestfragment方法传入分词器以及需要高亮的文本,得到高亮后的文本。这样不需要索引信息不需要与磁盘交互,可以避免因磁盘io带来的性能瓶颈。
3、在solrconfig.xml中配置<requesthandler>class为highlighthandler,这种插拔式的配置非常灵活,且可扩展性强。
由于以上所述仅为本发明的具体实施方式,但本发明的保护不限于此,任何本技术领域的技术人员所能想到本技术方案技术特征的等同的变化或替代,都涵盖在本发明的保护范围之内。