Solr DIH就是Data Import Handler.由于很多时候我们的数据在数据库里面,需要将数据库里面的数据导出进行索引.Solr提供了一个很方便的接口来从数据库生成索引。DIH支持从单表和多表管理来导入数据,可以跨数据库来读取数据,还可以增量索引数据,应该说满足很多一般的需求。

以下以solr-5.3.0为例,下面来说说一个简单的从Mysql数据库导入数据的配置,更多复杂的配置,需要参考文档多实际摸索。

1. 基本配置

在Slor的安装{solr_home}目录下面新建一个目录,例如dbindex,这样我的路径是D:\app\apache-solr-5.3.0\dbindex

将{solr_home}\example\example-DIH\solr\目录里面的db,solr.xml一个目录和一个文件copy到dbindex下面。这个目录db的名字可以改,后面可以看到就是core的名字。

进入db\lib目录,把mysql的驱动copy到这个目录里面,很明显需要用到JDBC驱动,我的版本是mysql-connector-java-5.0.7-bin.jar(solr会自动读取这个目录的jar包)

进入db\conf目录,这里面的文件很多,我们只需要修改几个文件就可以了。(为什么这样配置,后面可以很明显看出来)

db-data-config.xml

<dataConfig>
    <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&amp;characterEncoding=utf-8" user="root" password="root" batchSize="-1" />
    <document>
        <entity name="item" pk="id" query="select * from item"
    deltaImportQuery="select * from item where ID='${dih.delta.id}'"
                deltaQuery="select id from item where last_modified > '${dataimporter.last_index_time}'">
        </entity>
    </document>
</dataConfig>

schema.xml field部分的配置如下,里面很多多余的字段可以不要,尤其是很多copyField.

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 
   <field name="name" type="text_general" indexed="true" stored="true"/>
   <field name="manu" type="text_general" indexed="true" stored="true" omitNorms="true"/>
   <field name="includes" type="text_general" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true" />
   <field name="weight" type="float" indexed="true" stored="true"/>
   <field name="price"  type="float" indexed="true" stored="true"/>
   <field name="popularity" type="int" indexed="true" stored="true" />

<dynamicField name="*_i"  type="int"    indexed="true"  stored="true"/>

<dynamicField name="*_is" type="int"    indexed="true"  stored="true"  multiValued="true"/>

其实这些dynamicField可以不要

2. 新建一个数据库mydb,新建一个表,插入几条记录

CREATE CACHED TABLE ITEM(ID CHAR(8),NAME VARCHAR(100),MANU VARCHAR(50),WEIGHT REAL,PRICE REAL,POPULARITY INTEGER,INCLUDES VARCHAR(200),LAST_MODIFIED TIMESTAMP );

INSERT INTO `item` VALUES (1,'a','',100,12,3,'',NOW());
INSERT INTO `item` VALUES (2,'b','',200,22,3,'',NOW());
INSERT INTO `item` VALUES (3,'c','',300,13,5,'',NOW());
INSERT INTO `item` VALUES (4,'d','',400,14,4,'',NOW());

使用其他的数据库,可以自己稍作修改(包括上面的配置文件,修改成自己的数据库,用户名,密码)

3.启动Solr 

启动一个cmd,在cd 至bin目录

solr start -p 8983 -s "D:\app\apache-solr-5.3.0\dbindex"

浏览器打开http://localhost:8983/solr/#/

可以看看Core Admin,下面选择db这个core.点击Dataimport选择full-import, Entity 为item 执行下则可以看到(或者Refresh Status)

想看看有没有数据,到Query里面看看,可以看到数据有了,4条记录

说好的增量索引呢?这个可以有

4.增量索引

执行下面两条语句来修改数据

INSERT INTO `item` VALUES (5,'中华人民共和国','',500,15,5,'',NOW());
UPDATE `item`  SET NAME='ddd', LAST_MODIFIED=NOW() WHERE id=4;

点击Dataimport选择delta-import, Entity 为item 执行下则可以看到

在查询数据看看

我选择的CSV格式,这样可以看到数据确实修改了。而且中文也支持,只不过中文的分词没有配置,索引搜索的结果不好,可以试试搜索name:华人

如果是delete的数据,怎么办呢?现在可以删除一条记录看看,

DELETE FROM `item` WHERE id>4

可以重新重复上面的过程,做下delta import,可以看到索引删除了一条记录。

过程中如果有错误,可以到D:\app\apache-solr-5.3.0\server\logs目录下面看看,里面有出错的日

如果觉得上面的增量的过程有些繁琐或者不方便集成到自己的系统中,可以自己调用API或者rest接口来做索引。

数据索引---Solr DIH相关推荐

  1. oracle导入solr,从Oracle数据库导入XML数据时solr dih会变慢

    我正在执行一个solr-dih(dataimporthandler)任务,导入存储在Oracle数据库中的大约2000万个文档.最初,这些进口每秒将增加到500多个文档,但在前150000个文档中,速 ...

  2. 基于Solr DIH实现MySQL表数据全量索引和增量索引

    实现MySQL表数据全量索引和增量索引,基于Solr DIH组件实现起来比较简单,只需要重复使用Solr的DIH(Data Import Handler)组件,对data-config.xml进行简单 ...

  3. solr mysql 增量索引_基于Solr DIH实现MySQL表数据全量索引和增量索引

    实现MySQL表数据全量索引和增量索引,基于Solr DIH组件实现起来比较简单,只需要重复使用Solr的DIH(Data Import Handler)组件,对data-config.xml进行简单 ...

  4. solr mysql 导入命令_Solr 07 - Solr从MySQL数据库中导入数据 (Solr DIH的使用示例)

    1 加入数据导入处理器的jar包 复制Solr解压后dist目录中的:solr-dataimporthandler-4.10.4.jar; 粘贴到contrib/dataimporthandler/l ...

  5. Solr 07 - Solr从MySQL数据库中导入数据 (Solr DIH的使用示例)

    目录 1 加入数据导入处理器的jar包 2 加入数据库驱动包 3 配置solrconfig.xml文件 3.1 配置lib标签 - 加入驱动jar包 3.2 配置requestHandler标签 - ...

  6. Solr DIH使用说明

    DIH(Data Import Handler)是Solr附带的用来从关系型数据库.XML.email等目标导入数据的工具,本文仅说明Solr5.3.1中使用DIH从关系型数据库中导入数据的方式. 一 ...

  7. solr dih有子查询时速度慢

    这是我遇到的问题, 我有1千万条数据 ,以前的业务涉及多表我都是用联合查询,都是多对一模式,现在公司要对业务改造,产品做成京东那种多特征类似这种,每种商品的特征是不一样(可能会有多个特征),根据分片出 ...

  8. Django项目实战——14—(列表页热销排行、商品搜索、Haystack建立数据索引、渲染商品搜索结果、商品详情页)

    1.列表页热销排行 根据路径参数category_id查询出该类型商品销量前二的商品. 使用Ajax实现局部刷新的效果. 查询列表页热销排行数据 请求方式 请求参数:路径参数 响应结果:JSON {& ...

  9. pandas数据索引之loc、iloc、ix详解及实例

    pandas数据索引之loc.iloc.ix详解及实例 先来个总结: loc函数:通过行索引 "Index" 中的具体值来取行数据(如取"Index"为&quo ...

最新文章

  1. 色情低俗、暴力恐怖内容...如何用AI“一网打尽”?
  2. Python 基础篇-正斜杠(/)和反斜杠(\)的用法
  3. 使用log4jdbc记录SQL信息
  4. WPF 中设置Combox下拉框Text 显示值
  5. QTable中header高度
  6. 移动设备响应式网站之CSS媒体查询
  7. 自动生成一列不重复数据库
  8. memset 函数使用
  9. Linux下的定时任务Cron
  10. 电商有关淘宝天猫突破限制的解决办法
  11. rime android汉字,irime输入法安卓下载-iRime输入法 安卓版v3.0-PC6安卓网
  12. html文字居中单词,html文字居中
  13. 《组织行为学》读后感_20170803
  14. 新一代红米参数模糊的背后 是否有欺诈嫌疑?
  15. 苹果手机Home键失灵怎么办?
  16. matlab中clock是什么,matlab中的clock
  17. node 热更新代码,无需每次重启命令
  18. ac68u、r8500 梅林固件扩展为一个小型 linux 系统
  19. vue3运行npm run serve无反应,选择跳转后会自动跳入文件路径中
  20. tcping : ping ip地址+端口号

热门文章

  1. python数据可视化—WordCloud词云图
  2. 移动端开发-响应式页面
  3. Emm_V4.2步进闭环驱动器说明书Rev1.1
  4. 【Hack The Box】linux练习-- Doctor
  5. axios请求拦截器 和 响应拦截器
  6. 微信小程序picker组件
  7. vscode中检查单词是否拼写错误的插件
  8. 超级实用——用word与谷歌翻译将英文PDF文档翻译成中文,免费无限制
  9. jQuery append( ) 方法
  10. 教宗通谕《在希望中得救》