第一步:创建core

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

进入linux命令行,进入到solr的bin目录,执行如下命令:

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:是否是多值,存储多个值时设置为true,solr允许一个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目录下面的2个jar包

solr-dataimporthandler-7.2.1.jar

solr-dataimporthandler-extras-7.2.1.jar

3、上传3个jar包到 /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

solr实时更新mysql数据的方法的更多相关文章

  1. WebSocket 实时更新mysql数据到页面

    使用websocket的初衷是,要实时更新mysql中的报警信息到web页面显示 没怎么碰过web,代码写的是真烂,不过也算是功能实现了,放在这里也是鞭策自己,web也要多下些功夫 准备 引入依赖 & ...

  2. 使用Logstash来实时同步MySQL数据到ES

    上篇讲到了ES和Head插件的环境搭建和配置,也简单模拟了数据作测试 本篇我们来实战从MYSQL里直接同步数据 一.首先下载和你的ES对应的logstash版本,本篇我们使用的都是6.1.1 下载后使 ...

  3. PyQt学习随笔:Model/View中视图数据项编辑变动实时获取变动数据的方法

    对于Model/View中视图的数据编辑后怎么能实时获取编辑的数据变动位置和变动情况查阅了一些资料,终于基本弄明白必须重写Model的setData方法才能截获.setData方法是视图中各种角色数据 ...

  4. android ListView中含有按钮事件实时更新ListView数据案例

    1.布局文件Listview <?xml version="1.0" encoding="utf-8"?> <android.support. ...

  5. flume实时采集mysql数据到kafka中并输出

    环境说明 centos7(运行于vbox虚拟机) flume1.9.0(flume-ng-sql-source插件版本1.5.3) jdk1.8 kafka(版本忘了后续更新) zookeeper(版 ...

  6. 用solr DIH 实现mysql 数据定时,增量同步到solr

    基础环境: (二)设置增量导入为定时执行的任务: 很多人利用Windows计划任务,或者Linux的Cron来定期访问增量导入的连接来完成定时增量导入的功能,这其实也是可以的,而且应该没什么问题. 但 ...

  7. Python tkinter库将matplotlib图表显示在GUI窗口上,并实时更新刷新数据

    代码 1 ''' 2 使用matplotlib创建图表,并显示在tk窗口 3 ''' 4 import matplotlib.pyplot as plt 5 from matplotlib.pylab ...

  8. Web实时更新客户端数据

    1        轮询方式实现客户端数据及时更新 在基于Web的即时通信.股票行情这样的系统中,需要客户端能够及时更新内容.由于B/S架构的特性(Http连接是无状态连接, 即服务器处理完客户的请求, ...

  9. MySQL数据备份方法

    MySQL的备份和还原 备份:副本    RAID1,RAID10:保证硬件损坏而不会业务中止:        DROP TABLE mydb.tb1; 备份类型:        热备份.温备份和冷备 ...

随机推荐

  1. Some_tools

    Why and what There are lots of nice or great tools on the internet, sometimes I will just forget a p ...

  2. 转:css实现强制不换行/自动换行/强制换行

    css实现强制不换行/自动换行/强制换行 [日期:2007-08-22] 来源:  作者: [字体:大 中 小] 强制不换行 div{ white-space:nowrap;} 自动换行 div{  ...

  3. C的打印输出格式

    #include<stdio.h> int main() { float test1=12.3224356546565461-0.1; int test2=13; char test3[] ...

  4. Debug就是Debug,Release就是Release

    现在线上发布的时候使用的是增量发布,什么是增量发布呢,就是变化什么,上什么.最近把jenkins搭建上去了,发现每次dll文件大小不一样,已查询发现原来是两个模式debuge模式与release模式搞 ...

  5. python的print()输出

    1.普通的输出: print(str)#str是任意一个字符串,数字··· 2.格式化输出: print('1,2,%s,%d'%('asd',4)) 1,2,asd,4 与C语言有点类似 3.其它: ...

  6. HTML5 SSE 数据推送应用开发

    javascript表达行为,css表达外观,注意HTML既表达结构(逻辑结构),又表达内容(数据本身)通常需要更新数据时,并不需要更新结构,正是这种不改变组织结构仅改变数据的诉求,推动了数据拉取和数 ...

  7. 构造函数(JAVA)

    构造函数 :是一种特殊的方法,主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中. 特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类 ...

  8. 375. 猜数字大小 II leetcode java

    题目: 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字. 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了. 然而,当你猜了数字 x 并且猜错 ...

  9. SpringMVC 的映射

    27.1.1 @RequestMapping使用 之前,我们是把@RequestMapping注解放在方法之上,用来给方法绑定一个请求映射.除此以外,@RequestMapping注解还可以放在类的上 ...

  10. BZOJ 1091--切割多边形(几何&枚举)

    1091: [SCOI2003]切割多边形 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 356  Solved: 157[Submit][Status ...