【商城实战】10-ElasticSearch
【商城实战】10-ElasticSearch
Last edited 2022-9-27
date
Jul 1, 2022
type
Post
status
Published
slug
msb-mac-mall-elasticsearch
summary
概要:ElasticSearch从入门到进阶、到应用进行整体的介绍,文章适合想对ElasticSearch做系统性学习的小伙伴!
tags
微服务
spring-cloud-alibaba
商城
category
商城实战
password
Property
Sep 27, 2022 02:57 AM
icon
notion image

一、ElasticSearch概述、安装、入门

二、ElasticSearch进阶

1. 检索、Query DSL

ElasticSearch进阶篇之-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 好了索引查询这块就介绍到这儿了
ElasticSearch进阶篇之-Query DSL_波波烤鸭的博客-CSDN博客
 

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:求总数 ......
ElasticSearch进阶篇之聚合(aggregations)和映射(mapping)
 

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 .
ElasticSearch进阶篇之IK分词器和自定义词库实现_波波烤鸭的博客-CSDN博客_elasticsearch ik分词器 词库

三、ElasticSearch应用

1. ElasticSearch进阶篇之ElasticSearch-Rest-Client在SpringBoot项目中实战

  • 微服务
  • spring-cloud-alibaba
  • 商城
  • 【商城实战】04-进阶篇-缓存与分布式锁【虚拟机环境】个人电脑上玩儿转微服务的神器(推荐)