栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

ES 入门

ES 入门

文章目录

基本概念

(1)索引、文档、REST API

文档索引Type与关系型数据库的类比REST API ----很容易被各种语言调用 (2)节点、集群、分片及副本

节点---就是指集群下的一个节点分片---其实就是倒排索引 分词

分词器

ES中内置的分词器

使用 _analyzer Api默认分词器 Standard Analyzer 和 Keyword Analyzer 搜索

搜索API检索

term 查询:单个精确值查找(term query),包含:范围查询,前缀查询。对输入不会做分词处理。全文搜索:会对输入的查询进行`分词`。然后每个词项逐个进行底层的查询,最终将结果进行合并。并为每个文档生成一个算分。 例如查 “Martix reloaded”, 会查到包括 Matrix 或者 reload 的所有结果。bool 查询

基本概念 (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 (代理节点:类比于消息队列中的代理)

    负责接收 Client 的请求,将请求分发到合适的节点,最终把结果汇聚到一起每个节点默认都起到 Coorinating Node 的职责

Hot & Warm Node (冷热节点)
不同的硬件配置的 Data Node, 用来实现 Hot(热数据) & Warn(旧数据)架构,以降低集群部署的成本Machine Learning Node
负责跑机器学习的 JOB,用来做异常检测Tribe Node (未来要被淘汰)
5.3 开始使用 Cross Cluster Serach 分片—其实就是倒排索引

每个分片其实就是一个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。
例子:

分词

分词,即文本分析(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的作用主要是三种。

    直接指定 Analyzer 进行对传入数据分析指定索引的字段查看该索引字段是如何分词的自定义分词进行测试
默认分词器 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——必须匹配,运行在非评分&过滤模式。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/742686.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号