搜索引擎检索数据样例实现
#搜索引擎#
1、SOLR安装部署
一、原始solr服务部署
1)、前往官网下载最新版本solr文件
2)、下载tomcat8.5.33以上版本(防止被扫描到历史漏洞)
3)、在tomcat webapp目录下创建solr文件夹,并将下载的solr包中样例放入该目录下
4)、在web.Xml中增加
solr/home/solr_homejava.lang.String
5)、配置solrconfig.xml文件
备注:solr部署比较简单,步骤比较多,这里建议采用个人改造版本,后面的所有操作都是针对个人改造版本的solr服务
二、新版solr服务部署方式
- 从svn下载solr代码(java web代码,目前暂未提交到svn)
- 将代码import到编辑器如idea或者eclipse
- 配置tomcat8路径
- 打包solr为war包或者编译后直接部署到tomcat运行
备注:相对于原版本,主要做了对配置方面的简化操作,使得solr基本可以做到开箱即用。
2、SOLR创建实例
1)、新建实例:点击创建实例—>输入实例名称—>点击添加。系统提示实例添加成功(该实例为基于数据库创建的实例)。
备注:需要说明的是添加成功的实例为系统提供实例的镜像拷贝文件,实例要具备业务操作逻辑,需要对实例下的data-config.xml进行编辑。
3、SOLR字段属性简介
SOLR字段属性主分为一般属性,动态属性,复制属性。
一般属性,就是一般字段属性,参数包括是否排序,和属性类型等
复制属性:
solr 有一个字段复制机制,可以提交多个不同类型字段集中到一个字段。字段复制主要涉及两个概念,source和destination,一个是要复制的字段,另一个是要复制到哪个字段
场景说明:
其实说的简单一点,比如现在你要查询包含"Java"的博客, 那么你肯定要查内容,标题是否包含Java,但是solr不能像SQL那样,where tittle like '%Java%' or content like '%Java%'. 这个时候copyField就派上用场了, 定义一个新字段,将title和content 复制到这个新字段,索引的时候,直接从这个新字段查询,这样就达到目的了。 这便是copyField的典型应用场景
注意:如果dest由多个source构成,就需要将其指定为multiValued
DynamicField:
动态字段(Dynamic fields)允许 solr 索引没有在 schema 中明确定义的字段。这个在忘记定义一些字段时很有用。动态字段可以让系统更灵活,通用性更强。
动态字段和常规字段类似,除了它名字中包含一个通配符外,在索引文档时,一个字段如果在常规字段中没有匹配时,将到动态字段中匹配。
假设schema中定义了一个叫*_i的动态动态字段,如果要索引一个叫 cost_i 的字段,但是 schema 中不存在 cost_i 的字段,这样 cost_i 将被索引到 *_i 字段中。
4、SOLR导入数据库实例
1)、导入数据前最好先创建对应的数据字段以及相关属性
2)、通过全量方式导入初始数据,如果需要进行增量更新,可以在全量导入sql中添加增量数据标识如更新时间
3)、data-config.xml文件说明:
driver(必需的):jdbc驱动名称
url(必需的):jdbc链接
user:用户名
password:密码
字段配置:
column:数据库查询列名称
name:Schema.xml中的字段
doucment节点配置
document节点用来配置如何从数据库导入数据构建document对象,主要有一个或多个即实体组成。有如下属性:
name:实体名称
processor:只有当datasource不是RDBMS时才是必需的。默认值是SqlEntityProcessor
transformer:转换器将会被应用到这个entity上,详情请浏览transformer部分。
pk:entity的主键,它是可选的,但使用“增量导入”的时候是必需。它跟schema.xml中定义的uniqueKey没有必然的联系,但它们可以相同。
rootEntity:默认情况下,document元素下就是根实体了,如果没有根实体的话,直接在实体下面的实体将会被看做跟实体。对于根实体对应的数据库中返回的数据的每一行,solr都将生成一个document。
dataSource:dataSource名称
query:获取全部数据的SQL
deltaQuery:此查询只对增量导入起作用,而且只能返回ID值(增加,修改,删除操作)
parentDeltaQuery:获取父Entity的pk的SQL
deletedPkQuery:此操作值查询那些数据库里伪删除的数据的ID(即state标识为0的数据) solr通过它来删除索引里面对应的数据
deltaImportQuery:此查询是获取deltaQuery和deletedPkQuery的ID,然后把其全部数据获取,根据获取的数据 ,对索引库进行更新操作,可能是删除,添加,修改 。
备注在增量更新过程中如果pk一致,原数据会被覆盖
5、SOLR查询
1)、访问http://localhost:8080/solr/
2)、通过页面访问查询数据
3)、Springboot 与solr整合
6、SOLR自定义改造
当前演示solr服务涉及到的改造范围:
- 解决直接添加检索实例失败的问题
- 解决需要配置SOLR_HOME绝对路径问题
- 解决solrconfig中lib文件和data文件路径手动配置问题
- 重写增量更新机制(增加定时任务管理,用于解决数据增量更新quatz框架)
- 将项目转化为maven,方便使用仓库(solr项目为普通javaweb项目,jar包在WEB_INF/lib目录下)
- 增加http请求工具类,和spring相关依赖,使得系统具备使用spring相关组件的能力
后期计划(闲置时间处理)
- 提供对data-config.xml文件在线编辑存储功能。当前只能通过debug模式编辑,不能对源文件更改进行保存和覆盖
- 对数据源进行管理,让用户尽可能通过界面操作完成配置文件的生成和及时生效
- 通过直接提取sql cloum字段自动完成属性的创建
改造影响评估:
以上改造均未涉及到solr检索核心,人员创建索引和分词,属于对solr进行的外围改造。改造完成后solr仍旧具备原始SOLR的强大功能。
7、SOLR导入文档实例(后续待定…)
想要改造后源码的加记得留言加关注哦。