docker安装solr搜索引擎
关于solr
Solr是一个独立的企业级搜索应用服务器,solr是以lucene为内核开发的企业级搜索应用 应用程序可以通过http请求方式来提交索引,查询索引,提供了比lucene更丰富的查询语言,是一个高性能,高可用环境全文搜索引擎
但是要玩转solr还先需要先了解倒排索引和分词器
什么是倒排索引?
在进行索引之前首先要进行分词,对于分词就进行一个简单的介绍
分词指的是将一个汉字序列切分成一个个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,不过在词这一层上,中文比之英文要复杂得多、困难得多。
常用的IK分词器,庖丁解牛分词器。。
下面介绍倒排索引:
文章表
文章id | 文章标题 | 文章内容 |
---|---|---|
1 | 世界安全保护协会 | 我们是一个保护世界的组织 |
2 | 世界卫生清洁协会 | 清理,清洁,干净,卫生 |
倒排索引:
索引 | 文章id |
---|---|
世界 | 1,2 |
安全 | 1 |
保护 | 1 |
协会 | 1,2 |
卫生 | 2 |
清洁 | 2 |
意思为如果查询世界的话,会查出文章id1和2的文章内容
查询安全的话,只查出文章id为1的文章内容
俩者都是比较的粗浅的介绍了一下,不过了解一点点倒排和分词对solr也会有帮助。
如要更详细的了解的话如下:
这是关于倒排索引和分词器的一些介绍转载于博客园
https://www.cnblogs.com/zlslch/p/6440373.html
Solr支持使用json格式提交数据。
json格式:[] 代表数组{} 代表对象(文档 document)键值对 代表属性{id:1hobby:["篮球","上厕所"]tt:{ } }
用数据库表结构来展示:
文章表
文章id | 文章标题 | 文章内容 |
---|---|---|
1 | 一个团的兵力来干我 | 在xxxx年xx月xx日某男子被一个团的兵给干了 |
2 | p某减肥成功发出猪叫声 | p某减肥成功这你也信,发出猪叫到是真的 |
模拟json
[{id:1,title:"一个团的兵力来干我",content:"在xxxx年xx月xx日某男子被一个团的兵给干了"},{id:2,title:" p某减肥成功发出猪叫声",content:"p某减肥成功这你也信,发出猪叫到是真的"}]
核(core):是用于存储json格式的数据,等价于mysql中数据库的概念
文档:一个json对象就是一个文档 相同属性的json数组集合就是一个表
安装solr
了解之后安装solr
点击 进入docker官网查看solr版本和安装信息
在这些版本里我选择的是5.5.5版本因为官方文档只更新到5.5.5版本
打开虚拟机输入命令(注意版本):
查看solr版本
docker search solr
下载solr(注意版本)
docker pull solr:5.5.5
下载镜像成功然后进入下一步
安装solr
`在页面可以看到该命令,该命令使用的是端口映射但是我要使用仅主机模式所以输入命令
docker run --name my_solr -idt --net host solr:5.5.5
完成后输入查看容器命令:
docker ps -a
得到下图表示已经在后台运行
它会默认开辟一个8983的端口,再输入检测端口命令netstat -aon | grep 8983
也可以到主机的黑窗口cmd输入telnet 虚拟机ip地址 8983
查询
如果没有该命令输入yum -y install net-tools
安装诊断软件
查询成功会出现该图 失败无数据表示安装失败
创建core:docker exec -it --user=solr my_solr bin/solr create_core -c mycore
命令解析:--user=solr
用默认启动容器自动创建solr用户执行命令
-c mycore
-c=命名,mycore=名称
创建成功后出现一段代码:
Copying configuration to new core instance directory:/opt/solr/server/solr/mycore ==== 插入的数据所存储的路径(核(core)路径)Creating new core 'mycore' using command:
http://localhost:8983/solr/admin/cores?action=CREATE&name=mycore&instanceDir=mycore{core核的状态"responseHeader":{"status":0, === 容器里为空"QTime":2940}, === 用多少时间创建成功毫秒单位"core":"mycore"} === core核的名字
也可以用这种http网页创建(比较底层的东西)
http://localhost:8983/solr/admin/cores?action=CREATE&name=mycore&instanceDir=mycore
然后就可以用网页访问了 !!!注意关闭防火墙systemctl stop firewalld (当前回话下 关闭防火墙)
!!!
虚拟机ip地址:8983/solr/#/
如果访问成功会跳转到这个页面 失败查看防火墙是否关闭
网页状态图
在这里插入图片描述
查询的页面
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 设置参数为 路径,路径来设置需要搜索的核
现在暂时是全文匹配查询所以要做分词
常用的IK分词器,庖丁解牛分词器。
Ik分词器不支持solr5.5.5版本之后的版本包括5.5.5版本 所以要编译Ik分词器
在任意项目中 使用maven 引用lucene5 和ik
<dependencies><dependency><groupId>com.janeluo</groupId><artifactId>ikanalyzer</artifactId><version>2012_u6</version></dependency></dependencies>
然后搜索IKAnalyzer打开 自己创建一个同样的包和同样的文件
进入IKAnalyzer 包里重写createComponents方法 把in删除
然后进入IKTokenizer 方法照IKAnalyzer 自己写一个一样的包和类,删除俩个in相关的
依赖重写编译一下
<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><dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-core</artifactId> <version>5.5.5</version></dependency><dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-queryparser</artifactId> <version>5.5.5</version></dependency><dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-analyzers-common</artifactId> <version>5.5.5</version></dependency> </dependencies>
大概意思是剔除4.7版本的,移植5.5.5版本的配置
用压缩包工具打开
用压缩包工具打开,找到自己编译的俩个ik分词器class文件,然后替换这个俩个文件, 注意 是自己已经编译好的俩个class文件
配置solr中文分词器
Solr本身不支持中文分词,所以要把我们编译的包上传到solr上
在虚拟机上opt目录创建一个目录
cd /opt mkdir ik
然后使用rz软件上传
( yum 安装文件上传工具
yum search sz
yum install lrzsz
rz 就是选择文件上传到linux的工作目录)
进入solr容器 用find . -name lib命令搜索当前目录下所有lib包得出
找到箭头路径然后进入该文件,里面就是之前打开的网页页面目录,使用的是weblogic部署,把路径复制下来
退出容器到之前cp下来的文件路径里把ik传入到solr容器复制路径里
docker cp ./ikanalyzer-2012_u6.jar my_solr:/opt/solr/server/solr-webapp/webapp/WEB-INF/libcp成功后重启容器
docker stop my_solr
docker start my_solr
进入solr容器找到之前的核(core)路径进去之后找到conf文件夹并进入,ls 显示当前路径的文件 可以看到managed-schema文件
core/conf目录下的两个配置文件非常重要
managed-schema 主要用于配置 可以提交到该core的所有field定义,field的类型定义,唯一标识符等
定义字段 _version_ 类型为long indexed="true" 会进行分词索引 stored="true"表示存储到磁盘
<field name="_version_" type="long" indexed="true" stored="true"/>
定义字段 id required="true" 表示所有的document必须添加id字段 multiValued="false" 表示是否是多值字段
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
定义动态字段 所以_i结尾的字段都可以写入到当前的core
<dynamicField name="*_i" type="int" indexed="true" stored="true"/>
定义唯一标识符的字段
<uniqueKey>id</uniqueKey>
定义字段类型的别名
<fieldType name="string" class="solr.StrField" sortMissingLast="true" />
solrconfig.xml 主要用于配置solor的主要配置信息 比如lucene版本 缓存 数据目录 请求路径映射 等
表示lucene版本
<luceneMatchVersion>5.5.4</luceneMatchVersion>
表示数据目录 默认是data目录
<dataDir>${solr.data.dir:}</dataDir>
自动提交配置
<autoCommit> 当超过15000ms后自动提交所有数据<maxTime>${solr.autoCommit.maxTime:15000}</maxTime> 是否马上就可以查询到<openSearcher>false</openSearcher>
</autoCommit>
表示当路径为 /select时查询所有的数据
<requestHandler name="/select" class="solr.SearchHandler"><!-- default values for query parameters can be specified, thesewill be overridden by parameters in the request--><lst name="defaults"><str name="echoParams">explicit</str><int name="rows">10</int></lst>
</requestHandler>
退出容器,cp一份managed-schema出来
docker cp my_solr:/opt/solr/server/solr/mycore/conf/managed-schema ./
打开文件查看:
箭头指向为主键id,当在新增数据的时候如没有设置id值那么默认会随机赋一个随机值
如要修改主键只需要修改该文件的id即可
将solrhome下 配置文件managed-schema 添加一个字段类型 使用ik分词器
<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>
然后将对应需要进行中文分词的字段使用 text_ik该字段类型 如
<dynamicField name="*_s" type="text_ik" indexed="true" stored="true" />
之后再cp回去
docker cp ./managed-schema my_solr:/opt/solr/server/solr/mycore/conf 重启一下容器docker stop my_solrdocker start my_solr
到页面插入json
{"id":"3","title_ik":"我爱中国","content_ik":"中国牛逼的一批"}
注意如果页面登录不上那么就是jar包出错了
输入查询
title_ik:我 ON title_ik:中国
这样solr中文分词配置就做好啦!
docker安装solr搜索引擎相关推荐
- docker 安装 solr搜索引擎
关于solr Solr是一个独立的企业级搜索应用服务器,solr是以lucene为内核开发的企业级搜索应用 应用程序可以通过http请求方式来提交索引,查询索引,提供了比lucene更丰富的查询语言, ...
- Docker 安装solr 配置IK分词,说明
参考: docker 安装solr8.4.0 配置IK分词 一.版本号问题 在拉取或创建solr容器的时候,要带上版本号,否则会拉取到一个具有不稳定性的.可能会引发错误和问题的TAG为latest的版 ...
- docker - 安装searx搜索引擎
非docker的可以参考这篇文章安装使用searx搭建自己的搜索引擎 一.手动安装 1.进入镜像内 使用以下命令 docker exec -it ubuntu /bin/bash 2.安装git 如果 ...
- docker 安装使用 solr
目录 1.安装solr 7.5 2.启动solr服务 2.1 创建一个solr库 3.配置IK分词器 4.docker 配置solr登录密码 1.安装solr 7.5 docker solr 官网:h ...
- 【全】在 Docker 的Solr容器中安装 IK 中文分词器
[原创文章,转载请标明出处] 这些坑我已经帮你踩过了: 现在大家能够在网上(需要禾斗学上网)下载的IK分词器版本已经非常老了,而Solr更新还是非常快的,所以会出现版本不兼容的问题,不然即使成功装上了 ...
- Solr搜索引擎 — SolrCloud安装和集群配置
搞定了一切的一切之后下一步就是正式使用了,但是之前介绍的都是在单台服务器上进行的部署,如果在生产环境出现了单台故障怎么办呢?提供稳定性和性能的最直观的方式就是集群,solr官方提供了cloud的集群方 ...
- docker安装es+mac安装Kibana工具+es查询语法笔记
一.docker安装es 1.下载镜像 docker pull elasticsearch:7.9.0 下载完后,查看镜像 docker images 2.启动镜像 docker network ...
- Docker安装部署ELK教程 (Elasticsearch+Kibana+Logstash+Filebeat)
ELK是由 Elasticsearch.Logstash和Kibana 三部分组件组成. Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副 ...
- docker安装elasticsearch_Docker 安装 ElasticSearch
一.什么是 Elastic Stack Elastic Stack 如果你没有听过,那么 ELK 一定听过.ELK 是三款软件的简称,分别是 Elasticsearch.Logstash.Kibana ...
- ElasticSearch,docker 安装ElasticSearch,Springboot 使用 ElasticSearch JavaAPI
什么是 ElasticSearch ? 数据库查询存在的问题: 性能低:使用模糊查询,左边有通配符,不会走索引,会全表扫描,性能低 关键字模糊查询比较麻烦 ElasticSearch概念 • Elas ...
最新文章
- rtems线程管理与调度(一)
- 权限提升 T1548.002 绕过UAC
- 数据库中间件支持数据库集群方案
- GRE核心词汇助记与精练-List10感觉,感情
- Java的运行机制分析!
- 微信小程序隐藏滚动条的方法,以及禁止上下滑动的方法
- Shadow Properties之美(二)【Microsoft Entity Framework Core随笔】
- css scale 缩放基准点
- SpringBoot 自带工具类~AopUtils
- python编码规范简单总结
- WAP调用微信支付https://pay.weixin.qq.com/wiki/doc/api/wap.php?chapter=15_1
- java接口自动化测试框架搭建
- macos可以升级到指定版本吗_如何升级mac系统版本?
- vue element-ui table表格自定义纵向合计横向合计
- 钱诚11.29黄金白银TD美盘走势分析及期货原油操作建议
- 2021东三省数学建模竞赛a题
- pubmed文献批量化下载器
- 苹果手机来电归属地_工信部 : 暂未出台取消手机号码归属地政策!
- ContentTypes
- php 银行卡归属,银行卡归属地查询
热门文章
- linux中进程unit是什么意思,linux---systemd进程
- Contrastive Search Decoding——一种对比搜索解码文本生成算法
- css3 模拟fadein,CSS3 transition fadein with display:none
- 2012年09月12日-13日
- LaTex中让页码从正文开始编号
- 沉浸式体验,文化与科技融合创新的新业态
- Redis Cluster集群原理+三主三从交叉复制实战+故障切换(十)
- MIT线性代数笔记十四讲 正交向量与正交子空间
- Control Cotrol Name Confusing
- Wipe In and Wipe Out 抹进、抹出(动画显示、动画隐藏)(展开、折叠)(拉下、收起)