Docker部署solr8.5.2、ik、表结构一对多全量导入

3 篇文章 0 订阅

1、docker搭建solr,安装IK分词器

步骤详情
1、#拉取solr镜像docker pull solr:8.5.2
2、创建容器

docker run -itd -p 8983:8983 --restart always --privileged --net="host" --name my_solr solr:8.5.2

--net:
none模式,使用--net=none指定,该模式关闭了容器的网络功能。
host模式,使用--net=host指定,容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
bridge模式,使用--net=bridge指定,默认设置 ,此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。
container模式,使用--net=container:NAME_or_ID指定,创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。

3、创建core

docker exec -it --user=solr my_solr bin/solr create_core -c ask_core

复制默认配置文件到core文件夹中,如果创建其他的core也是去cp默认的配置文件,再默认配置文件基础上进行修改就可以了

cp -r server/solr/configsets/_default/conf /var/solr/data/good_core

4、关闭防火墙systemctl stop firewalld
5、访问solr验证是否安装启动成功http://docker-1:8983/solr/#/
6、下载IK,并且打成jar包https://github.com/magese/ik-analyzer-solr
7、将IKjar包放到服务器的任何位置/root下
8、将KIjar包copy到my_solr容器中的指定目录下

docker cp ik-analyzer-8.3.0.jar my_solr:/opt/solr-8.5.2/contrib/analysis-extras/lucene-libs

9、查看Solr容器在宿主机中数据卷的位置

docker inspect my_solr

找到Mounts

Destination 容器里的路径

Source 对应宿主机里的路径

10、将IK分词器配置到Solr的核心配置文件中

a、Source就是上一步骤的Source值,不是真写{Source}

      cd /var/lib/docker/volumes/a4f36cd7ba4b6e2c2a441b07d0bffee758644d57ebff0c9edb62ee85d9eda46b/_data/data/ask_core/conf
      vim solrconfig.xml

      添加如下内容, 后边的jar包对应下载的版本

        dir 容器存放自带分词JAR包的目录

        regex JAR包名

        <lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs/" regex="ik-analyzer-8.3.0.jar" />

11、重启my_solr容器docker restart my_solr

2、应用:将mysql中的商品数据同步到solr中

(1)、全量同步

步骤详细

1、下载solr的tar包

http://archive.apache.org/dist/lucene/solr/

2、将jdbc驱动和solr安装包中的两个jar放到my_solr指定目录下

docker cp mysql-connector-java-5.1.10-bin.jar my_solr:/opt/solr-8.5.2/server/solr-webapp/webapp/WEB-INF/lib/

 

docker cp solr-dataimporthandler-8.5.2.jar my_solr:/opt/solr-8.5.2/server/solr-webapp/webapp/WEB-INF/lib/

 

docker cp solr-dataimporthandler-extras-8.5.2.jar my_solr:/opt/solr-8.5.2/server/solr-webapp/webapp/WEB-INF/lib/

3、进入solr容器docker exec -it my_solr /bin/bash
4、进入到solr目录下

cd /opt/solr-8.5.2

5、进入该目录

cd /var/lib/docker/volumes/a2b0c5d3707a65c7a2d9367c68df3ebdb91c3e8bf32919ee2d019e5cc9614975

/_data/data/good_core/conf

6、data-config.xml 文件,写入如下配置内容,最下边即可
<dataConfig> 
<!--dataSource标签配置数据库相关的信息-->
<dataSource name = "ds_1" type="JdbcDataSource"   
    driver="com.mysql.jdbc.Driver" 
	url="jdbc:mysql://localhost:3306/mytest?characterEncoding=UTF-8"   
    user="root" password="111111"/>  
<document>
<!-- pk属性指定的是manage-schema文件中的uniqueKey标签中的值,即主键 -->  
<!-- query获取全部数据的SQL -->
<!-- deltaImportQuery获取增量数据时使用的SQL -->
<!-- deltaQuery获取pk的SQL -->
<!-- parentDeltaQuery是获取父Entity的pk的SQL -->
<!-- 商品表字段以及关联表字段配置 -->
   <entity name="goods" dataSource="ds_1"  PK="id"
          query="SELECT
						g.id AS id,
						g.`NAME` AS `name`,
						g.lesson_length AS lesson_length,
						gp.imgUrl AS imgUrl,
						g.goods_introduce,
						g.org_id,
						g.goods_ways,
						g.video_length,
						g.playway,
						g.goods_type_id,
						price.price
					FROM
						goods g
						LEFT JOIN goods_picture gp ON  g.id = gp.goods_id
						LEFT JOIN goods_price price on g.id=price.goods_id
					WHERE
						g.`status` = 3 
						AND g.is_display =2">
		
          <!--以下的字段column属性对应数据库中字段名称,name是对应solr这边配置的名称,注意id,默认名称即为id,表示solr这边一条数据的主键,以下三个是要在solr这边中建立索引的字段,比如数据库中有10个字段,我只需要为3个字段建立索引关系,那这里就写3个就好了
          如果数据库中的主键不是id,比如是objectId,那上边的query需要为它起一个别名为id即可-->
          <field column="id"  name="id" />
          <!-- 商品名称  -->
		  <field column="name"  name="name" />
		  <!-- 课时时长  -->
          <field column="lesson_length" name="lesson_length" />
		  <!-- 商品图片  -->
		  <field column="imgUrl" name="imgUrl" />  
		  <!-- 商品介绍  -->
		  <field column="goods_introduce" name="goods_introduce" />
		  <!-- 机构ID  -->
		  <field column="org_id" name="org_id" />
		  <!-- 商品形式  -->
		  <field column="goods_ways" name="goods_ways" />
		  <!-- 商品中的视频总时长  -->
		  <field column="video_length" name="video_length" />
		  <!-- 课件形式   -->
		  <field column="playway" name="playway" />
		  <!-- 培训项目ID  -->
		  <field column="goods_type_id" name="goods_type_id" />
		  <!-- 山坡滚价格  -->
		  <field column="price" name="price" />
		  <!-- 限时优惠列表 -->
		  <entity name="discountPrice" query="select discount_price,stime,etime from goods_discount where goods_id = ${goods.id} and device = 1 and `status` = 1 and etime &gt; now() order by stime asc">
                <!--  优惠价  -->
				<field name="discount_price" column="discount_price" />
				<!--  限时优惠开始时间  -->
				<field name="stime" column="stime" dateTimeFormat="yyyy-MM-dd HH:mm:ss" />
				<!-- 显示优惠结束时间  -->
				<field name="etime" column="etime" dateTimeFormat="yyyy-MM-dd HH:mm:ss" />
            </entity>
		  <!-- 小节数/时长列表 -->
		  <entity name="xiaoJieCount" query="select count(1) xiaoJieCount,date_format(date_sub(from_unixtime(SUM(IFNULL(g.attachmenttime,0))), INTERVAL 8 HOUR), '%H:%i:%s') time from  
															`dpt_e-commerce`.goods_product gp
															LEFT JOIN dpt_product.db_product p on  lpad(gp.PRODUCTID,12,0)=SUBSTR(p.childIndex FROM 1 FOR 12)   AND p.typeId=2
															LEFT JOIN   dpt_product.courseknowledge e on p.referenceId=e.courseid and e.delflag=0
															LEFT JOIN  dpt_product.knowledge f on e.knowid=f.knowid
															LEFT JOIN  dpt_resource.resource g on f.courseresourceid=g.id
															where gp.goodsid =${goods.id}">
				<!-- 小节  -->
                <field name="xiaoJieCounts" column="xiaoJieCounts" />
				<!-- 时长  -->
				<field name="time" column="time" />
            </entity>
			<!-- 购买人数 -->
		  <entity name="buycount" query="select (buycount+buyCountFake) buycount from goods_useroperaterecord where goodsid=${goods.id}">
			  <field name="buycounts" column="buycounts" />
		  </entity>
    </entity>
  </document>  
</dataConfig>  

 

7、同目录下的solrconfig.xml 文件并打开,在里边加入如下内容,放置的位置你可以放到其他requestHandler
旁边
<requestHandler name="/dataimport" class="solr.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler>
8、再找到同目录下的managed-schema 文件并打开,在里边加入如下内容,需要索引的字段相关配置

<fieldType name ="text_ik" class ="solr.TextField">
              <analyzer type ="index" isMaxWordLength ="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
              <analyzer type ="query" isMaxWordLength ="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
       </fieldType>
<field name="name" type="text_ik" indexed="true" stored="true"/>
<field name="lesson_length" type="pint" indexed="false" stored="true"/>
<field name="imgUrl" type="string" indexed="false" stored="true"/>
<field name="org_id" type="pint" indexed="true" stored="true"/>
<field name="goods_ways" type="pint" indexed="true" stored="true"/>
<field name="video_length" type="pint" indexed="false" stored="true"/>
<field name="playway" type="pint" indexed="true" stored="true"/>
<field name="type" type="pint" indexed="true" stored="true"/>
<field name="price" type="pdouble" indexed="false" stored="true"/>
<field name="discount_price" type="pdoubles" indexed="false" stored="true" multiValued="true"/>
<field name="stime" type="pdates" indexed="false" stored="true" multiValued="true"/>
<field name="etime" type="pdates" indexed="false" stored="true" multiValued="true"/>
<field name="xiaoJieCounts" type="pint" indexed="false" stored="true"/>
<field name="time" type="string" indexed="false" stored="true"/>
<field name="buycounts" type="pint" indexed="false" stored="true"/>

9、操作过程中报错,请查看日志docker logs -f -t --since="2017-05-31" --tail=10 my_solr
10、执行导入
11、查询验证

 

12、solr清除所有索引

<delete><query>*:*</query></delete><commit/> 

 

 

Solr基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎 课程特点毕业后接触的第一个中间件就是Solr,在工作中用处广泛,为了便于大家快速掌握该技能,开始录制相关课程,该专栏特点如下:1.采用Solr最新版本视频录制,全网最新课程(Solr8.1于2019年5月16日发布)2.技能点全网最全,会结合工作经验,项目中用到的技能点都会有所涉及,更新章节比较全面3.适用范围广,从零基础到高级架构以及分布式集群都涵盖,适用初级、高级、项目实战等多个层次开发者4.多种维度辅助学习,采用独立solr粉丝群辅助教学,学员问题会及时得到解决,程序员突破圈 打卡制度,督促学员学习关注后再购买、 关注后再购买、 关注后再购买课程能得到什么1.快速学习到最新版本的全文检索技术,从视频、文章、圈子、粉丝交流等快速促进学习2.通过该技术,获得面试进阶指导3.结交人脉(庞大的粉丝群)..End初期学员100人,价格不会太高,也是为了帮助更多的开发者但是个人精力有限,所以限制条件如下1.求知欲强,有想向技术更深一层了解的2.乐于交流,喜欢探讨技术者3.学习惰性者慎入,购买后会督促大家学习,购买不是目的,学习到该技能才是该专栏的主要目的正式进入学习状态了吗,专栏群见。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值