ES 入门

基本概念

(1)索引、文档、REST API

文档----一行数据

  • ES 是面向文档的,文档是可搜索的最小单位
  • 文档会被序列化成 JSON 格式,保存在 ES 里面,字段都会有对应的数据类型(字符串,布尔,日期等)
  • 每个文档有个 UNIQUE ID - 可以自动生成也可以指定

针对于每一篇文档,都会有元数据的信息存在,刑如:
在这里插入图片描述

索引-----多个行记录的集合

一个索引就是具有某些共有特性的文档集合,在ES中是一个名词,类似于 关系型数据库中库 的概念。
在这里插入图片描述

索引结构

在这里插入图片描述

索引的具体实现细节

在这里插入图片描述

Type

7.0 之前在一个索引下可以创建多个Type, 但是 7.0 之后,只能创建一个,即 Type-"_doc"

与关系型数据库的类比

在这里插入图片描述
针对于数据量庞大或者需要高性能检索的场景而言,就选择ES,而如果数据量小,且需要大量事务操作的话,就选择一些关系型数据库。

REST API ----很容易被各种语言调用

在这里插入图片描述

(2)节点、集群、分片及副本

节点—就是指集群下的一个节点

其实就是一个 ES 实例,本质上是一个 Java 进程。每个节点启动之后,会分配一个 UID,保存在 data 目录下。

节点分为多种类型:

  • Master-eligible nodes (正常节点)
    • 每个节点启动之后,默认就是 Master eligible 节点,第一个节点启动之后自动就是 master 节点
    • Mater-eligible 节点可参加选主流程,成为 Master 节点
    • 每个正常节点都保存了集群的状态,但是只有 Master 节点才能修改集群的状态信息

集群的状态一般包含了:所有节点信息,所有的索引和其相关的 Mapping 与 Setting 信息,分片的路由信息

  • Data Node (数据节点)
    可以保存数据的节点,负责保存分片数据。
  • Coordinating Node (代理节点:类比于消息队列中的代理)
  1. 负责接收 Client 的请求,将请求分发到合适的节点,最终把结果汇聚到一起
  2. 每个节点默认都起到 Coorinating Node 的职责
  • Hot & Warm Node (冷热节点)
    不同的硬件配置的 Data Node, 用来实现 Hot(热数据) & Warn(旧数据)架构,以降低集群部署的成本
  • Machine Learning Node
    负责跑机器学习的 JOB,用来做异常检测
  • Tribe Node (未来要被淘汰)
    5.3 开始使用 Cross Cluster Serach

分片(Shard)------一个索引由多个分片组成,这些分片是索引里面的一部分,每一个分片都具备索引相同的数据结构

一个索引分成N个shard,每一个 Shard 的内容就是这个完整索引内容的 1/N

每个分片其实就是一个 Lucene 索引,Lucene 是倒排索引!

分为主副分片,主分片是一个运行的 Lucene 的实例,主分片数在索引创建时指定,后期不允许修改,除非 Reindex。

主分片会被尽可能平均地 (rebalance) 分配在不同的节点上(例如你有 2 个节点,4 个主分片(不考虑备份),那么每个节点会分到 2 个分片,后来你增加了 2 个节点,那么你这 4 个节点上都会有 1 个分片,这个过程叫 relocation,ES 感知后自动完成)。从分片只是主分片的一个副本,它用于提供数据的冗余副本,从分片和主分片不会出现在同一个节点上(防止单点故障),默认情况下一个索引创建 5 个主分片,每个主分片会有一个从分片 (5 primary + 5 replica = 10 个分片)。如果你只有一个节点,那么 5 个 replica 都无法被分配 (unassigned),此时 cluster status 会变成 Yellow。
分片是独立的,对于一个 Search Request 的行为,每个分片都会执行这个 Request。每个分片都是一个 Lucene Index,所以一个分片只能存放 Integer.MAX_VALUE - 128 = 2,147,483,519 个 docs。
例子:
在这里插入图片描述

段(Segment)-------分片的组成单元

即多个段构成一个分片,段是检索的基本单元,所有的查询/更新都是基于段来查询的

在这里插入图片描述

分词

  • 分词,即文本分析(Analysis) - 是把全文本转换成一系列的单词(term /token)的过程,也叫分词。通过分词器(Analyzer)来实现,分词器会有很多,ES有内置的,也可以按需定制化分词器。如下例子:
    在这里插入图片描述

除了在数据写入时转换词条,匹配 Query 语句时候也需要用相同的分析器对查询语句进行分析

分词器

由三部分组成。

  • Character Filters (针对原始文本处理,例如去除 html)
  • Tokenizer(按照规则切分为单词)
  • Token Filter (将切分的单词进行加工,小写,删除 stopwords,增加同义语)。
    在这里插入图片描述
  • CharFilters(0个或多个) + Tokenizer(恰好一个) + TokenFilters(0个或多个)

stopwords:停用词:指在信息检索中,为节省存储空间和提高搜索效率,在处理自然语言数据(或文本)之前或之后会自动过滤掉某些字或词,这些字或词即被称为Stop Words(停用词)。这些停用词都是人工输入的,主要包括英文字符(a,an,the,that 等)、数字、数学字符、标点符号及使用频率特高的单汉字(的,在,了,啊等)。

ES中内置的分词器

8 种:

  • Standard Analyzer - 默认分词器,按词切分,小写处理
  • Simple Analyzer - 按照非字母切分(符号被过滤),小写处理
  • Stop Analyzer - 小写处理,停用词过滤(the ,a,is)
  • Whitespace Analyzer - 按照空格切分,不转小写
  • Keyword Analyzer - 不分词,直接将输入当做输出
  • Patter Analyzer - 正则表达式,默认 \W+
  • Language - 提供了 30 多种常见语言的分词器
  • Customer Analyzer 自定义分词器
使用 _analyzer Api

此API的作用主要是三种。

  1. 直接指定 Analyzer 进行对传入数据分析
  2. 指定索引的字段查看该索引字段是如何分词的
  3. 自定义分词进行测试
    在这里插入图片描述
默认分词器 Standard Analyzer 和 Keyword Analyzer

在这里插入图片描述
在这里插入图片描述
中文分词:IK分词器

搜索

搜索API

ES的搜索API分为两类,一类是URL Search(即在 URL 中使用查询参数),另一类是Request Body Search(使用 Elasticsearch 提供的,基于 JSON 格式的格式更加完备的 Query Dpmain Specific Language (DSL)),目前我们工作中使用的是 Request Body Search。
在这里插入图片描述
在这里插入图片描述

检索

term 查询:单个精确值查找(term query),包含:范围查询,前缀查询。对输入不会做分词处理。

在进行精确值查找时, 我们会使用过滤器(filters)。过滤器很重要,因为它们执行速度非常快,不会计算相关度(直接跳过了整个评分阶段)而且很容易被缓存。如下: 使用 constant_score 查询 (性能高)以非评分模式来执行 term 查询并以一作为统一评分。
在这里插入图片描述

全文搜索:会对输入的查询进行分词。然后每个词项逐个进行底层的查询,最终将结果进行合并。并为每个文档生成一个算分。 例如查 “Martix reloaded”, 会查到包括 Matrix 或者 reload 的所有结果。

bool 查询

一个 bool 查询,是一个或者多个查询子句的组合
在这里插入图片描述

  • must ——所有的语句都 必须(must) 匹配,与 AND 等价。
  • must_not ——所有的语句都 不能(must not) 匹配,与 NOT 等价。
  • should ——至少有一个语句要匹配,与 OR 等价。
  • filter——必须匹配,运行在非评分&过滤模式。在这里插入图片描述
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值