0.前言
0.1.es的框架
对es进行的一层封装https://ci.bbossgroups.com/#/README?id=elasticsearch-demo
更便于操作,例如数据库记录更新,es同步更新
0.2.es和mysql数据同步
https://blog.csdn.net/RuiKe1400360107/article/details/104270421
1.初始ElasticSearch
1.0.引入
- 搜索服务器,服务器就是一个软件,能够对外提供服务。
- 搜索引擎网站
- 几乎所有的应用程序中都会提供搜索相关的功能,比如电商网站搜索商品,音乐网站搜索歌曲
- 搜索和查询是一回事,但是又不一样
- 查询是select * from xxx 这个是针对于关系型数据库的查询方式
- es做搜索和关系型数据库做查询有啥不一样?
- 搜索引擎网站、电商网站搜索、音乐网站搜索是否是用关系型数据库做查询呢?不是。为啥不用关系型数据库做查询呢
1.1.数据库查询存在的问题
1.1.1.问题1
- 模糊查询左边加%,title这一列上的索引将失效。索引失效意味着查询会一条一条比对,性能低。
1.1.2.问题2
- 搜索既想包含华为又想包含手机的信息,华为或者手机有一个词包含就要信息
- %华为手机%这种搜索不能满足条件
1.2.倒排索引
- 文本怎么拆分,单独的一个字或者相邻的两个字、三个字...能组成词的
-
value存储的是文本内容,会越来越庞大,所以需要做简单的优化。value放诗的唯一标识比如诗名。通过唯一标识去找诗的内容就很快
1.3.ElasticSearch数据的存储和搜索原理
1.3.1.存储
1.3.2.搜索
- 搜索手机关键字,查词条,匹配之后找value,再去把数据找出来。即使数据库有1亿条记录,词条可没有这么多记录。
1.4.ElasticSearch概念
- Lucene是一套搜索api,基于Lucene写代码也是可以的,但是非常麻烦,需要对搜索的各个细节了如指掌。比如分词,es帮你自动完成,Lucene需要自己写代码分词。es相当于是对Lucene的封装。
- Lucene有两个实现,一个solr,一个是es,solr是先出来的产品,es是后出来的产品,es性能高一点,特别是做实时搜索(一边存储数据,一边搜索)。
- 海量数据查询,一般用于互联网项目,数据量大,因为引入es还是比较复杂的,传统项目如果数据量不大不建议使用。
-
es和mysql区别
2.安装ElasticSearch
2.1.es安装
- 上传到linux put f:/elasticsearch-7.4.0-linux-x86_64.tar.gz
- 解压 tar -zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz -C /opt
- es解压后的目录包含jdk
- 修改配置vim /opt/elasticsearch-7.4.0/config/elasticsearch.yml
-
shift+g切换到最后
- 卸载linux已经安装的jdk,卸载完后重启服务器
- 在bin目录下,执行./elasticsearch(出了两个错误)
- OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.解决vim jvm.options,-XX:+UseConcMarkSweepGC 改为 -XX:+UseG1GC
- os::commit_memory(0x00000000c0000000, 1073741824, 0) failed; error='Not enough space' 解决vim jvm.options -Xms512m -Xmx512m最低要求
-
该错误是正常的,can not run elasticsearch as root
useradd lines
-
授权
-
为新用户设置相关信息
-
启动
-
访问
2.2.Kibana安装(官方提供的客户端操作工具)
- 上传put f:/kibana-7.4.0-linux-x86_64.tar.gz
- 解压tar -zxvf kibana-7.4.0-linux-x86_64.tar.gz -C /opt(由于日志信息很多,可能会报内存溢出异常)
-
配置vim /opt/kibana-7.4.0-linux-x86_64/config/kibana.yml
此处es和kibana在一台机器上,所以elasticsearch.hosts: ["http://127.0.0.1:9200"]的ip是127.0.0.1
-
启动 直接启动报错
./kibana --allow-root
-
修改内存(可以不修改)
- 同时运行es和kibana需要2g内存
- 云服务器开放端口
-
访问http://****:5601
3.ElasticSearch核心概念
4.操作ElasticSearch(脚本操作,运维人员使用)
4.1.RESTful风格介绍
4.2.基于postman操作
4.3.基于kibana操作
4.4.操作索引(基于postman)
4.4.1.添加索引
4.4.2.查询索引
- 一次性查两个:http://ip:9200/goods_index,goods_index2
- 一次性查所有http://ip:9200/_all(包含很多自带的索引)
4.4.3.删除索引
4.4.4.关闭索引
不想删,也不想别人访问4.4.5.打开索引
4.4.6.小结
4.5.操作映射(基于kibana)
4.5.1.es支持的数据类型
-
简单数据类型
-
复杂数据类型
4.5.2.添加映射
4.5.3.查询映射
4.5.4.添加字段
4.5.5.小结
4.6.操作文档
4.6.1.增删改查
4.6.2.总结
4.7.分词器
4.7.1.介绍
需要安装中文分词器ik分词器
4.7.2.IK分词器安装
- put f:/apache-maven-3.1.1-bin.tar.gz
- tar zxvf apache-maven-3.1.1-bin.tar.gz -C /opt
- ln -s apache-maven-3.1.1 maven(opt目录设置一个软链接)
-
配置maven
- put f:/elasticsearch-analysis-ik-7.4.0.zip
- cp elasticsearch-analysis-ik-7.4.0.zip /opt
- unzip elasticsearch-analysis-ik-7.4.0.zip(报错-bash: unzip: command not found
) - yum install zip
- yum install unzip
-
解压完成后,查看目录,经典的maven结构
- 先打包,获取jar(打包过程中出现插件下载不了Plugin org.apache.maven.plugins:maven-enforcer-plugin:1.2 or one of its dependencies could not be re,更换阿里云的国内镜像。)
-
移动jar
4.7.3.IK分词器使用
4.8.查询文档
4.8.1.词条查询
-
词条查询,title文本是华为3G手机,分词的词条可能是华为、3G、手机,搜索条件是华为手机,词条没有这四个字,查不出来,词条需要和搜索条件完全匹配
-
删除索引,重新建索引、建映射、新增文档
- 创建完索引,可以不添加索引对应的映射,直接添加文档,会动态生成映射
-
再次查询,输入北京可以查到两条,输入北京昌平,词条没有这四个字所以查不到
4.8.2.全文查询
- 全文查询,title文本是华为3G手机,分词的词条可能是华为、3G、手机,然后对搜索条件华为手机进行分词,求并集
-
输入北京昌平可以查询到记录
-
输入华为手机也可以查到到记录
4.8.3.总结
创建索引的时候,某个字段是text,需要指定分词器,不指定就是默认的standard
5.ElasticSearch JavaAPI
5.1.SpringBoot整合es
- 不需要引入web坐标
-
es没有start启动器支持,用spring也是引入这些坐标
5.2.操作索引
5.2.1添加索引
-
方式一:只添加索引
-
方式二:添加索引和映射
注意同名的类要选择org.elasticsearch.client包下的