关于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搜索引擎相关推荐

  1. docker 安装 solr搜索引擎

    关于solr Solr是一个独立的企业级搜索应用服务器,solr是以lucene为内核开发的企业级搜索应用 应用程序可以通过http请求方式来提交索引,查询索引,提供了比lucene更丰富的查询语言, ...

  2. Docker 安装solr 配置IK分词,说明

    参考: docker 安装solr8.4.0 配置IK分词 一.版本号问题 在拉取或创建solr容器的时候,要带上版本号,否则会拉取到一个具有不稳定性的.可能会引发错误和问题的TAG为latest的版 ...

  3. docker - 安装searx搜索引擎

    非docker的可以参考这篇文章安装使用searx搭建自己的搜索引擎 一.手动安装 1.进入镜像内 使用以下命令 docker exec -it ubuntu /bin/bash 2.安装git 如果 ...

  4. docker 安装使用 solr

    目录 1.安装solr 7.5 2.启动solr服务 2.1 创建一个solr库 3.配置IK分词器 4.docker 配置solr登录密码 1.安装solr 7.5 docker solr 官网:h ...

  5. 【全】在 Docker 的Solr容器中安装 IK 中文分词器

    [原创文章,转载请标明出处] 这些坑我已经帮你踩过了: 现在大家能够在网上(需要禾斗学上网)下载的IK分词器版本已经非常老了,而Solr更新还是非常快的,所以会出现版本不兼容的问题,不然即使成功装上了 ...

  6. Solr搜索引擎 — SolrCloud安装和集群配置

    搞定了一切的一切之后下一步就是正式使用了,但是之前介绍的都是在单台服务器上进行的部署,如果在生产环境出现了单台故障怎么办呢?提供稳定性和性能的最直观的方式就是集群,solr官方提供了cloud的集群方 ...

  7. docker安装es+mac安装Kibana工具+es查询语法笔记

    一.docker安装es 1.下载镜像 docker pull elasticsearch:7.9.0 下载完后,查看镜像 docker images ​​ 2.启动镜像 docker network ...

  8. Docker安装部署ELK教程 (Elasticsearch+Kibana+Logstash+Filebeat)

    ELK是由 Elasticsearch.Logstash和Kibana 三部分组件组成. Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副 ...

  9. docker安装elasticsearch_Docker 安装 ElasticSearch

    一.什么是 Elastic Stack Elastic Stack 如果你没有听过,那么 ELK 一定听过.ELK 是三款软件的简称,分别是 Elasticsearch.Logstash.Kibana ...

  10. ElasticSearch,docker 安装ElasticSearch,Springboot 使用 ElasticSearch JavaAPI

    什么是 ElasticSearch ? 数据库查询存在的问题: 性能低:使用模糊查询,左边有通配符,不会走索引,会全表扫描,性能低 关键字模糊查询比较麻烦 ElasticSearch概念 • Elas ...

最新文章

  1. rtems线程管理与调度(一)
  2. 权限提升 T1548.002 绕过UAC
  3. 数据库中间件支持数据库集群方案
  4. GRE核心词汇助记与精练-List10感觉,感情
  5. Java的运行机制分析!
  6. 微信小程序隐藏滚动条的方法,以及禁止上下滑动的方法
  7. Shadow Properties之美(二)【Microsoft Entity Framework Core随笔】
  8. css scale 缩放基准点
  9. SpringBoot 自带工具类~AopUtils
  10. python编码规范简单总结
  11. WAP调用微信支付https://pay.weixin.qq.com/wiki/doc/api/wap.php?chapter=15_1
  12. java接口自动化测试框架搭建
  13. macos可以升级到指定版本吗_如何升级mac系统版本?
  14. vue element-ui table表格自定义纵向合计横向合计
  15. 钱诚11.29黄金白银TD美盘走势分析及期货原油操作建议
  16. 2021东三省数学建模竞赛a题
  17. pubmed文献批量化下载器
  18. 苹果手机来电归属地_工信部 : 暂未出台取消手机号码归属地政策!
  19. ContentTypes
  20. php 银行卡归属,银行卡归属地查询

热门文章

  1. linux中进程unit是什么意思,linux---systemd进程
  2. Contrastive Search Decoding——一种对比搜索解码文本生成算法
  3. css3 模拟fadein,CSS3 transition fadein with display:none
  4. 2012年09月12日-13日
  5. LaTex中让页码从正文开始编号
  6. 沉浸式体验,文化与科技融合创新的新业态
  7. Redis Cluster集群原理+三主三从交叉复制实战+故障切换(十)
  8. MIT线性代数笔记十四讲 正交向量与正交子空间
  9. Control Cotrol Name Confusing
  10. Wipe In and Wipe Out 抹进、抹出(动画显示、动画隐藏)(展开、折叠)(拉下、收起)