紧接上篇ansj分词整合后,开始需要做索引。索引分增量和全量,可以直接连接数据库去做,也可以通过程序去做,以下实现连接数据库去做,相对来说比较简单。
1.修改multicore/new_core/conf/solrconfig.xml文件(上篇提到过的),在里面新增
Xml代码
1.<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
2. <lst name="defaults">
3. <str name="config">data-config.xml</str>
4. </lst>
5.</requestHandler>
6.<requestHandler name="/deltaimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
7. <lst name="defaults">
8. <str name="config">delta-data-config.xml</str>
9. </lst>
10.</requestHandler>
其中第一段是专门做全量索引的,第二段做增量索引(主要是靠DataImportHandler类实现)
2.新增multicore/new_core/conf/data-config.xml文件
Xml代码
1.<dataConfig>
2. <dataSource name="jdbc" driver="com.mysql.jdbc.Driver"
3. url="jdbc:mysql://192.168.0.81:3306/new_mall?zeroDateTimeBehavior=convertToNull&characterEncoding=utf8&useUnicode=true"
4. user="root" password="HyS_Db@2014"/>
5. <document name="mall_goods">
6. <entity name="MallGoods" pk="id"
7. query="select * from mall_goods limit ${dataimporter.request.length} offset ${dataimporter.request.offset}"
8. transformer="RegexTransformer">
9. <field column="goods_id" name="id" />
10. <field column="title" name="title" />
11. <field column="subtitle" name="subtitle" />
12. <field column="cover_img_path" name="coverImgPath" />
13. <field column="description" name="description" />
14. <field column="update_date" name="updateDate" />
15. </entity>
16. </document>
17.</dataConfig>
dataSource不用说了,数据源配置来的
entity文档中的实体配置(注意pk="id" 不能随便改 ,需要和schema.xml中的<uniqueKey>id</uniqueKey>匹配,否则会报“ org.apache.solr.common.SolrException: Document is missing mandatory uniqueKey field: id”)
query 查询语句(可分页)
transformer 暂时不清楚干啥
field定义列名
3.新增multicore/new_core/conf/delta-data-config.xml文件
Xml代码
1.<dataConfig>
2. <dataSource name="jdbc" driver="com.mysql.jdbc.Driver"
3. url="jdbc:mysql://192.168.0.81:3306/new_mall?zeroDateTimeBehavior=convertToNull&characterEncoding=utf8&useUnicode=true"
4. user="root" password="HyS_Db@2014"/>
5. <document name="mall_goods">
6. <entity name="MallGoods" pk="id"
7. query="select * from mall_goods"
8. deltaImportQuery="select * from mall_goods where goods_id='${dih.delta.id}'"
9. deltaQuery="select goods_id as id from mall_goods where update_date > '${dih.last_index_time}'"
10. transformer="RegexTransformer">
11. <field column="goods_id" name="id" />
12. <field column="title" name="title" />
13. <field column="subtitle" name="subtitle" />
14. <field column="cover_img_path" name="coverImgPath" />
15. <field column="description" name="description" />
16. <field column="update_date" name="updateDate" />
17. </entity>
18. </document>
19.</dataConfig>
deltaQuery查询出有更改过的id
deltaImportQuery根据id查询
4.修改multicore/new_core/conf/schema.xml文件,定义field索引配置
Xml代码
1.<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
2.<field name="title" type="text_ansj" indexed="true" stored="true" required="true" multiValued="false"/>
3.<field name="subtitle" type="text_ansj" indexed="true" stored="true" required="false" multiValued="false"/>
4.<field name="coverImgPath" type="string" indexed="false" stored="true" required="true" multiValued="false" />
5.<field name="description" type="text_ansj" indexed="true" stored="true" required="false" multiValued="false"/>
6.<field name="updateDate" type="text_ansj" indexed="true" stored="true" required="false" multiValued="false"/>
7.
注意上面选择一下text_ansj
5.solr的war包可能还缺少部分jar包,需要把mysql的jar,以及solr项目中dist目录下的jar包都放到solr的web站点中
6.开始运行
全量:http://solr.xxxx.com:8082/new_core/dataimport?command=full-import&commit=true&clean=false&offset=0&length=100000(其中0到100000的数据建立索引)
增量:http://solr.ehaoyao.com:8082/new_core/deltaimport?command=delta-import&entity=MallGoods
entity:是document下面的标签(data-config.xml)。使用这个参数可以有选择的执行一个或多个entity 。使用多个entity参数可以使得多个entity同时运行。如果不选择此参数那么所有的都会被运行。
clean:选择是否要在索引开始构建之前删除之前的索引,默认为true
commit:选择是否在索引完成之后提交。默认为true
optimize:是否在索引完成之后对索引进行优化。默认为true
debug:是否以调试模式运行,适用于交互式开发(interactive development mode)之中。
请注意,如果以调试模式运行,那么默认不会自动提交,请加参数“commit=true”
注意:在做增量索引的时候
很容易出现deltaQuery has no column to resolve to declared primary key pk='id'这种异常
主要是因为ID" must be used as it is in 'deltaQuery' select statement as "select ID from ..."
(if you different name for ID column in database, then use 'as' keyword in select statement. In my case I had 'studentID' as primary key in student table. So I used it as "select studentID as ID from ..."
--> The same applies to 'deletedPkQuery'
At present its working fine for me. Any updation in database is reflected in Solr as well.
所以,delta-data-config.xml文件需要注意一下pk的值
参考连接:
http://shiyanjun.cn/archives/444.html
http://blog.duteba.com/technology/article/70.htm
http://www.devnote.cn/article/89.html
http://qiaqia26.iteye.com/blog/1004996
http://zzstudy.offcn.com/archives/8104
http://blog.csdn.net/duck_genuine/article/details/5426897
分享到:
相关推荐
全量索引是指将整个数据集插入 Solr 索引库中,一般用于第一次创建索引的情况。在这种情况下,我们需要将所有数据从数据源中提取出来,然后将其插入 Solr 索引库中。全量索引的优点是可以快速地创建索引,但其缺点是...
Solr,全称为Apache Solr,是一款开源的企业级搜索引擎,...总之,Solr全量数据迁移是一项涉及多个步骤的操作,需要谨慎处理,以确保数据的完整性和服务的稳定性。理解并熟练掌握这些步骤对于Solr的运维工作至关重要。
这对于大数据量的系统尤其重要,因为它避免了全量索引的高成本和时间消耗。 3. **Solr的两种增量更新方式** - **Delta Import**:这种方式是通过跟踪数据库的变更日志(如MySQL的binlog或Oracle的redo log)来确定...
4. **触发索引更新**:可以通过SOLR的API或Web界面来触发全量或增量数据导入,使SOLR根据MySQL中的最新数据更新索引。 接下来,我们关注到`schema.xml`文件。这是SOLR的核心配置文件,定义了索引的字段类型和字段。...
在传统的全量索引中,Solr会一次性将所有数据库数据导入索引。然而,随着数据的不断增长,全量索引不仅耗时,而且可能对系统造成较大压力。增量索引则只对新插入、更新或删除的数据进行索引,显著提高了效率和性能。...
其中,conf 文件夹存放着 Solr 的配置文件,collection1 文件夹存放着 Solr 的索引数据,lib 文件夹存放着 Solr 的依赖库,logs 文件夹存放着 Solr 的日志文件,solr-home 文件夹存放着 Solr 的主目录。 Solr 版本...
增量索引是Solr中一种优化性能的技术,它只索引自上次索引以来数据库中新增或修改的记录,而不是每次都全量索引所有数据。这样可以大大减少索引时间和资源消耗,尤其适用于大数据量的场景。 要实现Solr与MySQL等...
其中,"collection1"是你的Solr集合名称,"full-import"表示全量导入,"clean=true"意味着在导入前清空现有索引。 除了全量导入,DIH还支持增量导入,仅更新自上次导入以来发生改变的数据。这通常通过跟踪数据库的...
在传统的Solr全量导入过程中,所有的数据都会被重新导入,这在数据量大或者频繁更新的场景下效率较低且可能导致服务短暂中断。因此,Solr-dataimportscheduler插件应运而生,它的核心作用就是实现对Solr索引的增量...
1. **全量导入**:全量导入是将所有数据从源数据库或文件一次性导入到Solr索引的过程。这通常在系统初始化或者数据大幅度变动时进行。 2. **增量导入**:增量导入只导入自上次导入以来发生变化的数据。Solr通过跟踪...
在Solr6版本中,DataImportHandler(DIH)是一个非常重要的特性,它允许Solr从外部数据源导入数据并建立索引。在"solr6--solr-dataimporthandler-scheduler-1.1"这个项目中,我们关注的重点是DIH的调度功能,也就是...
DIH支持增量更新和全量导入,确保数据库中的数据变化能实时反映到Solr索引中。 - **连接配置**:配置DIH时,需要设置MySQL的JDBC连接信息,包括URL、用户名、密码和驱动类名。 - **数据源配置**:定义要导入的...
通过数据导入调度器,用户可以配置定时任务,确保Solr索引与数据库中的数据保持最新。 首先,让我们深入了解一下Apache Solr的核心概念。Solr使用索引来存储和检索数据,索引是经过优化的,能够快速响应搜索查询。...
5. **监控和更新**: 一旦数据导入完成,你可以定期运行增量或全量更新,以保持Solr索引与MongoDB数据的同步。MongoDB Importer支持实时或定时的增量导入,确保搜索结果始终是最新的。 6. **优化性能**: 根据数据量...
本教程将引导你完成Solr的基本安装、配置以及数据库索引的建立,特别关注定时增量索引这一重要特性。 首先,从Apache官方网站下载Solr的最新稳定版本,例如5.1.0。解压缩文件到任何你喜欢的目录,比如F盘。接下来,...
在Solr中,定时更新主要通过DataImportHandler(DIH)实现,这是一个用于将结构化数据导入到Solr索引中的内置工具。DIH支持多种数据源,如关系型数据库、CSV文件等,并提供了全量导入和增量导入两种方式。全量导入会...
总结起来,"solr-dataimportscheduler-1.1.jar" 是一个用于 Apache Solr 的数据导入调度插件,它使得定时、增量地从外部数据源同步数据成为可能,这对于保持 Solr 索引的实时性和准确性具有重要意义。在实际使用中,...
1. DataImportHandler(DIH):Solr6使用DIH进行数据导入,它是Solr内置的一个处理程序,可以连接到各种数据源(如数据库),并将数据导入到Solr索引中。DIH支持增量导入,通过跟踪数据库的LastModified时间戳或者...
这个jar包的核心功能是DataImportHandler(DIH),它是一个内置在Solr中的模块,用于将外部数据源(如关系型数据库)的数据导入到Solr索引中。DIH支持全量导入和增量导入,这使得Solr可以保持与数据库的实时同步,...