ElasticSearch

发布于:2025-09-01 ⋅ 阅读:(22) ⋅ 点赞:(0)

本次使用的es是6.5版本的

ElasticSearch介绍

ElasticSearch介绍

  • ES是一个使用Java语言并且基于!ucene编写的搜索引擎框架,他提供了分布式的全文搜索功能,提供了一个统一的基于RESTFUl风格的WEB接口,官方客户端也对多种语言都提供了相应的API。
  • Lucene:Lucene本身就是一个搜索引擎的底层。
  • 分布式:ES主要是为了突出他的横向扩展能力。
  • 全文检索:将一段词语进行分词,并且将分出的单个词语统一的放到一个分词库中,在搜索时,根据关键字去分词库中检索,找到匹配的内容。(倒排索引)
  • RESTFUL风格的WEB接口:操作ES很简单,只需要发送一个HTTP请求,并且根据请求方式的不同,携带参数的不同,执行相应的功能。

ES和Solr

  • Solr在查询死数据时,速度相对ES更快一些。但是数据如果是实时改变的,solr的查询速度会降低很多。ES的查询的效率基本没有变化。
  • Solr搭建基于需要依赖zeokeeper来帮助管理。ES本身就支持集群的搭建,不需要第三方的介入。
  • 最开始Solr的社区可以说是非常火爆,针对国内的文档并不是很多。在ES出现之后,ES的社区火爆程度直线上升,ES的文档非常健全。
  • ES对现在云计算和大数据支持的特别好。

倒排索引

将存放的数据,以一定的方式进行分词,并且将分词的内容存放到一个单独的分词库中当用户去查询数据时,会将用户的查询关键字进行分词,然后去分词库中匹配内容,最终得到数据的id标识。根据id标识去存放数据的位置拉取到指定的数据。
在这里插入图片描述

安装

ElasticSearch和kibana

docker compose ymal文件
在这里插入图片描述

ik分词器

进入es环境中的bin目录安装
在这里插入图片描述
然后重启es

验证
在这里插入图片描述

基本操作

es vs 关系型数据库

在这里插入图片描述

索引

  • ES的服务中,可以创建多个索引。
  • 每一个索引引默认披分成5片存储。
  • 每一个分片都会存在至少一个备份分片。备份分片默认不会帮助检索数据,当ES检索压力特别大的时候,备份分片才会帮助检索数据。
  • 备份的分片必须放在不同的服务器中。

TYPE

ES5.x版本中,一个Index下可以创建多个TyPE,ES6.x版本一个Index下可以创建一个Type.ES6.x版本中,ES7.x版本中,一个Index下没有Type.

document

相当于关系数据库中的记录

filed

相当于关系数据库中的列

es中restful的语法api

在这里插入图片描述

索引操作

建立索引

在这里插入图片描述

查看索引

kibana页面操作
在这里插入图片描述
或者
在这里插入图片描述

删除索引

kibana页面操作
在这里插入图片描述
或者接口
在这里插入图片描述

类型

在这里插入图片描述
在这里插入图片描述

创建索引并指定数据类型

在这里插入图片描述
在这里插入图片描述

文档操作

文档在ES服务中的唯一标识,_index,_type,_id 三个内容为组合,锁定一个文档,操作时添加还是修改

添加文档

在这里插入图片描述在这里插入图片描述

更新文档

在这里插入图片描述
在这里插入图片描述

删除文档

在这里插入图片描述

ElasticSearch各种查询

term和terms查询

term查询

term的查询是代表完全匹配,搜索之前不会对你搜索的关键字进行分词,对你的关键字去文档分词库中去匹配内容。
在这里插入图片描述

terms查询

在这里插入图片描述
在这里插入图片描述

match查询

  • match查询属于高层查询,他会根据你查询的字段类型不一样,采用不同的查询方式。
  • 查询的是日期或者是数值的话,他会将你基于的字符串查询内容转换为日期或者数值对待。。如果查询的内容是一个不能被分词的内容(keyword),match查询不会对你指定的查询关键字进行分词。
    如果查询的内容时一个可以被分词的内容(text),match会将你指定的査询内容根据一定的方式去分词,去分词库中匹配指定的内容。
  • match查询,实际底层就是多个term查询,将多个term查询的结果给你封装到了一起

match_all

在这里插入图片描述

match查询

在这里插入图片描述

bool match查询

在这里插入图片描述

multi_match

在这里插入图片描述

其他查询

id查询

在这里插入图片描述

ids查询

在这里插入图片描述

prefix查询

在这里插入图片描述

fuzzy查询

在这里插入图片描述

wildcard查询

在这里插入图片描述

range查询

在这里插入图片描述

regexp查询

在这里插入图片描述

深分页scroll

现将用户指定的关键进行分词。

ES对from+size是有限制的,from和size二者之和不能超过1W原理:

  • from+size在ES查询数据的方式:
    第一步现将用户指定的关键进行分词。
    第二步将词汇去分词库中进行检索,得到多个文档的id。
    第三步去各个分片中去拉取指定的数据。耗时较长。
    第四步将数据根据score进行排序。耗时较长。
    第五步根据from的值,将查询到的数据舍弃一部分。
    第六步返回结果。

  • ScrolI+size在ES查询数据的方式(不适合实时数据):
    第一步现将用户指定的关键进行分词。
    第二步将词汇去分词库中进行检索,得到多个文档的id。
    第三步将文档的id存放在一个ES的上下文中。
    第四步根据你指定的size去ES中检索指定的数据,拿完数据的文档id,会从上下文中移除。
    第五步如果需要下一页数据,直接去ES的上下文中,找后续内容。
    第六步循环第四步和第五步
    在这里插入图片描述
    在这里插入图片描述

delete-by-query

在这里插入图片描述

复合查询

bool查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

boosting查询

在这里插入图片描述
在这里插入图片描述

filter查询

  • query,根据你的查询条件,去计算文档的匹配度得到一个分数,并且根据分数进行排序,不会做缓存的。
  • filter 根据你的靠询条件去查询文档,不去计算分数,而且fter会对经常被过滤的数据进行缓存。
    在这里插入图片描述

高亮查询

在这里插入图片描述
在这里插入图片描述

聚合查询

ES的聚合查询和MySQL的聚合査询类型,ES的聚合查询相比MYSQL要强大的多,ES提供的统计数据的方式多种多样。
在这里插入图片描述

去重计数

,即cardinality,第一步先将返回的文档中的一个指定的field进行去重,统计一共有多少条
在这里插入图片描述

range查询

统计一定范围内出现的文档个数,比如,针对某一个Field的值在 0-100,100-200,200-300之间文档出现的个数分别是多少。
范围统计可以针对普通的数值,针对时间类型,针对ip类型都可以做相应的统计。
range, date_range,ip_range
在这里插入图片描述

统计聚合查询

在这里插入图片描述

地图经纬度搜索

ES中提供了一个数据类型 geg_point,这个类型就是用来存储经纬度的。创建一个带geg_point类型的索引,并添加测试数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到