solr实时更新mysql数据的方法

第一步:创建core

coresolr的特有概念,每个core是一个查询数据,、索引等的集合体,你可以把它想象成一个独立数据库,我们创建一个新core:名字[core1]

进入linux命令行,进入到solrbin目录,执行如下命令:

cd /usr/local/solr/bin

./solr create -c core1 -force      // -c 指定要创建的Core名称 root用户启动需要增加 -force

 

第二步:准备数据导入配置

1、修改/usr/local/solr/server/solr/core1/conf 目录下的solrconfig.xml

增加内容如下:注意不要放到其他requestHandler里面,放在已经存在的</requestHandler> 节点后面!

<requestHandler name="/dataimport" class="solr.DataImportHandler">  

   <lst name="defaults">  

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

   </lst>  

 </requestHandler>  

requestHandler请求处理器,定义了索引和搜索的访问方式。

通过/dataimport进行数据导入,可以完成从MYSQL数据库导入数据到Solr的操作。

data-config.xml文件是自己制定的数据源描述文件,名字可以随便取。

2/usr/local/solr/server/solr/core1/conf 目录下新建data-config.xml

<dataConfig>

  <dataSource name="sgk" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.1.112:3306/mydb" user="root" password="123" batchSize="-1" />

  <document name="mydoc">

   <entity name="product" query="SELECT pid,name,catalog_name,price,picture FROM products ">

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

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

 <field column="catalog_name" name="product_catalog_name"/>

 <field column="price" name="product_price"/>   

 <field column="picture" name="product_picture"/>

</entity>  

  </document>

</dataConfig>

2、修改/usr/local/solr/server/solr/core1/conf 目录下managed-schema文件中添加如下内容:

<field name="product_name" type="text_ik" indexed="true" stored="true"/>

   <field name="product_price"  type="pfloat" indexed="true" stored="true"/>   

   <field name="product_picture" type="string" indexed="false" stored="true" />

   <field name="product_catalog_name" type="string" indexed="true" stored="true" />   

   <field name="product_keywords" type="text_ik" (string) indexed="true" stored="false" multiValued="true"/>

   <copyField source="product_name" dest="product_keywords"/>  

field配置参数说明:

l  Name:域的名称

l  Type:域的类型

l  Indexed:是否索引

l  Stored:是否存储  

l  multiValued:是否是多值,存储多个值时设置为truesolr允许一个Field存储多个值,比如存储一个用户的好友id(多个),商品的图片(多个,大图和小图)

copyField(复制域):

可以将多个Field复制到一个Field中,以便进行统一的检索。当创建索引时,solr服务器会自动的将源域的内容复制到目标域中。

l  source:源域

l  dest:目标域,搜索时,指定目标域为默认搜索域,可以提供查询效率。

第三步:安装中文分词

因为solr虽然内置中文分词,但效果并不好,我们需要添加IKAnalyzer中文分词引擎来查询中文。在https://github.com/EugenePig/ik-analyzer-solr5

 

1、下载IKAnalyzer for solr5的源码包,然后使用Maven编译,得到一个文件IKAnalyzer-5.0.jar,把它放入/usr/local/solr/server/solr-webapp/webapp/WEB-INF/lib目录中

 

2、修改managed-schema在最后加入以下内容:

<fieldType name="text_ik" class="solr.TextField">

        <analyzer type="index" useSmart="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>   

        <analyzer type="query" useSmart="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>   

    </fieldType>

第四步:上传相关类库

1、要导入mysql数据,需要MYSQL类库:

mysql-connector-java-bin.jar

2、导入数据需要  /usr/local/solr/dist目录下面的2jar

solr-dataimporthandler-7.2.1.jar

solr-dataimporthandler-extras-7.2.1.jar

 

3、上传3jar包到 /usr/local/solr/server/solr-webapp/webapp/WEB-INF/lib目录中

 

4、重启solr

cd /usr/local/solr/bin

./solr restart -force                    //root用户启动需要增加 -force

 

第五步:添加更新配置文件

solr-6.6.0/server/solr下新建conf文件夹

在solr-6.6.0/server/solr/conf/conf下新建dataimport.properties文件

配置:

#################################################
#                                               #
#       dataimport scheduler properties         #
#                                               #
#################################################

#  to sync or not to sync
#  1 - active; anything else - inactive
syncEnabled=1
#  which cores to schedule
#  in a multi-core environment you can decide which cores you want syncronized
#  leave empty or comment it out if using single-core deployment
#syncCores=game,resource
syncCores=search_node
#  solr server name or IP address
#  [defaults to localhost if empty]
server=localhost
#  solr server port
#  [defaults to 80 if empty]
port=9090
interval=2
#  application name/context
#  [defaults to current ServletContextListener's context (app) name]
webapp=solr
#  URL params [mandatory]
#  remainder of URL
params=/dataimport?command=delta-import&clean=false&commit=true
#  schedule interval
#  number of minutes between two runs
#  [defaults to 30 if empty]

#  重做索引的时间间隔,单位分钟,默认7200,即5天; 
#  为空,为0,或者注释掉:表示永不重做索引
reBuildIndexInterval=7200
 
#  重做索引的参数
reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true
 
#  重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
#  两种格式:2012-04-11 03:10:00 或者  03:10:00,后一种会自动补全日期部分为服务启动时的日期
reBuildIndexBeginTime=03:10:00

如果不配置reBuildIndexBeginTime会导致报错, Unable to convert 'interval' to number 00:00:00

这个是源码中的bug,

if ((this.reBuildIndexBeginTime == null) || (this.reBuildIndexBeginTime.isEmpty()))
      this.interval = "00:00:00";

启动 solr-6.6.0/bin/solr start -port 9090

重启 solr-6.6.0/bin/solr restart -port 9090

posted @ 2018-06-06 14:02  城南少年与猫  阅读(990)  评论(0编辑  收藏  举报