[搜索] Solr (三) 全量索引与增量索引

Solr数据库插入(全量和增量)索引 Solr数据库插入(全量和增量)索引,全量一般用于第一次创建索引情况,批量一般更新数据部分创建索引。 立即下载

solr.home  D:solr\home

solr.war     D:solr\server\solr

参考文档
全量索引与增量索引

索引导入分全量索引与增量索引。Solr支持多种创建索引的方式。这里通过solr官方提供的一个工具的—Data Import Handler,来做数据库建立索引,DIH支持增量索引。Solr/example中有example-DIH的项目,用了hsqldb作为数据库演示了DIH的使用,可以看下

1、添加jar包  (mysql的jar包与dataimporthandler的jar包)

将解压后的solr-4.10.0文件夹dist目录下的:

  • solr-dataimporthandler-4.10.0.jar
  • solr-dataimporthandler-extras-4.10.0.jar
  • mysql-connector-java-5.1.13-bin.jar   (这个需根据使用的数据库不同添加不同的驱动包,所以dist目录下是没有的)

拷贝到solr.war服务的lib目录下,对应本机D:\solr\server\solr\WEB-INF\lib

2、配置一个 SolrRequestHandler将 DIH 和 Solr 关联起来

在每个核心中的solrconfig.xml中配置dataimport,对应本机D:solr\home\core1\conf\solrconfig.xml

<!-- 全量索引与增量索引 -->
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
	<lst name="defaults">
		<str name="config">data-config.xml</str>
	</lst>
</requestHandler>

3、全量索引与增量索引配置文件,同目录下新增data-config.xml

<pre class="html" name="code"><?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
    <dataSource name="jdbc" driver="com.mysql.jdbc.Driver"
        url="jdbc:mysql://ip:port/db_name?characterEncoding=UTF-8" user="root" password="root"/>
    <document name="TestCore">
        <entity name="test_table" pk="testId"
                query="select * from test_table"
                deltaImportQuery="select * from test_table where test_id='${dih.delta.testId}'"
                deltaQuery="select Test_Id as testId from test_table where create_time &gt; '${dih.last_index_time}'"
                transformer="RegexTransformer">
		<field column="Test_Id" name="testId"/>
		<field column="Test_Name" name="testName"/>
		<field column="Create_Time" name="createTime"/>
        </entity>
    </document>
</dataConfig>
 
  • entity:需要从数据库中取出的数据,name为数据库表名,支持sql语句,支持多表查询。注意pk="id" 不能随便改 ,需要和schema.xml中的<uniqueKey>id</uniqueKey>匹配,否则会报错注[1] ,且<uniqueKey>id</uniqueKey>中的主键必须为String类型
  • field:接受到的数据。列名column为数据库字段名(必须与数据库字段相同,区分大小写),name为索引库(必须和schema.xml)中field定义的name名字相同
  • query属性为全量索引时查询用,其他的为增量索引用

注[1]:

 

注[2]:

Note the variable ${dataimporter.last_index_time} The DataImportHandler exposes a variable called last_index_time which is a timestamp value denoting the last time full-import 'or' delta-import was run。

内置变量${dataimporter.last_index_time}用来记录最后一次索引的时间(包括全量与增量),并保存在core~/conf/dataimport.properties文件中,该文件为自动创建(如果solr服务启动后请求索引后,未在相应核下找到该文件,说明DIH配置有误,可以通过solr后台logging查看异常日志)。这里dataimport.properties内容如下:

#Mon Mar 15 16:10:05 CST 2015
test_table.last_index_time=2015-03-15 16\:10\:04
last_index_time=2015-03-15 16\:10\:04

内置变量 “${dataimporter.request.length}”和 “${dataimporter.request.offset}”用来设置一个批次索引的数据表记录数


至此,DIH配置完成,在浏览器中输入请求:

全量索引  http://localhost:8080/solr/core1/dataimport?command=data-import&clean=false&commit=true
增量索引  http://localhost:8080/solr/core1/dataimport?command=delta-import&clean=false&commit=true
查看导入状态  http://localhost:8080/solr/core1/dataimport?command=status
  • clean:选择是否要在索引开始构建之前删除之前的索引,默认为true
  • commit:选择是否在索引完成之后提交。默认为true
  • offset=0&length=100000  0到100000的数据创建索引,全量索引分批次索引用于数据量较大时,如果数据量较小,可以直接全部索引(未调通)

当然也可以通过

http://localhost:8080/solr

进入solr管理页面中相应索引库(如core1)中找到dataimport 点击执行,这样好处是还可以通过日志logging查看异常

修改数据源位置


定时重做索引

定时自动重建索引可以通过自己写程序实现,也可以通过solr-dataimportscheduler-1.0.jar包完成此功能,具体如下:

1、将dataimporter.properties(网上找的)放到solr.home/conf目录下,对应本机D:\solr\home\conf(conf文件夹是没有的,需要新建)注[3]

dataimporter.properties (重要)(不同于core/conf下的dataimport.properties,那个dataimport.properties会自动生成,用于记录最近一次更新的时间)

#################################################
#                                               #
#       dataimport scheduler properties         #
#                                               #
#################################################
 
#  to sync or not to sync
#  1 - active; anything else - inactive
syncEnabled=1
 
#  which cores to schedule
#  in a multi-core environment you can decide which cores you want syncronized
#  leave empty or comment it out if using single-core deployment
syncCores=core1,core2
 
#  solr server name or IP address
#  [defaults to localhost if empty]
server=localhost
 
#  solr server port
#  [defaults to 80 if empty]
port=8080
 
#  application name/context
#  [defaults to current ServletContextListener's context (app) name]
webapp=solr

#  增量索引的参数 
#  URL params [mandatory]
#  remainder of URL
params=/dataimport?command=delta-import&clean=false&commit=true

#  重做增量索引的时间间隔
#  schedule interval
#  number of minutes between two runs
#  [defaults to 30 if empty]
interval=1
 
#  重做全量索引的时间间隔,单位分钟,默认7200,即5天;
#  为空,为0,或者注释掉:表示永不重做索引
#reBuildIndexInterval=7200
 
#  重做索引的参数
reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true
 
#  重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
#  两种格式:2012-04-11 03:10:00 或者  03:10:00,后一种会自动补全日期部分为服务启动时的日期
reBuildIndexBeginTime=03:10:00

2、修改solr.war中WEB-INF/web.xml, 对应本机D:\solr\server\solr\WEB-INF\web.xml,在servlet节点前增加:

这个有点坑爹!这个类并不存在solr几个包中,需要额外导入solr-dataimportscheduler-1.1.jar(官方还不支持定期重建索引,所以只能通过修改过的第三方jar, 参考这里)
<listener>
 	<listener-class>org.apache.solr.handler.dataimport.scheduler.ApplicationListener</listener-class>
</listener>

注[3]:

?看别人的资料说上面的dataimporter.properties位置可以随意放,只需要在solr.war中WEB-INF/web.xml中指定位置(还未测试,不清楚说的对不对)

<context-param>
    <param-name>autoDeltaImportConfPath</param-name>
    <param-value>/yourconfpath</param-value>
</context-param>


常见异常

org.apache.solr.common.SolrException: Document is missing mandatory uniqueKey field: testId

参见注[1]

java.lang.RuntimeException: org.apache.solr.handler.dataimport.DataImportHandlerException: Could not load driver: com.mysql.jdbc.Driver Processing Document # 1
请加入数据库驱动jar包
org.apache.solr.common.SolrException: [doc=454a2d2f-c199-483a-a8d2-7c49c1adbfe1] missing required field: xxxx
xxxx这个字段对应的column的字段名与数据库中的字段不一致(包括大小写)

Exception while processing: test_table document : SolrInputDocument(fields: []):org.apache.solr.handler.dataimport.DataImportHandlerException: Unable to execute query: select * from test_table limit  offset  Processing Document # 1
	at org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow(DataImportHandlerException.java:71)
	at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.<init>(JdbcDataSource.java:283)
全量索引异常:data-config.xml中配置了批次索引,但创建索引的时候参数offset&length出现问题,我也未调通

严重: Exception sending context initialized event to listener instance of class org.apache.solr.handler.dataimport.scheduler.ApplicationListener
java.lang.NullPointerException
	at org.apache.solr.handler.dataimport.scheduler.ApplicationListener.contextInitialized(ApplicationListener.java:93)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4994)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5492)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
	at java.util.concurrent.FutureTask.run(FutureTask.java:262)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:745)
出现这种错误是因为 dataimporter.properties配置文件的存放位置不对

接下来? Solr数据源的统一配置



Abaqus小白必看:用Micromechanics Plugin轻松搞定RVE周期性边界条件(附避坑指南) 本文为Abaqus初学者提供了使用官方Micromechanics Plugin插件高效实现复合材料代表性体积单元分析的完整指南。文章详细讲解了从插件安装、模型准备、周期性边界条件自动设置到结果验证的全流程,并重点分享了处理复杂模型和避免常见错误的实用技巧,帮助用户大幅提升RVE分析效率与准确性。 阅读详情

相关推荐

深入解析以太网接口中的BOB Smith电路设计

本文深入解析以太网接口中的BOB Smith电路设计,详细介绍了其在共模噪声抑制、浪涌防护和EMI优化中的关键作用。通过实际案例和设计要点,帮助工程师正确选择75Ω电阻和高压电容等元件,优化PCB布局,解决电压型与电流型PHY的设计差异,以及千兆与百兆以太网的特殊考量。

weixin_28339967的博客 688

Solr全量索引、增量索引和定时增量索引配置

一、全量索引 在solr_home\solr\core0\conf\solrconfig.xml文件中增加 <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str&gt...

铭毅雨的博客 607

MATLAB新手必看:SVPWM七段式算法仿真全流程解析(附完整代码)

本文为MATLAB新手和电机控制初学者提供了SVPWM七段式算法的完整仿真与代码实现指南。文章详细解析了从扇区判断、矢量作用时间计算到PWM波形生成的全流程,并附带了可直接运行的MATLAB代码,帮助读者在理解FOC控制核心算法的基础上,快速掌握工程仿真与调试技巧。

weixin_29074295的博客 282

优化solr全量建索引,减少索引时间

优化solr全量建索引 主要优化从数据库取数据这一块。 先简单为读取某个单表数据:该表数据很多娄,数据库为MySQL。 旧的建索引设计: 之前的设计是分段读取数据,可以按自增主键分段或者按记录更新的时间截分段取。但由于数据模型是可增删改查,这种更新会导致按自增id的数据在有些地方比较稀疏,而按记录的更新时间截,也有可能在某个时间段里更新大量数据,所以也会有不同时间段数据过稀或者

搜索引擎、个性化推荐、大数据相关学习笔记| 1万+

MTK平台LCD驱动开发实战:从零开始点亮你的Android屏幕

本文详细介绍了在MTK平台进行Android LCD驱动开发的完整流程。从理解LK与Kernel双核驱动框架入手,手把手讲解驱动结构体、屏幕参数配置、初始化序列编写以及PLL_CLOCK计算等核心步骤,并提供了系统集成配置与实用的调试避坑指南,帮助开发者高效点亮新屏幕。

terraform7cloud的博客 292

SAP PO开发-端到端配置

1.登录PO系统,选择system landscape,将外围系统的系统信息(Software Component以下简称SC)注册到PO系统中。2.点击products注册外围系统信息。3.选择New 新建 按钮:创建一个新的系统和版本。4.输入产品名称、供应商、版本号等信息。然后点击:Next。5.设置instance 名称,然后点击Next。6.最后设置软件组件的名称,然后点击Finish。

P9QCer的博客 1578

solr导入mysql失败_mysql – SOLR DataImport错误“无法执行查询”

我有一个在Amazon EC2实例上运行的网站,我正在尝试让Solr与我正在使用的数据库进行交互.我能够使用管理界面并获得索引的示例xml文件,但每当我尝试导入我的一个数据库表时,我都会收到错误SEVERE: Exception while processing: gamelydb document : SolrInputDocument[{}]:org.apache.solr.handler.d...

weixin_40008033的博客 627

2022中山大学计算机技术专硕考研初试、复试经验帖

个人简介 推荐几个我自己感觉对考研非常有帮助的小助手吧。可以帮助节省时间! 考研时间规划总览 初试篇 数学 英语 政治 408 复试篇 机试 笔试 面试 关于选导师 个人感言

zik的博客 1万+

solr的全量索引

紧接上篇ansj分词整合后,开始需要做索引。索引分增量和全量,可以直接连接数据库去做,也可以通过程序去做,以下实现连接数据库去做,相对来说比较简单。 1.修改multicore/new_core/conf/solrconfig.xml文件(上篇提到过的),在里面新增 Xml代码 1. 2. 3. data-config.xml...

jinxinwei1986的专栏 398

SAP S/4HANA Cloud 管理员业务角色创建实战:基于 SAP_BR_ADMINISTRATOR 模板的一站式指南

摘要:SAP S/4HANA Cloud新系统初始登录时常见Fiori Launchpad无磁贴的问题,这是由于缺乏合适的业务角色分配。本文介绍了通过预交付的SAP_BR_ADMINISTRATOR模板创建管理员角色的完整流程,包括业务用户、业务角色和业务目录的核心概念解析。重点说明了直接使用模板的风险,并提供了从模板创建自定义管理员角色的详细步骤(4.1-4.3),以及权限限制设置的注意事项。文中还分享了一个实际项目案例,强调正确配置管理员角色对后续权限体系建设的关键作用。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 205

SAP 费用化采购订单简介

费用性采购的核心特点费用性采购的流程费用性采购的优势适用场景业务场景前台操作1、创建成本中心---KS012、创建采购订单---ME21N3、采购订单审批---ME29N4、采购订单收货---MIGO5、查看成本中心费用---S_ALR_870136116、控制费用化的采购订单自动带出科目和成本中心SAP费用性采购(Expense Procurement)指的是企业在采购过程中,直接将采购的物料或服务成本计入费用科目,而不是记入库存账户的采购行为。

我小时候很黑的博客 2016

Solr 全量更新和增量更新 配置方式

deltaImportQuery 指定的sql要求我们将满足PK的数据进行填充,需要配置在FieId中出现的属性,其作用和query类似,只不过该作用是将前面两个deltaQuery、deletedPkQuery过滤后进行了一次封装,以更新部分需更新的记录所对应的Solr的数据库索引。基于项目的特殊性,本项目将所有的文本类型记录的表全部读取进入Solr进行管理,但因文本记录的表比较多和复杂,导致了后面在使用solr自带功能增量更新时出现了问题。该配置在使用全量更新full-import显得尤为的突出;

猫步轻移,以学求知。余于此方寸之地,如猫观鼠,细察技艺所得,思维所悟。灵思如猫之警觉,日积月累,终成智海; 1480

铁路场景雷达点云目标识别与追踪系统

本文介绍了一种基于毫米波雷达的铁路货运车站安全监控系统。该系统采用分布式架构,通过多个毫米波雷达节点采集点云数据,经过坐标转换、多雷达融合等处理后,利用机器学习算法实现列车、行人等目标的实时识别与追踪。系统包含数据采集层、处理层、目标识别层、追踪层、预警决策层和可视化层,能够克服传统视频监控受环境影响大的缺点,实现全天候可靠监测。文中详细展示了雷达数据解析和点云预处理的代码实现,包括坐标转换、数据格式解析和体素网格滤波等关键技术。该系统可有效预警铁路场景下的碰撞风险,提升货运车站的安全管理水平。

huanghm88的专栏 125

Solr的增量更新和全量更新对比

Solr的增量更新和全量更新 solr的简介 solr是一个采用java语言,基于Lucene的全文搜索引擎。 solr的一些原理 solr通过数据库的数据导入到索引库中,并且给数据创建相应的索引,用来提高搜索的速度。而当数据库的数据发生改变我们需要来和数据库的数据进行同步的时候就用到了全量更新和增量更新 先来说一下全量更新 全量更新顾名思义就是全部都更新,当我们的索引库需要更新数据库数据的时候,就把数据全部拿过来进行更新同步。 使用全量更新 (注意这里—你的文件名可能会因为solr版本问题而和我的文件名

少年的博客 3897

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

solr的全量更新与增量更新分析

大家好,我是猿猴小冷,今天给大家分享solr的全量更新与增量更新 文章目录前言一、solr的全量更新1. 核心实例目录下的conf 目录下的 solrconfig.xml,新增如下配置2. 在核心实例目录的conf 目录下的data-config.xml 文件,新增如下配置(连接数据库的数据源及查询语句)3. 修改核心实例目录的conf 目录下 managed-schema.xml 的文件,新增需要索引的列4. 进入solr 的后台管理,进行全量更新(启动solr,访问 http://localhost:

xiaoxinshijie的博客 354

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

FlyCms全文检索实现原理:Solr索引设计与搜索代码深度解析

FlyCms 是一款基于 Spring Boot + MyBatis + MySql + Solr + Ehcache 架构的完全开源问答社区建站程序。在 FlyCms 中,**全文检索**并非使用 MySQL 的模糊查询,而是交给独立的 Solr 搜索引擎完成——这保证了问答、文章、分享三种内容在百万级数据下的毫秒级响应。本文将深入拆解 **FlyCms 全文检索实现原理**,从 **Solr

gitblog_00094的博客 804

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

三、solr增量更新

原地址:http://www.cnblogs.com/zhuwenjoyce/p/6529448.html 尚未实现首次同步mysql数据库的,请参考我的另一篇文章http://www.cnblogs.com/zhuwenjoyce/p/6512378.html(solr6.4.1搜索引擎同步mysql数据库)   过时的类 在solr6.4.1版本中,已无HttpSo

JockerO的博客 4193

solr配置自动增量更新索引

首先从apache下载最新的solr包,我这里

糖精 2904

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

搜索引擎检索数据样例实现#搜索引擎#solr开源搜索引擎标识1、SOLR安装部署一、原始solr服务部署1)、前往官网下载最新版本solr文件2)、下载tomcat8.5.33以上版本(防止被扫描到历史漏洞)3)、在tomcat webapp目录下创建solr文件夹,并将下载的solr包中样例放入该目录下4)、在web.Xml中增加 solr/home /solr_home j...

weixin_39607837的博客 197

solr 定时创建全量索引和增量索引

背景:在前面的博文里搭建了solr全文搜索,那么在

cdy102688的专栏 3792

Solr6.6.2-solr部署+solr增量,全量(定时)+分词器(拓展词库)+项目代码(查询代码等等)

Solr6.6.2-solr部署+solr增量,全量(定时)+分词器(拓展词库)+项目代码(查询代码等等) 文 / 汝淉

汝淉的博客 1811

全文搜索引擎solr环境搭建

文章目录1. 全文搜索引擎solr环境搭建1.1下载solr7.7.21.2 解压solr文件1.3 启动solr1.4新增配置core1.4.1创建core2. 增加ik中文分词器2.1增加ik中文分词器的jar包3. 配置core中的字段4. solr dataImport配置数据(全量)增量导入 1. 全文搜索引擎solr环境搭建 1.1下载solr7.7.2 目前最新版本solr 8.2.0 最新发行版本是 Solr 7.7.2。本系统搭建的是solr7.7.2 下载地址https://lucene

qq_39504520的博客 620

solr 增量更新

solr 数据太多了 不能老full-import  ,数据少 还好  数据超过10万+  创建索引要好久 好久,,,  把数据库新增的数据创建索引 这时候就引入了增量更新 delta-import  首先在data-config.xml : <entity name="iczshuxue" pk="t_uuid" query="SELECT knowle

chencongbin5的博客 835

solr全量更新和增量更新

文章目录solr全量更新和增量更新1、全量更新2、增量更新 solr全量更新和增量更新 数据库的数据导入到 solr缓存库就是更新 1、全量更新 full-import:全量更新,意思是重新把全部数据从数据库导入,一般会先删除现有的,再进行导入,所以需要勾选Clean清除本地 2、增量更新 2.1.对应全量更新,增量更新修改的 <!-- transformer 格式转化:HTMLStripTransformer 索引中忽略HTML标签 ---> <!-- query:

qq_40947061的博客 410

solr5.5配置定时全量、增量同步索引mysql数据

上篇文章中讲了如何下载solr、安装solr、启动、增加中文分词器、简单查询等传送门,这篇文章我们来配置solr定时全量和增量同步mysql数据。 1、先看数据库表 2、打开E:\solrHome\core1\conf文件夹下的data-config.xml文件,这个文件中主要配置数据源等信息,内容如下 <entity nam

white_ice的博客 3517

AnyQ如何配置solr动态读取数据库——AnyQ系列之二

一、anyq容器host模式运行 由于anyq容器,后期还会有其他端口需要访问,比如solr的webapp页面端口就是8900,等等。所以可以采用host方法run一个新的容器。 #提交anyq镜像,生成新镜像anyq-host,并run新的anyq-host容器 docker stop anyq docker commit anyq anyq-host #使用--privileged=true和...

ddocanwol的博客 2283
上一篇: MyEclipse10 安装SVN后,每次启动myeclipse弹出“SubVersion Native Library Not Availbale”窗口
下一篇: [搜索] Solr (四) 利用SolrJ操作solr API
H__coco
博客等级 码龄15年 15粉丝 35原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值