dateJul 1, 2022typePoststatusPublishedslugmsb-mac-mall-elasticsearchsummary概要:ElasticSearch从入门到进阶、到应用进行整体的介绍,文章适合想对ElasticSearch做系统性学习的小伙伴!tags微服务spring-cloud-alibaba商城category商城实战passwordPropertySep 27, 2022 02:57 AMiconElasticsearch: The Official Distributed Search & Analytics Engine | ElasticThe heart of the free and open Elastic Stack Elasticsearch is a distributed, RESTful search and analytics engine capable of addressing a growing number of use cases. As the heart of the Elastic Stack, it centrally stores your data for lightning fast search, fine‑tuned relevancy, and powerful analytics that scale with ease.https://www.elastic.co/cn/elasticsearch/Elastic 中文社区本文将为你介绍 Apache APISIX 的 elasticsearch-logger 插件的相关信息,以及如何通过此插件获取 APISIX 的实时日志。 Apache APISIX 是一个动态、实时、高性能的 API 网关,提供了负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。作为 API 网关, Apache APISIX 不仅拥有丰富的插件,而且支持插件的热加载。 Elasticsearch 是一个基于 [Lucene]( https://zh.m.wikipedia.org/zh-hans/Lucene) 库的搜索引擎。它提供了分布式、 RESTful 风格的搜索和数据分析引擎,具有可扩展性、可分布式部署和可进行相关度搜索等特点,能够解决不断涌现出的各种用例。同时还可以集中存储用户数据,帮助用户发现意料之中以及意料之外的情况。 APISIX 以 HTTP 请求的方式向 Elasticsearch 发送 APISIX 的 Runtime 日志。插件 elasticsearch-logger 采用 [bulk]( https://www.elastic.co/guide/e ... s-bulk) 的格式进行日志上报,这允许 APISIX 可以将多条日志合并后再进行上报,这使得 APISIX 在对 Elasticsearch 进行日志上报方面更加灵活并且具有较好的性能。你可以参考文档 [APISIX 批处理器]( https://apisix.apache.org/zh/d ...https://elasticsearch.cn/explore/一、ElasticSearch概述、安装、入门ElasticSearch基础入门篇_波波烤鸭的博客-CSDN博客_elasticsearch 入门ES 是一个开源的 高扩展的分布式全文搜索引擎 ,是整个Elastic Stack技术栈的核心。它可以近乎实时的存储,检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。 ElasticSearch的底层是开源库Lucene,但是你没办法直接用Lucene,必须自己写代码去调用它的接口,Elastic是Lucene的封装,提供了REST ...https://blog.csdn.net/qq_38526573/article/details/122931831?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166392959816782388071282%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166392959816782388071282&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-122931831-null-null.nonecase&utm_term=elasticsearch&spm=1018.2226.3001.4450二、ElasticSearch进阶1. 检索、Query DSLElasticSearch进阶篇之-Query DSL_波波烤鸭的博客-CSDN博客ElasticSearch官网:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/getting-started-search.html 在ElasticSearch中支持两种检索方式 通过使用REST request URL 发送检索参数(uri+检索参数) 通过使用 REST request body 来发送检索参数 (uri+请求体) GET bank/_search # 检索bank下的所有信息,包括 type 和 docs GET bank/_search?q=*&sort=account_number:asc 响应结果信息 通过使用 REST request body 来反射检索参数 (uri+请求体) GET bank/_search ElasticSearch提供了一个可以执行的JSON风格的DSL(domain-specific language 领域特定语言),这个被称为Query DSL,该查询语言非常全面,并且刚开始的时候感觉有点复杂,真正学好它的方法就是从一些基础案例开始的。 完整的语法结构 如果是针对某个字段,那么它的结构为 上面我们用到来的match_all是匹配所有的数据,而我们现在要讲的match是条件匹配 如果对应的字段是基本类型(非字符串类型),则是精确匹配。 match返回的是 account_number:20的记录 如果对应的字段是字符串类型,则是全文检索 match返回的就是address中包含mill字符串的记录 将需要匹配的值当成一个整体单词(不分词)进行检索,短语匹配 查询出address中包含 mill road的所有记录,并给出相关性得分 查询出state或者address中包含 mill road的记录 布尔查询又叫 组合查询 ,bool用来实现复合查询, bool把各种其它查询通过 must(与)、 must_not(非)、 should (或)的方式进行组合 复合语句可以合并任何其他查询语句,包括复合语句也可以合并,了解这一点很重要,这意味着,复合语句之间可以相互嵌套,可以表达非常复杂的逻辑。 并不是所有的查询都需要产生分数,特别是那些仅用于"filtering"的文档,为了不计算分数,ElasticSearch会自动检查场景并且优化查询的执行。 和match一样,匹配某个属性的值,全文检索字段用match,其他非text字段匹配用term 好了索引查询这块就介绍到这儿了https://blog.csdn.net/qq_38526573/article/details/122952892?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166392959816782388071282%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166392959816782388071282&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-5-122952892-null-null.nonecase&utm_term=elasticsearch&spm=1018.2226.3001.4450 2. 聚合(aggregations)和映射(mapping)ElasticSearch进阶篇之聚合(aggregations)和映射(mapping)本文在上一篇文章的基础上我们继续来介绍ElasticSearch中聚合(aggregations)和映射(mappings)相关的内容。 聚合可以让我们极其方便的实现对数据的统计、分析。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这些统计功能的比数据库的sql要方便的多,而且查询速度非常快,可以实现实时搜索效果。 语法规则 https://www.elastic.co/guide/en/elasticsearch/reference/7.4/search-aggregations.html Elasticsearch中的聚合,包含多种类型,最常用的两种,一个叫 桶,一个叫 度量 : 桶的作用,是按照某种方式对数据进行分组,每一组数据在ES中称为一个 桶,例如我们根据国籍对人划分,可以得到 中国桶、 英国桶, 日本桶......或者我们按照年龄段对人进行划分:0 10,1020,20 30,30 40等。 Elasticsearch中提供的划分桶的方式有很多: Date Histogram Aggregation:根据日期阶梯分组,例如给定阶梯为周,会自动每周分为一组 Histogram Aggregation:根据数值阶梯分组,与日期类似 Terms Aggregation:根据词条内容分组,词条内容完全匹配的为一组 Range Aggregation:数值和日期的范围分组,指定开始和结束,然后按段分组 ...... bucket aggregations 只负责对数据进行分组,并不进行计算,因此往往bucket中往往会嵌套另一种聚合:metrics aggregations即度量 分组完成以后,我们一般会对组中的数据进行聚合运算,例如求平均值、最大、最小、求和等,这些在ES中称为 度量 比较常用的一些度量聚合方式: Avg Aggregation:求平均值 Max Aggregation:求最大值 Min Aggregation:求最小值 Percentiles Aggregation:求百分比 Stats Aggregation:同时返回avg、max、min、sum、count等 Sum Aggregation:求和 Top hits Aggregation:求前几 Value Count Aggregation:求总数 ......https://blog.csdn.net/qq_38526573/article/details/122957979?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166392959816782388071282%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166392959816782388071282&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-122957979-null-null.nonecase&utm_term=elasticsearch&spm=1018.2226.3001.4450 3. IK分词器和自定义词库实现ElasticSearch进阶篇之IK分词器和自定义词库实现_波波烤鸭的博客-CSDN博客_elasticsearch ik分词器 词库本文在前面文章的基础上我们继续来分享ElasticSearch中的内容,本文重点介绍IK分词器和自定义词库的实现。 所谓的分词就是通过tokenizer(分词器)将一个字符串拆分为多个独立的tokens(词元-独立的单词),然后输出为tokens流的过程。 例如"my name is HanMeiMei"这样一个字符串就会被默认的分词器拆分为[my,name,is HanMeiMei].ElasticSearch中提供了很多默认的分词器,我们可以来演示看看效果 但是在ElasticSearch中提供的分词器对中文的分词效果都不好。 所以这时我们就需要安装特定的分词器 IK https://github.com/medcl/elasticsearch-analysis-ik 下载对应的版本,然后解压缩到plugins目录中 然后检查是否安装成功:进入容器 通过如下命令来检测 检查下载的文件是否完整,如果不完整就重新下载。 插件安装OK后我们重新启动ElasticSearch服务 ik_smart分词 ik_max_word 通过ik分词器的使用我们发现:如果使用ElasticSearch中默认提供的分词器是不支持中文分词的,也就是我们在定义一个索引的使用不能使用默认的mapping,而是要手动的来建立对应的mapping,在mapping我们需要选择对应的分词器。 安装的软件越来越多,虚拟机的空间有限,这时我们可以关闭虚拟机后扩容 ElasticSearch中原来分配的空间比较小,虚拟机空间增大后我们可以调整ElasticSearch的空间。 调整ElasticSearch的虚拟机内存,我们没办法直接修改,需要先删除原来的容器,然后创建新的容器。 调整JVM参数后重新启动容器: docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \-e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins -d elasticsearch:7.4.2 先安装一个简单的Nginx实例,来获取对应的配置信息 拉取Nginx的镜像 启动Nginx服务 docker run -d -p 80:80 --name nginx nginx:1.10 把容器中的配置文件拷贝到/mydata/nginx目录中 docker container cp nginx:/etc/nginx .https://blog.csdn.net/qq_38526573/article/details/122974105?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166392959816782388071282%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166392959816782388071282&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-4-122974105-null-null.nonecase&utm_term=elasticsearch&spm=1018.2226.3001.4450三、ElasticSearch应用1. ElasticSearch进阶篇之ElasticSearch-Rest-Client在SpringBoot项目中实战ElasticSearch进阶篇之ElasticSearch-Rest-Client在SpringBoot项目中实战_波波烤鸭的博客-CSDN博客Elasticsearch 的API 分为 REST Client API(http请求形式)以及 transportClient API两种。相比来说transportClient API效率更高,transportClient 是通过Elasticsearch内部RPC的形式进行请求的,连接可以是一个长连接,相当于是把客户端的请求当成 Elasticsearch 集群的一个节点,当然https://blog.csdn.net/qq_38526573/article/details/122997888?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166392959816782388071282%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166392959816782388071282&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-3-122997888-null-null.nonecase&utm_term=elasticsearch&spm=1018.2226.3001.4450