lucene 增量 全量 更新索引_开发人员如何快速定制化实现一个基于solr的搜索引擎

搜索引擎检索数据样例实现

#搜索引擎#

a082eebf0b80831d58df5c48c9ceeeb7.png

solr开源搜索引擎标识

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服务部署方式

  1. 从svn下载solr代码(java web代码,目前暂未提交到svn)
  2. 将代码import到编辑器如idea或者eclipse
  3. 配置tomcat8路径
  4. 打包solr为war包或者编译后直接部署到tomcat运行

备注:相对于原版本,主要做了对配置方面的简化操作,使得solr基本可以做到开箱即用。

97d39855481b032c77153bcb4ce548e6.png

solr实例创建,在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一致,原数据会被覆盖

e6a6afb689d633dd0f9483fa626fc618.png

配置xml字段属性匹配搜索入口数据

5、SOLR查询

1)、访问http://localhost:8080/solr/

2)、通过页面访问查询数据

3)、Springboot 与solr整合

6、SOLR自定义改造

当前演示solr服务涉及到的改造范围:

  1. 解决直接添加检索实例失败的问题
  2. 解决需要配置SOLR_HOME绝对路径问题
  3. 解决solrconfig中lib文件和data文件路径手动配置问题
  4. 重写增量更新机制(增加定时任务管理,用于解决数据增量更新quatz框架)
  5. 将项目转化为maven,方便使用仓库(solr项目为普通javaweb项目,jar包在WEB_INF/lib目录下)
  6. 增加http请求工具类,和spring相关依赖,使得系统具备使用spring相关组件的能力

后期计划(闲置时间处理)

  1. 提供对data-config.xml文件在线编辑存储功能。当前只能通过debug模式编辑,不能对源文件更改进行保存和覆盖
  2. 对数据源进行管理,让用户尽可能通过界面操作完成配置文件的生成和及时生效
  3. 通过直接提取sql cloum字段自动完成属性的创建

改造影响评估:

以上改造均未涉及到solr检索核心,人员创建索引和分词,属于对solr进行的外围改造。改造完成后solr仍旧具备原始SOLR的强大功能。

7、SOLR导入文档实例(后续待定…)

想要改造后源码的加记得留言加关注哦。

64d55e0b8e2073c0029b89d47ffd4e45.png

文档云

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值