solr全量索引

Solr DIH(Data Import Handler)组件的实现类为org.apache.solr.handler.dataimport.DataImportHandler,在Solr的solrconfig.xml中配置两个handler,配置分别说明如下:

solrconfig.xml配置如下:

[java] view plain copy

  1. <requestHandler name="/dataimport"
  2. class="org.apache.solr.handler.dataimport.DataImportHandler">
  3. <lst name="defaults">
  4. <str name="config">data-config.xml</str>
  5. </lst>
  6. </requestHandler>

data-config.xml

[java] view plain copy

  1. <dataConfig>
  2. <dataSource name="jdbc" driver="com.mysql.jdbc.Driver"
  3. url="jdbc:mysql://localhost:3306/test?zeroDateTimeBehavior=convertToNull"
  4. user="root" password="shyh"/>
  5. <document name="st_data">
  6. <entity name="solrtext" pk="id"
  7. query="select * from solrtext limit ${dataimporter.request.length} offset ${dataimporter.request.offset}"
  8. transformer="RegexTransformer">
  9. <field column="id" name="id" />
  10. <field column="url" name="url" />
  11. <field column="title" name="title" />
  12. <field column="author" name="author" />
  13. <field column="addon" name="addon" />
  14. <field column="path" name="path" />
  15. </entity>
  16. </document>
  17. </dataConfig>

说明:column为数据库字段名,name为schema.xml中对应的字段名

schmea.xml增加域

[java] view plain copy

  1. <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
  2. <field name="url" type="text_general" indexed="true" stored="true" />
  3. <field name="title" type="text_general" indexed="true" stored="true"/>
  4. <field name="author" type="text_general" indexed="true" stored="true"/>
  5. <field name="addon" type="string" indexed="true" stored="true"/>
  6. <field name="path" type="string" indexed="false" stored="true"/>

上面主要是通过内置变量 “${dataimporter.request.length}”和 “${dataimporter.request.offset}”来设置一个批次索引的数据表记录数,请求的URL示例如下:

http://localhost:8080/solr/dataimport?command=full-import&commit=true&clean=false&offset=1000000&length=100000

也可以直接进入solr的Dataimport页面导入:

上面表示,对数据表中id范围为[10000000, 1100000]的记录进行索引,因为数据表可能达到千万记录数,而且线上有业务在操作数据库,所以要选择分批进行索引。

如果数据量小可以直接全量导入不需分批:

[java] view plain copy

  1. <pre name="code" class="java"> <dataConfig>
  2. <dataSource name="jdbc" driver="com.mysql.jdbc.Driver"
  3. url="jdbc:mysql://localhost:3306/test?zeroDateTimeBehavior=convertToNull"
  4. user="root" password="shyh"/>
  5. <document name="st_data">
  6. <entity name="solrtext" pk="id"
  7. query="select * from solrtext"
  8. transformer="RegexTransformer">
  9. <field column="id" name="id" />
  10. <field column="url" name="url" />
  11. <field column="title" name="title" />
  12. <field column="author" name="author" />
  13. <field column="addon" name="addon" />
  14. <field column="path" name="path" />
  15. </entity>
  16. </document>
  17. </dataConfig>

注:执行导入操作时需要在webapps的solr项目的lib目录中加入数据库的驱动包以及solr-dataimporthandler-4.5.1.jar和solr-dataimporthandler-extras-4.5.1.jar这两个jar包(后两个jar包位于solr的解压包的dist目录)

时间: 2024-10-11 13:39:08

solr全量索引的相关文章

全文索引----solr服务器更新全量索引

solr索引设置完成后,需要根据数据库的变化及时更新索引,索引的更新有两种方式,全量更新和增量更新.顾名思义,全量更新即删除solr服务器上的所有索引,然后重新导入数据,增量索引即只更新修改的数据,本篇文章介绍全量索引更新. 一 配置数据源 1.1 数据库 我们使用单表作为测试数据源,包括三个字段,id,title,content,方便测试,使用varchar作为主键数据类型.结构如下: 1.2 配置data-config.xml 数据源配置内容如下: <pre name="code&qu

solr 全量更新慢,导致cup过高

场景:小L最近遇到个solr更新的问题,由于solr全量更新发现更新速度特别慢,同时发现cup使用率特别高 经过查询 发现solr在频繁GC,GC回收引发的CPU消耗,分析问题:全量更新solr之后会将大量数据进行写操作,十分消耗内存,当数据更新时,Solr会对Cache进行重新的预热,在这个时候,有大量的内存对象会被换入换出,可能在这时导致full GC:所有通过加内存增大Xmx和Xms操作解决了该问题

[Spring cloud 一步步实现广告系统] 14. 全量索引代码实现

上一节我们实现了索引基本操作的类以及索引缓存工具类,本小节我们开始实现加载全量索引数据,在加载全量索引数据之前,我们需要先将数据库中的表数据导出到一份文件中.Let's code. 1.首先定义一个常量类,用来存储导出文件存储的目录和文件名称 因为我们导出的文件需要在搜索服务中使用到,因此,我们将文件名 & 目录以及导出对象的信息编写在mscx-ad-commom项目中. public class FileConstant { public static final String DATA_RO

使用solr的DIHandler 构建mysql大表全量索引,内存溢出问题的解决方法

solr官方给出的解决方式是: DataImportHandler is designed to stream row one-by-one. It passes a fetch size value (default: 500) to Statement#setFetchSize which some drivers do not honor. For MySQL, add batchSize property to dataSource configuration with value -1

SOLR环境搭建以及全量导入MYSQL数据

SOLR文档 前言 因为项目中要用到solr,因此花了一周多的时间研究了一下solr,其中的各种问题我就不说了,特别是这两天在研究定时增量索引的时候,心里不知道多少个XXX在奔腾,好了,废话不多说,下面把我得研究成果跟大家分享一下,另外对于SOLR是什么,大家还是自行度娘吧,让我说我也说不清楚. 版本 SOLR SOLR最新的版本是5.3,但是我没有用最新的版本,用的是4.10.4. JDK JDK的版本是jdk1.7.0_13,这里要说一下的就是4.10版本的SOLR需要1.7以上的JDK,刚

solr-DIH:dataimport增量全量创建索引

索引创建完毕,就要考虑怎么定时的去重建, 除了写solrj,可以定时调用下面两条url进行增量或者全量创建索引   全量:http://ip:port/webapp_name/core_name/dataimport?command=full-import   增量:http://ip:port/webapp_name/core_name/dataimport?command=delta-import   全量索引直接调用就可以,因为是完全删除重建   如果是增量索引,就稍微麻烦一些,首先你必须

10.Solr4.10.3数据导入(DIH全量增量同步Mysql数据)

转载请出自出处:http://www.cnblogs.com/hd3013779515/ 1.创建MySQL数据 create database solr; use solr; DROP TABLE IF EXISTS student; CREATE TABLE student ( id char(10) NOT NULL, stu_name varchar(50) DEFAULT NULL, stu_sex int(1) DEFAULT NULL, stu_address varchar(20

使用mysqldump进行全量+增量备份方案操作记录

在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 线上数据库备份场景:每周日执行一次全量备份,然后每天下午1点执行MySQLdump增量备份. 下面对这种备份方案详细说明下:1.MySQLdump增量备份配置执行增量备份的前提条件是MySQL打开binlog日志功能,在my.cnf中加入log-bin=/opt/Data/MySQL-bin"log-bin="后的字符串为日志记载目录,一般建议放在不同于MySQL数据目录的磁盘

Mysql使用innobackupex在线备份方案(全量+增量)操作记录

在日常的linux运维工作中,对mysql数据库的备份是非常重要的一个环节.关于mysql的备份和恢复,比较传统的是用mysqldump工具.今天这里介绍下另一款mysql备份工具innobackupex,利用它对mysql做全量和增量备份,仅仅依据本人实战操作做一记录,如有误述,敬请指出~ 一.innobackupex的介绍Xtrabackup是由percona开发的一个开源软件,是使用perl语言完成的脚本工具,能够非常快速地备份与恢复mysql数据库,且支持在线热备份(备份时不影响数据读写