4.3索引与检索模块的设计与实现
4.3.1 索引与检索模块的流程。
索引与检索模块主要是负责对文本数据进行倒排索引和检索,本系统采用了Lucene和Solr并用作为服务端。用户可以根据传入的参数进行选择使用Lucene或者是Solr进行服务。其流程图4-13所示:
图4-13 索引与检索模块流程
4.3.2索引与检索模块之Lucene服务
(1)工作方式:lucene提供的服务实际包含两部分:一入一出。所谓入是写入,就是已经有了一段文本信息,然后放进Lucene提供的写入接口,Lucene会自动根据一定的规则或者用户自定义的规则进行分词。出就是读出,根据关键词查找索引库中对应的文本,然后返回结果出来。
(2)写入过程: 文本首先通过分析处理,包括:分词,单词。信息的来源需要添加每个字段的文档,需要索引字段索引,存储需要存储。索引写入内存,内存可以内存或磁盘。
(3)读出流程:用户提供搜索关键词,经过analyzer处理。
(4)核心索引代码示例:
|
核心查询代码示例:
|
4.3.2索引与检索模块之Solr服务
(1)工作方式:Solr提供服务是基于Lucene,它良好的Lucene API封装,有自己的网页显示的方式。Solr Web能够管理和查询,这是基于远程代理模型实现查询。也就是说,我们可以通过HTTP查询请求的形式Solr服务器根据参数使用get请求检索自己的文本库,并返回结果。它返回的结果与多个输出方法(包括XML / XSLT和JSON格式)。
(2)多核配置Solr.xml:
|
自定义业务Scame:
图4-14 自定义业务
IK分词的配置:
<fieldTypename="text" class="solr.TextField"autoGeneratePhraseQueries="false">
<analyzerclass="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
(4)索引方式:
可以使用DIH(DataImportHandler)从数据库导入数据
支持CSV文件导入,因此Excel数据也能轻松导入
支持JSON格式文档
二进制文档比如:Word、PDF
还能以编程的方式来自定义导入
查询示例:
如下图:
图4-15 solr查询