[jjzhu学java]之solr4.9同步mysql数据

Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。

       可以将数据库中的数据导入到solr中,对于百万级别的数据可以快速响应查询。

1、安装jdk

JDK版本需要1.7以上

2、安装solr

下载solr压缩包,解压安装包,进入到SOLR_HOME\example目录下,运行命令java –jar start.jar启动solr

Solr默认端口为8983,访问http://localhost:8983/solr,若有如下界面,则启动成功

3、导入并更新数据相关配置

       Solr提供了将数据库数据导入到solr索引库的功能(dataimport)

3.1、下载数据库驱动包

       下载mysql的驱动包,并放在{%SOLR_HOME%}contrib\dataimporthandler\lib目录下

3.2、配置solrconfig.xml

3.2.1、引用相关库

       solrconfig.xml包含了用于配置自身行为的绝大部分参数,其作用范围是当前core。位置在文件目录该文件位于{%solr_home%} example\solr\collection1\conf下。

       数据导入需要引用mysql的驱动包和DataImport所需的包。

       在文件中添加如下内容:

<libdir="../../../contrib/dataimporthandler/lib"regex=".*\.jar" />

       <lib dir="../../../dist/"regex="solr-dataimporthandler-\d.*\.jar" />

      

3.2.2、配置requestHandler

       在solrconfig.xml中加入如下配置:

<requestHandlername="/dataimport"class="org.apache.solr.handler.dataimport.DataImportHandler">

       <lst name="defaults">

         <str name="config">data-config.xml</str>

       </lst>

   </requestHandler>

3.3、配置schema.xml

              Schema.xml可以灵活的配置不同类型的字段,所在位置与solrconfig.xml同级。

              导入数据需要配置与数据库中字段一致的类型,在配置文件中

3.3、配置数据源

       在与solrconfig.xml同级目录下({%solr_home%}example\solr\collection1\con),建立与3.2.2中配置中同名的数据配置文件data-config.xml,

并添加如下内容

<dataConfig>

   <!-- driver: 数据库驱动名

        url:数据库路径

        user:数据库用户

        password:数据库密码

        batchSize:防止在导入数据过程中内存溢出

    -->

  <dataSource type="JdbcDataSource"

             driver="com.mysql.jdbc.Driver"

             url="jdbc:mysql://localhost/exercise"

              user="root"

              password=""

              batchSize="-1"/>

 

  <document>

   <!--要导入的表,可以配置多个

       并查询出要建立索引的字段

   -->

   <entity name="customerinfo" query="selectcustomerID,customerName,PID,telephone from customerinfo">

      <field column="customerID" name="id"/>

      <field column="customerID" name="customerID"/>

      <field column="customerName"name="customerName"/>

      <field column="PID" name="PID"/>

      <field column="telephone" name="telephone"/>

   </entity>

 </document>

</dataConfig>

4、导入数据

       访问solr界面

Command选择full-import,Entity选择要导入的表,再点击Execute便可导入数据

完成后会提示索引建立完成。

然后在Query界面可以输入相关查询条件进行查询

时间: 2024-08-31 08:45:48

[jjzhu学java]之solr4.9同步mysql数据的相关文章

Logstash使用jdbc_input同步Mysql数据时遇到的空时间SQLException问题

今天在使用Logstash的jdbc_input插件同步Mysql数据时,本来应该能搜索出10条数据,结果在Elasticsearch中只看到了4条,终端中只给出了如下信息 [2017-08-25T13:31:04,084][INFO ][logstash.pipeline ]Pipeline terminated <"pipeline.id"=>"main"> 看不出所以然,到 logstash 的日志 logs 目录下看最新的日志,发现了一些信

java语言 play framework插入Mysql数据主键名不为id 如何处理?

问题描述 java语言 play framework插入Mysql数据主键名不为id 如何处理? java语言 play framework插入Mysql数据主键名不为id 如何处理?因为这个框架对数据库主键有要求,主键名必须叫 id,否者不能做添加数据的操作.求大神帮忙 解决方案 求大神啊啊啊 自己先顶一下 解决方案二: 你用orm是什么啊?你说的不够清楚

[jjzhu学java]深入理解JVM笔记之内存管理机制

深入理解JVM笔记之内存管理机制 运行时数据区域 程序计数器 JVM栈 本地方法栈 Java堆 方法区 运行时常量池 直接内存 对象访问 OutOfMemoryError异常 Java堆溢出示例 JVM栈和本地方法栈溢出 运行时常量池溢出 本机直接内存溢出 深入理解JVM笔记之内存管理机制 运行时数据区域 程序计数器 每个线程都有一个程序计数器(PC),是当前线程所执行的字节码的行号指示器,通过改变程序计数器的值来选取下一条指令.各线程之间的计数器互不影响,是线程私有的内存. 如果线程执行的是一

[jjzhu学java]之JDK集合框架源码分析

Java Collection Collection接口 AbstractCollection类 AbstractList类 Vector类 Stack栈 ArrayList AbstractSequentialList LinkedList线性链表 Map接口 AbstractMap HashMap LinkedHashMap treeMap HashTable 总结 Java Collection 图中实线边框表示的是实现类(ArrayList, Hashtable等),虚线边框的是抽象类(

[jjzhu学java]之自动装箱的陷阱

自动装箱.拆箱的陷阱 装箱与拆箱 java语言中为每种基本数据类型(int,float,double-)都提供了与之对应的包装器类型(Integer,Float,Double).从java se5之后就开始提供了自动装箱的特性.想要得到一个数值为2016的Integer时,只需要如下的赋值语句: //Integer a = Integer.valueOf(2016); Integer a = 2016; 该语句就会自定根据=右边的数值创建相应的Integer,这个过程就是自动装箱. 拆箱与装箱是

[jjzhu学java]之深入理解JVM之垃圾收集器与内存分配策略

深入理解JVM之垃圾收集器与内存分配策略 如何判断对象已经消亡 引用计数算法 根搜索算法 引用 深入理解JVM之垃圾收集器与内存分配策略 java中对象的创建需要的内存都是在java堆中申请的,所以垃圾收集的区域就是对java堆和方法区的内存区域进行GC. 如何判断对象已经消亡 垃圾收集器的主要任务就是找出已经"消亡"的对象,将其标记并清除其说用内存的过程,如何判断某个对象已经"消亡",不同的虚拟机有不同的判断策略 引用计数算法 引用计数(Reference Cou

PHP使用SWOOLE扩展实现定时同步 MySQL 数据

南宁公司和几个分公司之间都使用了呼叫系统,然后现在需要做一个呼叫通话数据分析,由于分公司的呼叫服务器是在内网,通过技术手段映射出来,分公司到南宁之间的网络不稳定,所以需要把分公司的通话数据同步到南宁. 本身最简单的方法就是直接配置MySQL的主从同步就可以同步数据到南宁来了.但是销售呼叫系统那边的公司不给MySQL权限我们. 所以这个方法只能放弃了. 于是我们干脆的想,使用PHP来实现定时一个简易的PHP定时同步工具,然后PHP进程常驻后台运行,所以首先就先到了一个PHP组件:SWOOLE,经过

mysql-刚学JAVA,求个MySQL使用线程池插入表的例子

问题描述 刚学JAVA,求个MySQL使用线程池插入表的例子 就只对一个表进行插入,只要 insert into table(number) values(?) ,这个操作就行, 因为我想要插入十万条,百万条数据,次数大了用普通的效率太低了,上网查了都说是用线程池可以提高几倍,找了很久都没有具体例子,有的都是看不懂的.求好人给我个简单的例子,谢谢了!对了,祝大家 新年快乐! 解决方案 线程池提高效率是建立在连接上面的,怎么感觉跟你说的不太沾边呢,你的意思是要sql语句,还是创建线程池的代码 解决

学java得这样学,学习确实也得这样_java

引言     软件开发之路是充满荆棘与挑战之路,也是充满希望之路.Java学习也是如此,没有捷径可走.梦想像<天龙八部>中虚竹一样被无崖子醍醐灌顶而轻松获得一甲子功力,是很不现实的.每天仰天大叫"天神啊,请赐给我一本葵花宝典吧",殊不知即使你获得了葵花宝典,除了受自宫其身之苦外,你也不一定成得了"东方不败",倒是成"西方失败"的几率高一点.     "不走弯路,就是捷径",佛经说的不无道理.     1.如何学习程