ElasticSearch

本次使用的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类型的索引,并添加测试数据



相关推荐
jie*8 小时前
小杰机器学习高级(two)——极大似然估计、交叉熵损失函数
大数据·人工智能·机器学习·tensorflow·逻辑回归·数据库架构·sklearn
曼曼青青草9 小时前
智能体介绍及搭建实战(智能运营)
大数据·数据库·人工智能
俺俺9 小时前
(50)elasticsearch服务部署-有状态负载(华为云平台CCE)
elasticsearch·华为云·es·cce·有状态负载
TDengine (老段)9 小时前
TDengine 聚合函数 HISTOGRAM 用户手册
大数据·数据库·sql·物联网·时序数据库·iot·tdengine
Aloudata技术团队10 小时前
智能问数 Agent 如何确保 SQL 生成 100% 准确?
大数据·数据分析·数据可视化
Elasticsearch10 小时前
理解 Elasticsearch 中的分块策略
elasticsearch
Lx35210 小时前
Hadoop多租户环境下的资源隔离与性能优化
大数据·hadoop
深思慎考10 小时前
LinuxC++项目开发日志——基于正倒排索引的boost搜索引擎(4——通过jsoncpp库建立搜索模块)
linux·c++·搜索引擎
阿里云云原生10 小时前
函数计算进化之路:AI 应用运行时的状态剖析
大数据·人工智能·serverless·函数计算