Elasticsearch知识点

2023-11-15

目录

1 什么是Elasticsearch?

2 Elasticsearch的特点

3 Elasticsearch基础概念

4 Elasticsearch基本数据类型(看这里)

5 Elasticsearch基本检索类型

5.1 检索和过滤

5.2 结构化检索

5.3 全文检索

5.4 复合检索

5.5 特定检索

6 Elasticsearch基本基本聚合类型

6.1 Metric聚合

6.2 Buckting聚合

6.3 Pipeline聚合

7 Elasticsearch基本操作类型

7.1 Elasticsearch集群基本操作

7.2 Elasticsearch索引基本操作

7.3 Elasticsearch文档基本操作

7.4 Elasticsearch常用的工具

8 Elasticsearch进阶

8.1 Elasticsearch集群规划

8.2 Elasticsearch数据建模

8.3 Elasticsearch生命周期管理

8.4 Elasticsearch写入性能优化

8.5 Elasticsearch检索性能优化

8.6 Elasticsearch磁盘读写优化

8.7 Elasticsearch插件开发

9 Elasticsearch实践


1 什么是Elasticsearch?

Elasticsearch是一个面向文档的实时的分布式搜索分析引擎。关于Elasticsearch与另一个搜索引擎Solr的比较看这里

学习路线图

2 Elasticsearch的特点

  • 反向索引又叫倒排索引,是根据文章内容中的关键字建立索引。
  • 搜索引擎原理就是建立反向索引。
  • Elasticsearch 在 Lucene 的基础上进行封装,实现了分布式搜索引擎。
  • Elasticsearch 中的索引、类型和文档的概念比较重要,类似于 MySQL 中的数据库、表和行。
  • Elasticsearch 也是 Master-slave 架构,也实现了数据的分片Shard和备份Replia。
  • Elasticsearch 一个典型应用就是 ELK 日志分析系统。

关于Elasticsearch相关的系统版本和JVM版本支持(看这里

3 Elasticsearch基础概念

  • 索引(index)对应数据库
  • 类型(type)对应数据库中的数据表(注意:ES6.0以后就不支持一个索引指定多个类型了,默认一个类型且不能修改)
  • 文档(Document)文档是存储在ES中的一个JSON字符串,相当于数据库中表的具体数据行。
  • 字段(Field)对应数据库中每一行数据的具体的列
  • ID序列:ID是一个未接的唯一标识,如果在库中没有提供ID,系统会自动生成一个ID
  • 映射(Mapping)代表索引的结构,类似于数据库表结构。动态映射和静态映射
  • 索引模板(template): 使用索引模板
  • 路由:当存储一个文档的时候,它会存储在唯一的主分片中。内部routing算法将数据路由到各个分片:shard = hash(routing) % number_of_primary_shards,routing 是一个可变值,默认是文档的 _id ,也可以设置成一个自定义的值,number_of_primary_shards 主分片的数量

4 Elasticsearch基本数据类型(看这里)

5 Elasticsearch基本检索类型

5.1 检索和过滤

  1. 检索和过滤的区别(看这里
  2. 检索和过滤的适用场景,针对他们的区别可以确定各自的使用场景

5.2 结构化检索

  1. 精确匹配检索:term查询单值精确匹配、terms查询多值精确匹配,terms_set多值匹配并且可以定义返回文档所需的匹配术语数
  2. 范围检索:range query(低版本用 range filter)
  3. 存在与否检索:exists query
  4. 前缀查询:prefix query
  5. 通配符检索:wildcard query
  6. 正则检索:regexp query
  7. 类型检索:type query
  8. id检索:ids query
  9. 模糊查询:fuzzy query,与通配符查询类似,但是fuzzy查询,当搜索条件是个不准确的单词或词时,可以自动帮助纠正后查询

5.3 全文检索

  1. 分词全文检索:match
  2. 布尔前缀检索:match_bool_prefix
  3. 短语检索:match_phrase 
  4. 短语前缀检索:match_phrase_prefix 
  5. 多字段匹配检索:multi_match 
  6. 支持与或非的字符串检索:query_string
  7. 简化的字符串检索:simple_query_string 
  8. 间隔检索:intervals 

5.4 复合检索

  1. 固定得分检索 看这里
  2. bool组合检索:must、should(通过minimum_should_match指定匹配的个数)、must_not、filter 看这里
  3. 改变评分检索:boostingfunction scoredis max query

5.5 特定检索

  1. 嵌套检索:nested query
  2. 父子检索:has_child queryhas_parent queryparent_id query
  3. 地理检索:geo 查询 和 distance_feature query(查询更接近提供的origin日期或时间点的数据。或者查询来查找某个位置最近的邻居)
  4. 相似文档检索:more_like_this
  5. 脚本检索:script query

6 Elasticsearch基本基本聚合类型

6.1 Metric聚合

  1. 去重统计:cardinality
  2. 平均统计:Avg
  3. 最大和最小统计:MaxMin
  4. 求和统计:Sum
  5. 统计汇总:Stats(包含平均值、最大最小值、总数)
  6. 更多

6.2 Buckting聚合

  1. terms按字段分组统计:terms
  2. 根据字段值统计:histogram
  3. 根据时间值统计:datehistogram
  4. 根据时间段统计:daterange(可以指定时间段格式和具体查询的时间区间)
  5. 过滤Filter聚合:filter 和 filters
  6. 嵌套聚合:nested
  7. 更多

6.3 Pipeline聚合

  1. bucked script聚合:bucket script
  2. bucked selector聚合:bucket selector
  3. bucked sort聚合:bucket sort
  4. Avg/Max/Min/Sum bucked聚合
  5. 更多

7 Elasticsearch基本操作类型

7.1 Elasticsearch集群基本操作

  1. 集群健康状态分类:green健康,yellow亚健康,red病态,集群健康可以使用 health api 查看情况
  2. 集群状态监控API:集群状态state集群统计stats集群任务管理_tasks集群待处理任务pending_tasks节点信息_nodes活跃线程信息_nodes/hot_threads更多集群api
  3. 集群备份:_snapshot、_restore

7.2 Elasticsearch索引基本操作

  1. 增:put index
  2. 删:delete index
  3. 索引数据迁移:
    reindex
    第三方工具:elasticsearch-dump、Elasticsearch-Exporter、logstash、elasticsearch-migration
  4. 修改副本数,注意索引一旦创建,分片数不可更改,除非reindex
  5. 索引压缩:shrink
  6. 查:Get index、 get/index/_settings

7.3 Elasticsearch文档基本操作

  1. 单个文档写入:put document
    批量写入:bulk写入
    第三方导入:1.通过logstash导入多种数据源的数据(关系型数据库,非关系型数据库,大数据存储),2.kafka推送,3.利用flume
  2. 单个删除:delete document
    批量删除:delete-by-query
  3. 单个修改:update 结合 script
    批量修改:update-by-query
  4. 单个检索:get
    批量检索:mult getscroll游标
     
  5. 分页:from+size
  6. 高亮:Unified Highlighter(默认)、plain ighlighter、fvh highlighter(适合大文件)
  7. 搜索推荐:Term suggester、Phrase suggester、Completion suggester、Context Suggester
  8. 分词:中英文分词的区别,
    中文分词插件有:ik、jieba、ansj
    动态更新词典策略
  9. 同义词词典配置
  10. 分析调试:profile:true

7.4 Elasticsearch常用的工具

  1. kibana工具:xpack提升安全
  2. Head浏览器插件
  3. cerebro监控工具

8 Elasticsearch进阶

8.1 Elasticsearch集群规划

  • 节点数规划:Master主节点、Client路由节点、data数据节点
  • 分片、副本规划:每个分片支持的数据量、业务数据分类梳理
  • 堆内存核心原理
  • 部署优化:堆内存部署优化、线程数/队列优化设置、候选主节点设置、更新中文分词词典

8.2 Elasticsearch数据建模

  • 数据建模的重要性
  • 数据建模的流程

8.3 Elasticsearch生命周期管理

  • 基于时间轴动态创建索引(利用滚动索引和索引模板)
  • 定时清理索引:curator
  • 冷热数据分离

8.4 Elasticsearch写入性能优化

  1. Elasticsearch写入慢的原因:1.没有使用批量操作,2.使用批量操作,但值设置不合理,3.ES队列线程池设置不合理
  2. Elasticsearch写入提速:1. 采用bulk批量写入 2. 使用多线程写入 3. 增加refesh间隔,默认1s,每秒都会将内存的数据刷新到磁盘,如果设为30S,表示30S的数据是写入内存缓存的,30秒才将内存的数据刷新到磁盘 4. 如果搭建ES集群,禁止refresh和replica,当批量导入大数据时可以禁止副本复制操作 5. 采用自增ID

8.5 Elasticsearch检索性能优化

  1. Elasticsearch检索慢的原因:
    1)索引设置不合理(如所有数据写入一个固定索引)
    2)Mapping映射字段设置不合理
    3)DSL设置不合理,有优化空间,如:wildcard
    4)返回字段非常多,如:cont/html_cont
    5)慢日志查询
    6)监控集群状态:cpu、内存、磁盘使用情况判断是否是硬件原因,确认是否有并行写入等
  2. Elasticsearch检索提速:
    1)先确认哪里慢了?利用 profile:true 分析
    通过在 query 部分上方提供 “profile: true” 来启用Profile API
    GET /ljjtest/book/_search
    {
      "profile":"true",
      "query":{
        "match":{
          "author":"鲁迅"
        }
      }
    }
    2)如果是硬件层面,直接扩展硬件
    3)数据层面:提前数据建模、减少检索字段、Mapping优化、避免使用script、使用近似日期、只读数据force_merge、范围检索使用keyword而非range
    4)缓存方面:使用独立缓存系统,preference优化缓存使用率

8.6 Elasticsearch磁盘读写优化

8.7 Elasticsearch插件开发

9 Elasticsearch实践

  1. Elasticsearch日志分析:借助ELK可视化分析
  2. Elasticsearch全文检索,做搜索引擎

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Elasticsearch知识点 的相关文章

随机推荐

  • 第十四届蓝桥杯第三期模拟赛(python版)

    总体难度不大 正赛肯定比这难 本人答案代码样例都能过 前五个填空题正确性应该都问题不大 有更好方法欢迎放出来 大题但可能有一些细节没有考虑到 时间复杂度这一方面是都考虑了的 大题仅供参考 有更好的方法的 欢迎讨论 目录 问题1 问题2 问题
  • 项目总结:如何开发出好的项目

    每件事都需要考虑它的价值 然后决定投入 1 项目如果要做的好 必须要有丰富的文档支持 文档的意义在于只有形成文档 才能更好的去沟通和判断 对有可能出现问题的地方提前预警 另外 任何一个系统不只有开发成本 运维成本有时会超出我们的想象 即便一
  • 卷积神经网络在自然语言处理中的应用

    卷积神经网络最典型的应用领域是计算机视觉 卷积神经网络在图像分类中取得了重大突破 典型应用有facebook的图像自动标注 还有自动驾驶等 卷积神经网络也可以用于自然语言处理 由于卷积神经网络在计算机视觉中的应用最广 首先阐述这个 然后再介
  • 点、线、面生成mvt(MapBox Vector Tile)格式的瓦片总结

    矢量切片可以以三种形式呈现 GeoJSON TopoJSON 和 MapBox Vector Tile mvt 矢量切片技术继承了矢量数据和切片地图的双重优势 有以下优点 瓦片以mvt格式的存储 是以每一个瓦片号为基准进行存储的 大小都是2
  • Basic Level 1013 数素数 (20分)

    题目 令 P i表示第 i 个素数 现任给两个正整数 M N 10 4 请输出 P M到 P N的所有素数 输入格式 输入在一行中给出 M 和 N 其间以空格分隔 输出格式 输出从 P M到 PN的所有素数 每 10 个数字占 1 行 其间
  • Java将数据导出为xml格式

    需求 前后端分离项目 Springboot项目 需要将学生 信息导出为xml文件 StudentController java GetMapping getXml public void studentXml HttpServletRequ
  • linux spi测试程序,spidev测试方法 /how to test spidev

    在设备树中配置spidev 首先需要在设备树配置好spi设备 可参考如下配置 ecspi3 pinctrl names default pinctrl 0 cs gpios dmas dma names rx tx status okay
  • Excel分段线性插值函数实现

    问题 已知 X和Y有下表的对应关系 当一个新的4
  • 高级FPGA设计技巧!多时钟域和异步信号处理解决方案

    有一个有趣的现象 众多数字设计特别是与FPGA设计相关的教科书都特别强调整个设计最好采用唯一的时钟域 换句话说 只有一个独立的网络可以驱动一个设计中所有触发器的时钟端口 虽然这样可以简化时序分析以及减少很多与多时钟域有关的问题 但是由于FP
  • python 连接MySQL数据库

    方式一 pymysql 下载mysql驱动模块 pip install pymysql python 链接mysql示例 导入mysql连接驱动模块 import pymysql host ip地址 port 端口号 user 数据库用户名
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • 链表算法的一些领会

    有些题目是一节一节的处理链表 比如reverseBetween ListNode head int m int swapPairs ListNode head reverseInKGroup ListNode head int k 主要考虑
  • docker操作

    一 docker常用操作 1 docker基本命令 批注 第9条 若不写版本号 默认使用lastest 最新版本 建议拉取镜像带上版本号 第10条 其中q是当下id队列的意思 比如查看所有的容器的id docker ps a q docke
  • 华为OD机试真题 Java 实现【支持优先级的队列】【2023 B卷 100分】

    一 题目描述 实现一个支持优先级的队列 高优先级先出队列 同优先级时先进先出 如果两个输入数据和优先级都相同 则后一个数据不入队列被丢弃 队列存储的数据内容是一个整数 二 输入描述 一组待存入队列的数据 包含内容和优先级 三 输出描述 队列
  • 如何设置电脑的固定IP地址

    大家在上网时电脑的IP地址往往都是自动选择的 但在局域网内有时会方便共享文件和监控流量等操作时需要固定的IP地址 下面将简单介绍如何手设置电脑的固定IP地址 步骤 单击电脑网络连接图标 打开网络和共享中心 点击本地连接 点击详细信息 即可看
  • vue列表渲染,鼠标点击改变样式

    话不多说 看下面的代码吧 HTML div ul class nav li item li ul p list ind p div 注 别忘记先引入vue js
  • 淘宝滑块x82y-226流程分析(不涉及逆向)

    分析目标 微信公众号 y小白的笔记 https mp weixin qq com s Py7I6RG7UT9EtdpXlV98aA 只分析验证码加载流程 不说具体细节 版本 226 目标参数slidedata n 成功返回 code 0 r
  • webstorm快速配置react

    以下都是废话 建议看菜鸟教程 也推荐这一个链接 它是React几种基本配置方案 你可以根据需求选择合适的配置 默认你装了node js和npm还有ws2018 2 4 首先在设置 setting 里搜索lang 语言与框架 找到并JavaS
  • 怎样用Java求水仙花数和水仙花数的数量

    首先我们了解一下水仙花数的定义 一个各个位上的数字三次方之和等于他本身的三位数 因此 为了求水仙花数 我们的程序会有以下几个需求 1 首先表示出所有的三位数 用循环表示 这里用for循环示例 2 然后表示出其个位 十位 百位 3 当这个三位
  • Elasticsearch知识点

    目录 1 什么是Elasticsearch 2 Elasticsearch的特点 3 Elasticsearch基础概念 4 Elasticsearch基本数据类型 看这里 5 Elasticsearch基本检索类型 5 1 检索和过滤 5