搜索引擎 solr(docker版)

什么是solr:

solr企业级搜索引擎产品,是将整个索引操作功能封装好了的搜索引擎系统
solr就是在lucene工具包的基础之上进行了封装,而且是以web服务的形式对外提供索引功能,
应用程序可以通过http请求方式来提交索引,查询索引,提供了比lucene更丰富的查询语言,是
一个高性能,高可用环境全文搜索引擎。

solr是怎样去全文搜索的(如何找关键字)

首先实现全文关键字搜索,要用到分词器(内嵌的都没有中文分词器);
中文分词器有 —— IK分词器,庖丁解牛分词器。
他会把查询信息分为多个有意义的词 进行查询

solr是用的是什么索引

solr用的是倒排索引
在语句储存时会先对需要你做索引的类通过分词器生成索引
例:

id文章名文章内容
1机会是留给有准备的人只有不断寻找机会的人才能把握机会…
2坚持不能拼爹,只能拼命…
3坚持下去当坚持不下去的时候,默默自己的胸告诉自己你是个男孩子…
4坚持住机会总会来的不管晚上睡得多早,早上起得多晚,在去上班的路上一上车肯定就会想睡觉。但是我发现自从坚持早起和运动之后就真的不会困…

如果根据文章名来分词做索引:

索引id
机会1,4
准备1
1
坚持2,3,4
留给1
来的4

查询的时候会根据索引来找到文章ID 通过ID来找文章!!!

前面说到solr是在lucene工具包的基础之上进行了封装那么什么是lucene
我可以理解为lucene是一个将text数据类型,分词建立索引的一个库,但是不适合企业级使用,因为
企业级考虑高可用问题。所以我使用了solr,solr是一个企业级应用的搜索引擎。
支持使用json格式提交数据。
核(core): 是用于存储json格式的数据,等价于mysql中数据库的概念
文档:一个json对象就是一个文档 相同属性的json数组集合就是一个表
[] 代表数组
{} 对象(文档 document) 相当于数据库中的一行数据
键值对 属性

怎样装装 solr

下载solr的docker容器:
指定版本号:不要用6以上的版本

docker pull solr:5.5.5

安装solr

docker run --name my_solr -idt --net host solr:5.5.5

检测端口是否开启:

   netstat -aon | grep 8983

在这里插入图片描述

创建核(core)

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

注:
exec 执行命令
–user= solr ——指的是使用 solr 这个用户创建
my_solr ——在my_solr这个容器内执行
bin/solr create_core ——执行的命令
-c —— 给core指定名字

创建完成后提示:
在这里插入图片描述
/opt/solr/server/solr/mycore ——插入的json数据存在那个位置
“status”:0 —— 创建成功
“QTime”:2697 ——创建使用的时间
“core”:“mycore” ——创建核的名字
http://localhost:8983/solr/admin/cores?action=CREATE&name=mycore&instanceDir=mycore
我们可以使用http 来创建 指定ip 指定核的name

现在我就可以通过浏览器去访问了
http://192.168.162.131:8983/solr

在这里插入图片描述
查询的参数列表

q表示查询的条件 字段名:值的格式 多个条件组合查询可以使用 字段:字段值 && 字段1:字段值1 也可以使用大写的AND或者OR

fq表示filter query 过滤条件 和q是and的关系支持各种逻辑运算符 (参考https://cwiki.apache.org/confluence/display/solr/The+Standard+Query+Parser)

sort表示排序 的字段 字段名 asc|desc

start 表示从第几行开始 rows表示查询的总行数

fl表示查询显示的列 比如只需要查询 name_s,sex_i 这两列 使用,隔开

df表示默认的查询字段 一般不设置

Raw Query Parameters表示原始查询字段 可以使用 start=0&rows=10这种url的方式传入参数

wt(write type)表示写入的格式 可以使用json和xml

shards 多核同时搜索 solrhome拷贝mycore为mycore1 管理平台添加core 设置参数为 路径,路径来设置需要搜索的核

在这里插入图片描述

怎么实现中文分词器

默认solr 没有使用中文分词器 所有搜索的词 都是整个句子就是一个词 搜索时 将单词全部写入才能搜索或者使用* 需要配置中文分词器

目前比较好用的分词器 是IK 2012年停更 只支持到 Lucene4.7 所有 solr5.5 需要lucene5支持 需要修改部分源码来支持solr5.5

找到 IKAnalyzer类 需要重写 protected TokenStreamComponents createComponents(String fieldName) 方法

找到 IKTokenizer类 需要重写构造方法 public IKTokenizer(Reader in, boolean useSmart) 为 public IKTokenizer(boolean useSmart) {
在任意项目中 使用maven 引用lucene5 和ik
步骤的代码实现:
新建maven项目:加入依赖:

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>cn.pjj</groupId>
	<artifactId>Ik</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.14.RELEASE</version>
	</parent>
	<dependencies>
		<dependency>
			<groupId>com.janeluo</groupId>
			<artifactId>ikanalyzer</artifactId>
			<version>2012_u6</version>
		</dependency>
	</dependencies>
</project>

找到IKAnalyzer 并且重写 —
在这里插入图片描述
剔除其他依赖只留ikanalyzer

<dependencies>
		<dependency>
			<groupId>com.janeluo</groupId>
			<artifactId>ikanalyzer</artifactId>
			<version>2012_u6</version>
			<!-- 剔除依赖 -->
			<exclusions>
				<exclusion>
				    <groupId>org.apache.lucene</groupId>
				    <artifactId>lucene-core</artifactId>
				</exclusion>
				<exclusion>
				    <groupId>org.apache.lucene</groupId>
				    <artifactId>lucene-queryparser</artifactId>
				</exclusion>
				<exclusion>
				    <groupId>org.apache.lucene</groupId>
				    <artifactId>lucene-analyzers-common</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

在这里插入图片描述
手动导入剔除的jar 5.5.5版本的
完成之后之前重写的 IKAnalyzer 会报错 删除 final Reader in 以及构造方法的in
在这里插入图片描述

这个时候重写要IKTokenizer 会发现 IKTokenizer也报错 需要删除 super (in) 以及Reader in
在这里插入图片描述
再将你的ikanalyzer 的jar包从maven仓库中拿出来、

将你改好的类的class文件复制进去就OK了
在这里插入图片描述

在这里插入图片描述
这个时候 jar包就打好了!

怎么样将分词器的jar包配进solr中:

solr是个war包 部署在weblogic上的war包那么就可以把jar包丢在容器中的lib目录里
首先要将jar包放入linux中
再找到容器 lib所在的目录
将jar包 copy到容器中
在这里插入图片描述
jar包导入 ——/opt/solr/server/solr-webapp/webapp/WEB-INF/lib (全路径)

docker cp  ./ikanalyzer-2012_u6.jar  my_solr:/opt/solr/server/solr-webapp/webapp/WEB-INF/lib

怎么样是中分词器生效

去配置文件中指定需要中文分词器的类型
进入容器core对应的目录
cd server/solr/mycore/conf/
找到文件managed-schema
在这里插入图片描述
copy出来编辑

	docker cp my_solr:/opt/solr/server/solr/mycore/conf/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>
    <dynamicField name="*_ik" type="text_ik"  indexed="true"  stored="true"/>

如图:
在这里插入图片描述
停止solr服务
将文件copy回去

docker cp ./managed-schema  my_solr:/opt/solr/server/solr/mycore/conf/managed-schema  

重启solr服务
测试:
在这里插入图片描述

数据库数据迁移到solr

进入solr所在容器 搜索 dataimport相关jar包

find / -name *import*.jar

在这里插入图片描述
将这两个jar包拷贝到 solr启动应用 webapp/lib目录下

 cp /opt/solr/dist/solr-dataimporthandler-5.5.5.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib
  cp /opt/solr/dist/solr-dataimporthandler-extras-5.5.5.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib

下载mysql的驱动包 并copy到webapp/lib目录下

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

新建配置连接的数据库以及查询的sql语句 本文用的是data-c.xml(XXX.xml文件)

<?xml version="1.0" encoding="UTF-8"?>  
<dataConfig>  
    <dataSource name="source1" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.0.16:3306/school" user="root" password="ps123456" batchSize="-1" />  
<document>  
          <entity name="student" pk="id"  dataSource="source1"   
                query="select * from  student" >
            <field column="id" name="id"/>  
            <field column="name" name="name_ik"/>
			<field column="age" name="age_i"/>
			<field column="sex" name="sex_s"/>
			<field column="phone" name="phone_s"/>
			<field column="email" name="email_s"/>
			<field column="classid" name="classid_s"/>
        </entity>
</document>  
</dataConfig> 

注:

column=“age” :指定数据库中的列
name=“age_i” :其中age_i 指的是键名 _i 为int值
(这里使用的动态类型并且一定要指定类型 在文件managed-schema中有指定各种类型也可以自己指定)
**将配置连接文件copy到/opt/solr/server/solr/mycore/conf目录下 **

docker cp ./solrconfig.xml my_solr:/opt/solr/server/solr/mycore/conf

将配置文件solrconfig.xml copy出来

docker cp my_solr:/opt/solr/server/solr/mycore/conf/solrconfig.xml .

并编辑指定数据库配置连接文件名我的配置连接文件名是data-c.xml

 <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> 
     <lst name="defaults">    
  	<str name="config">data-c.xml</str>  
   </lst> 
 </requestHandler>

将solrconfig.xml 文件copy到/opt/solr/server/solr/mycore/conf目录下

docker cp ./solrconfig.xml my_solr:/opt/solr/server/solr/mycore/conf

重启容器solr
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Solr是一个强大的开源搜索平台,可以用于构建高性能、可扩展的搜索应用程序。安装Solr可以通过Docker进行,以下是安装Solr的教程: 1. 首先,使用docker命令搜索可用的Solr镜像本,可以通过以下命令查看可用的Solr本: ``` docker search solr ``` 2. 选择一个适合的Solr本,假设我们选择的本是8.11.1,使用以下命令拉取对应本的Solr镜像: ``` docker pull solr:8.11.1 ``` 3. 准备一个包含Dockerfile和docker-compose.yml脚本的文件夹,用于构建含中文分词器的新的Solr镜像。确保文件夹中包含了所需的中文分词器ik-analyzer-8.5.0.jar以及所有扩展词和停用词相关的配置文件。 4. 在文件夹中创建docker-compose.yml文件,内容如下: ``` version: '3' services: solr: image: solr:8.11.1 ports: - 8983:8983 volumes: - ./solr/conf:/opt/solr/server/solr/mycores/conf - ./solr/data:/opt/solr/server/solr/mycores/data - ./solr/logs:/opt/solr/server/logs environment: - SOLR_CORE=mycore command: solr-precreate mycore ``` 5. 在文件夹中创建Dockerfile文件,内容如下: ``` FROM solr:8.11.1 COPY ./ik-analyzer-8.5.0.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib/ COPY ./ext_dict/* /opt/solr/server/solr-webapp/webapp/WEB-INF/classes/ext_dict/ COPY ./stopwords/* /opt/solr/server/solr-webapp/webapp/WEB-INF/classes/stopwords/ ``` 6. 打开终端,进入到保存有Dockerfile和docker-compose.yml的文件夹,执行以下命令构建并启动Solr容器: ``` docker-compose up -d ``` 7. 等待一段时间,Solr容器将会启动并监听端口8983。访问http://localhost:8983即可进入Solr的管理界面。 以上就是使用Docker安装Solr的教程。如果有任何疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值