基于SOLR搜索引擎的实验性改造和实践

SOLR搜索引擎检索数据样例实现
目的:改造SOLR实例创建和简化data-config.xml文件操作,尽最大努力通过可视化完成一个简单但是标准的搜索服务。
1、SOLR安装部署
一、原始solr服务部署
1)、前往官网下载最新版本solr文件
2)、下载tomcat8.5.33以上版本(防止被公司扫描到历史漏洞)
3)、在tomcat webapp目录下创建solr文件夹,并将下载的solr包中样例放入该目录下
4)、在web.Xml中增加

<env-entry>
	   <env-entry-name>solr/home</env-entry-name>
	   <env-entry-value>/solr_home</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
</env-entry>

5)、配置solrconfig.xml文件
备注:solr部署比较简单,步骤比较多,这里建议采用个人改造版本,后面的所有操作都是针对个人改造版本的solr服务
二、新版solr服务部署方式
1)、从svn下载solr代码(java web代码,目前暂未提交到svn)
2)、将代码import到编辑器如idea或者eclipse
3)、配置tomcat8路径
4)、打包solr为war包或者编译后直接部署到tomcat运行
备注:相对于原版本,主要做了对配置方面的简化操作,使得solr基本可以做到开箱即用。
反编译solr源码solr-core,在XmlConfigFile.java类中添加如下代码片段
改造点1:

if (substituteProps) {
    	  Properties coreProperties=getSubstituteProperties();//获取系统全局配置信息
    	  PropertiesUtils props=PropertiesUtils.getInstance();//新建配置文件
    	  String solr_home=props.getProperty(SOLR_HOME);//添加部分
    	  if(StringUtils.isNotBlank(solr_home)) {
    	    	coreProperties.setProperty(DATA_DIR, solr_home+"\\"+coreProperties.getProperty(SOLR_CORE_NAME));
    	  }
        DOMUtil.substituteProperties(doc, coreProperties);
      }

改造点2:
制作标准化实例,在文件solrconfig.xml中使用通配符${default_path} 全局获取jar包路径

<lib dir="${default_path}/contrib/extraction/lib/" regex=".*\.jar" />
  <lib dir="${default_path}/dist/" regex="solr-cell-\d.*\.jar" />
  <lib dir="${default_path}/contrib/clustering/lib/" regex=".*\.jar" />
  <lib dir="${default_path}/dist/" regex="solr-clustering-\d.*\.jar" />
  <lib dir="${default_path}/contrib/langid/lib/" regex=".*\.jar" />
  <lib dir="${default_path}/dist/" regex="solr-langid-\d.*\.jar" />

对应代码为:solrconfig.java中initLibs方法820行添加如下代码片段:

 	 Node node = nodes.item(i);
      String baseDir = DOMUtil.getAttr(node, "dir");
      if(baseDir.contains("${default_path}")) {
    	  if(StringUtils.isNotBlank(common_lib_path)) {
    		  baseDir=baseDir.replace("${default_path}", common_lib_path);
    	  }else {
    		  baseDir=baseDir.replace("${default_path}", "/");
    	  }
      } 

改造点3:
在原有solr服务中无法直接创建core,即创建后会提示异常。需要手动通过指令将实例复制到新实例中,为此,特别制作了一个SOLR实例模板。当创建实例时将复制模板信息到新实例中。通过可视化减少服务器端运维操作。
可视化创建SOLR实例
代码实现方式为将模板实例复制为所需要的实例,然后进行后续定制操作。
改造代码为:
solr-core包下:CoreContainer类
改造点4:
绑定数据,本次SOLR改造主要是正对数据库文档。
个人定制功能
绑定后效果
执行成功,载入28条数据
SOLR改造后,简单的实例均可通过可视化操作完成。
查询结果:
结果查询

2、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一致,原数据会被覆盖
3、SOLR查询
1)、访问http://localhost:8080/solr/
2)、通过页面访问查询数据
4、SOLR自定义改造
当前演示solr服务涉及到的改造范围:
A、解决直接添加检索实例失败的问题
B、解决需要配置SOLR_HOME绝对路径问题
C、解决solrconfig中lib文件和data文件路径手动配置问题
D、重写增量更新机制(增加定时任务管理,用于解决数据增量更新,使用quatz框架)
E、将项目转化为maven,方便使用仓库(solr项目为普通javaweb项目,jar包在WEB_INF/lib目录下)
F、增加http请求工具类
后期计划(闲置时间处理)
A、提供对data-config.xml文件在线编辑存储功能。当前只能通过debug模式编辑,不能对源文件更改进行保存和覆盖
B、对数据源进行管理,让用户尽可能通过界面操作完成配置文件的生成和及时生效
C、通过直接提取sql cloum字段自动完成属性的创建
改造影响评估:
以上改造均未涉及到solr检索核心,人员创建索引和分词,属于对solr进行的外围改造。改造完成后solr仍旧具备原始SOLR的强大功能。
代码改造涉及源码包一览:
新增代码涉及源码改动
感想:纵观整个工作量主要涉及到的是SOLR外围,相当于完善了原始solr服务的部署方式。个人评价是给solr造了个简单的壳子。前路漫漫,创作不易。天气炎热,coder更是不易,如果需要源码请打赏一丢丢,补点水,谢谢!

coder的召唤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值