`
GhostWolf
  • 浏览: 312394 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

solr中实现MySQL数据全量索引和增量索引

阅读更多

紧接上篇ansj分词整合后,开始需要做索引。索引分增量和全量,可以直接连接数据库去做,也可以通过程序去做,以下实现连接数据库去做,相对来说比较简单。

 

1.修改multicore/new_core/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> 
<requestHandler name="/deltaimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
	<lst name="defaults">
		<str name="config">delta-data-config.xml</str>
	</lst>
</requestHandler>

 其中第一段是专门做全量索引的,第二段做增量索引(主要是靠DataImportHandler类实现)

 

2.新增multicore/new_core/conf/data-config.xml文件

<dataConfig>
    <dataSource name="jdbc" driver="com.mysql.jdbc.Driver"
        url="jdbc:mysql://192.168.0.81:3306/new_mall?zeroDateTimeBehavior=convertToNull&amp;characterEncoding=utf8&amp;useUnicode=true"
        user="root" password="HyS_Db@2014"/>
    <document name="mall_goods">
        <entity name="MallGoods" pk="id"
                query="select * from mall_goods limit ${dataimporter.request.length} offset ${dataimporter.request.offset}"
                transformer="RegexTransformer">
            <field column="goods_id" name="id" />
            <field column="title" name="title" />
            <field column="subtitle" name="subtitle" />
            <field column="cover_img_path" name="coverImgPath" />
            <field column="description" name="description" />
            <field column="update_date" name="updateDate" />
        </entity>
    </document>
</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文件

 

<dataConfig>
    <dataSource name="jdbc" driver="com.mysql.jdbc.Driver"
        url="jdbc:mysql://192.168.0.81:3306/new_mall?zeroDateTimeBehavior=convertToNull&amp;characterEncoding=utf8&amp;useUnicode=true"
        user="root" password="HyS_Db@2014"/>
    <document name="mall_goods">
        <entity name="MallGoods" pk="id"
                query="select * from mall_goods"
                deltaImportQuery="select * from mall_goods where goods_id='${dih.delta.id}'"
                deltaQuery="select goods_id as id from mall_goods where update_date &gt; '${dih.last_index_time}'"
                transformer="RegexTransformer">
            <field column="goods_id" name="id" />
            <field column="title" name="title" />
            <field column="subtitle" name="subtitle" />
            <field column="cover_img_path" name="coverImgPath" />
            <field column="description" name="description" />
            <field column="update_date" name="updateDate" />
        </entity>
    </document>
</dataConfig>

 

deltaQuery查询出有更改过的id

deltaImportQuery根据id查询 

 

4.修改multicore/new_core/conf/schema.xml文件,定义field索引配置

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 
<field name="title" type="text_ansj" indexed="true" stored="true" required="true" multiValued="false"/>
<field name="subtitle" type="text_ansj" indexed="true" stored="true" required="false" multiValued="false"/>
<field name="coverImgPath" type="string" indexed="false" stored="true" required="true" multiValued="false" />
<field name="description" type="text_ansj" indexed="true" stored="true" required="false" multiValued="false"/>
<field name="updateDate" type="text_ansj" indexed="true" stored="true" required="false" multiValued="false"/>
	

 注意上面选择一下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 

 

 

 

------------------------------------------------------------------------------------------------------------------------------

最后补充:

有时候需要删除索引数据,可以这样删除

 

http://xxxx/new_core/update/?stream.body=<delete><query>*:*</query></delete>&stream.contentType=text/xml;charset=utf-8&commit=true

 

new_core 表示你要删除哪个核下面的索引

分享到:
评论

相关推荐

    跟益达学Solr5之增量索引MySQL数据库表数据

    在这个主题“跟益达学Solr5之增量索引MySQL数据库表数据”中,我们将深入探讨如何利用Solr 5来实现对MySQL数据库表数据的增量索引,以便在搜索时获得实时更新的结果。 首先,我们需要理解什么是增量索引。在传统的...

    solr5.3.1 导入mysql数据

    1. **创建 DataImportHandler (DIH)**: DIH 是 Solr 提供的一种工具,可以将外部数据源的数据导入到 Solr 索引中。在 `solrconfig.xml` 文件中启用并配置 DIH。 2. **配置 DataConfig.xml**: 这个文件定义了数据源...

    solr增量导入更新索引包

    解压并应用这个包,可以将这些变更有效地导入到Solr索引中。 7. **注意事项** - 确保Solr和数据库之间的通信安全,防止敏感数据泄露。 - 定期检查和清理过期的增量数据,保持索引的整洁。 - 监控Solr和数据库的...

    solr同步数据库需要jar包

    在Solr中,为了实现与数据库的实时同步,通常会采用增量索引策略,确保数据库中的新数据或更新能够及时反映到Solr索引中,提高系统的响应速度和效率。 标题中的"solr同步数据库需要jar包"指的就是在进行Solr和...

    跟益达学Solr5之从MySQL数据库导入数据并索引

    DIH支持增量更新和全量导入,确保数据库中的数据变化能实时反映到Solr索引中。 - **连接配置**:配置DIH时,需要设置MySQL的JDBC连接信息,包括URL、用户名、密码和驱动类名。 - **数据源配置**:定义要导入的...

    使用MySQL作为SOLR的索引源

    4. **触发索引更新**:可以通过SOLR的API或Web界面来触发全量或增量数据导入,使SOLR根据MySQL中的最新数据更新索引。 接下来,我们关注到`schema.xml`文件。这是SOLR的核心配置文件,定义了索引的字段类型和字段。...

    solr-dataimportscheduler-1.4.jar 增量定时同步数据到solr.rar

    这个jar包的核心功能是DataImportHandler(DIH),它是一个内置在Solr中的模块,用于将外部数据源(如关系型数据库)的数据导入到Solr索引中。DIH支持全量导入和增量导入,这使得Solr可以保持与数据库的实时同步,...

    图解Solr6.6.0安装与MySQL配置

    - 在`solr\WEB-INF\web.xml`文件中配置Solr的HOME目录,确保Solr知道去哪里查找其配置文件和数据。 **2.7 测试Solr** - **2.7.1 JDK版本要求**: Solr 6.x版本要求JDK 8或以上版本。 - **2.7.2 启动Tomcat**: 使用...

    图解Solr5.3.1与MySQL配置【原创】

    在本文中,我们将详细介绍如何配置Solr 5.3.1与MySQL数据库的集成,以便实现高效的数据搜索功能。Solr是一款高性能、可伸缩的企业级搜索引擎,它是Apache Lucene的分布式应用实例,广泛应用于各种需要全文搜索的应用...

    solr-8.2.0.rar

    本实践教程将指导你如何整合MySQL数据库与Solr 8.2.0,实现数据的高效检索。 一、安装与部署Solr 8.2.0 首先,你需要从官方源下载Solr 8.2.0的压缩包`solr-8.2.0.rar`,解压后得到包含`bin`、`server`等目录的完整...

    Solr3.6用DIH组件进行MySQL数据库全文索引[归纳].pdf

    总之,利用Solr 3.6的DIH组件,你可以轻松地将MySQL数据库中的数据转换为可搜索的索引,从而实现高效的全文检索。记得根据实际情况调整配置和参数,以确保最佳的搜索体验。同时,随着数据库的变化,定期执行数据导入...

    Solr3.6用DIH组件进行MySQL数据库全文索引[参照].pdf

    完成上述步骤后,Solr就会使用DIH组件从MySQL数据库中抽取数据,并创建一个全文索引,使你能高效地搜索和查询这些数据。这在大数据量的Web应用程序中非常有用,因为它提供了快速的搜索性能和丰富的查询能力。记得...

    solr-dataimportscheduler-1.1.1.jar

    Solr-dataimportscheduler-1.1.1.jar 是一个针对Apache Solr的扩展插件,主要功能是实现数据的增量导入。Apache Solr是一个流行的开源全文搜索引擎,它提供了高效的搜索和索引能力,广泛应用于网站内容检索、产品...

    solr-dataimportscheduler-1.1.jar

    总结起来,"solr-dataimportscheduler-1.1.jar" 是一个用于 Apache Solr 的数据导入调度插件,它使得定时、增量地从外部数据源同步数据成为可能,这对于保持 Solr 索引的实时性和准确性具有重要意义。在实际使用中,...

    solr入门教程

    这样,当数据库中的数据发生变化时,Solr可以通过增量索引实时或定期更新索引,保持与数据库的一致性。 总之,Solr是一个强大的搜索引擎,通过上述步骤,你已成功设置了基础环境,能够对数据库进行全文检索和增量...

    solr7.5手动倒mysql库需要用到的jar.zip 两个jar都在压缩包里

    总的来说,这两个jar文件是Solr与MySQL集成的重要工具,通过它们,你可以便捷地将数据库中的数据导入到Solr索引中,从而实现快速高效的搜索功能。在实际应用中,需要结合Solr的其他特性和配置进行细致的调整,以满足...

    mysql-connector-java-5.1.7

    通过将MySQL的数据同步到Solr,可以利用Solr的强大搜索功能和索引能力,提升对大量结构化数据的检索速度和性能。 标签“mysql”和“solr”进一步明确了讨论的主题,即MySQL数据库和Solr搜索引擎之间的交互。 在...

Global site tag (gtag.js) - Google Analytics