目录
一、Elasticsearch(ES)介绍
1.为什么需要单独的搜索服务
用户访问我们的首页,一般都会直接搜索来寻找自己想要购买的商品。
而商品的数量非常多,而且分类繁杂。如何能正确的显示出用户想要的商品,并进行合理的过滤,尽快促成交易,是搜索系统要研究的核心。
面对这样复杂的搜索业务和数据量,使用传统数据库搜索就显得力不从心,一般我们都会使用全文检索技术Elasticsearch。
2.全文检索
全文检索:类似于百度、google等搜索引擎,输入一个内容,可以很快速的搜索出和内容相关的其他内容,速度快,性能高,查询范围大。
检索及搜索及查询
数据库查询
数据库查询其实就是使用select * from xxx 查询数据库数据。
数据库查询问题
问题1
问题2
通过上述的案例,我们知道使用数据库查询数据存在性能低、功能弱等问题,在大数据量的情况下,这些问题将制约搜索操作,而这些问题可以使用倒排索引来解决这些问题,从而提高搜索效率。
倒排索引
例如:
静夜思
床前明月光,疑是地上霜。 举头望明月,低头思故乡。
水调歌头
明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间。转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟。”
使用倒排索引操作
但是使用倒排索引,value的内容将会非常的多,所以可以对其进行优化,在value中存储内容的唯一标识即可。
倒排索引:将各个文档中的内容,进行分词,形成词条。然后记录词条和数据的唯一标识(id)的对应关系,形成的产物,查询时可以根据分好的词查询到对应数据的唯一标识,然后查询到数据。
3.Elasticsearch简介
官网:Elastic — 搜索 AI 公司 | Elastic
Elasticsearch是一个基于Lucene的搜索服务器引擎(软件)。它提供了一个分布式多用户能力的全文搜索引擎(软件),基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎(软件)。类似的还有solr。
Elastic有一条完整的产品线及解决方案:Elasticsearch、Kibana、Logstash等,前面说的三个就是大家常说的ELK(日志分析)技术栈。(现在称之为Elastic Stack:ELK Stack:Elasticsearch、Kibana、Beats 和 Logstash | Elastic)
1.Elasticsearch的特点
分布式,无需人工搭建集群(天生就是集群的)(solr就需要人为配置,使用Zookeeper作为注册中心)
Restful风格,一切API都遵循Rest原则,容易上手
近实时搜索,数据更新在Elasticsearch中几乎是完全同步的。(但还是不同步的)
2.应用场景
搜索:海量数据的查询
日志数据分析
实时数据分析
扩展:solr和Elasticsearch的区别:
es基本是开箱即用,非常简单。Solr安装略微复杂一丢丢
Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能。
Solr 支持更多格式的数据,比如JSON、XML、CSV,而 Elasticsearch 仅支持json文件格式。
Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供,例如图形化界面需要kibana友好支撑
Solr 查询快,但更新索引时慢(即插入删除慢),用于电商等查询多的应用;
ES建立索引慢,即实时性查询快,用于facebook、新浪等搜索。
Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用。
Solr比较成熟,有一个更大,更成熟的用户、开发和贡献者社区,而 Elasticsearch相对开发维护者较少,更新太快,学习使用成本较高。
Elasticsearch和Mysql的分工:
Elasticsearch:主要负责大数据量的查操作。
Mysql:主要负责增、删、改、少量数据的查操作。
3.ElasticSearch数据的存储和搜索原理
数据存储原理
搜索原理
Elasticsearch是一个开源的分布式搜索和分析引擎,用于存储、检索和分析海量数据。下面是Elasticsearch版本5、6和7之间的主要区别:
功能增强:每个新的Elasticsearch版本都引入了新的功能和改进。例如,Elasticsearch 6引入了一种新的分布式均衡策略,以提高集群的性能和稳定性。Elasticsearch 7引入了Elasticsearch警报和报告功能,还改进了安全性功能。
性能优化:随着每个版本的发布,Elasticsearch致力于改进性能和吞吐量。例如,Elasticsearch 5引入了更好的字段数据类型和聚合性能,Elasticsearch 6引入了更高效的搜索和索引算法,而Elasticsearch 7进一步提升了性能,并改进了索引和搜索速度。
安全性增强:Elasticsearch在每个版本中都加强了安全性。例如,Elasticsearch 5引入了内置的X-Pack安全功能,用于身份验证和访问控制。Elasticsearch 6引入了TLS加密和重要配置更改,Elasticsearch 7引入了更强大的角色和权限管理。
API更改:每个版本中的Elasticsearch API可能会有一些细微的更改或调整。这可能需要更新现有的应用程序代码以适应新的API。因此,在升级Elasticsearch版本时,需要仔细阅读版本发布说明和文档,以了解API的变更情况。
兼容性:由于不同版本之间的API和功能变化,升级Elasticsearch版本可能需要进行一些工作。尤其是从较旧的版本升级到较新的版本时,需要进行彻底的测试和计划。
总的来说,随着每个新版本的发布,Elasticsearch不断改进其功能、性能和安全性。因此,了解每个版本的变化对于确定升级策略和利用新功能非常重要。在进行升级之前,建议查阅Elasticsearch的官方文档,并根据特定的用例和需求评估哪个版本最适合你的环境。
二、Elasticsearch(ES)安装
1、拉取镜像
docker pull elasticsearch:7.4.0
查看镜像
2、创建目录并给目录赋权
3、创建并编辑配置文件
写入以下内容
# 可访问 IPhttp.host: 0.0.0.0# 跨域http.cors.enabled: truehttp.cors.allow-origin: "*"
startEs.sh
写入以下内容
docker run --name es-7.4.0 \
--restart=always \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms84m -Xmx256m" \
-v /usr/local/docker/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /usr/local/docker/es/data:/usr/share/elasticsearch/data \
-v /usr/local/docker/es/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.0
给配置文件赋权
4、 开放防火墙端口9200、9300
5、开放服务器端口
6、启动ES
三、安装Kibana
1、准备工作
cd /usr/local/docker/
mkdir kibana
cd kibana/
mkdir config
cd config/
2、创建配置和脚本
vim kibana.yml
# 主机地址,可以是 ip, 主机名server.host: 0.0.0.0# 提供服务的端口,监听端口server.port: 5601# kibana 访问 es 服务器的 URL, 就可以有多个,以逗号 "," 隔开elasticsearch.hosts: [ "http://服务器ip:9200" ]
cd ../
vim startKibana.sh
docker run -d \
--name kibana-7.4.0 \
--restart=always \
-p 5601:5601 \
-e TZ="Asia/Shanghai" \
-v /usr/local/docker/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \
kibana:7.4.0
chmod -R 700 startKibana.sh

./startKibana.sh
docker ps
3、服务器放端口访问

5601
四、安装ik分词器
1、安装包解压和删除安装包
安装解压工具
解压缩zip文件
删除zip安装包
2、重启es
查看是否重启成功