Elasticsearch 入门实战(1)--简介

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎;本文主要介绍其基本概念。

1、概述

1.1、Elasticsearch 是什么

Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用 Elasticsearch 的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到 Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。

Elasticsearch 可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。Elasticsearch 是分布式的,这意味着索引可以被分成分片,每个分片可以有 0 个或多个副本。每个节点托管一个或多个分片,并充当协调器将操作委托给正确的分片。再平衡和路由是自动完成的。相关数据通常存储在同一个索引中,该索引由一个或多个主分片和零个或多个复制分片组成。一旦创建了索引,就不能更改主分片的数量。

1.2、Elasticsearch 索引是什么

Elasticsearch 索引指相互关联的文档集合。Elasticsearch 会以 JSON 文档的形式存储数据。每个文档都会在一组(字段或属性的名称)和它们对应的值(字符串、数字、布尔值、日期、数值组、地理位置或其他类型的数据)之间建立联系。

Elasticsearch 使用的是一种名为倒排索引的数据结构,这一结构的设计可以允许十分快速地进行全文本搜索。倒排索引会列出在所有文档中出现的每个特有词汇,并且可以找到包含每个词汇的全部文档。

在索引过程中,Elasticsearch 会存储文档并构建倒排索引,这样用户便可以近实时地对文档数据进行搜索。索引过程是在索引 API 中启动的,通过此 API 您既可向特定索引中添加 JSON 文档,也可更改特定索引中的 JSON 文档。

1.3、Elasticsearch 用途

Elasticsearch 在速度和可扩展性方面都表现出色,而且还能够索引多种类型的内容,这意味着其可用于多种用例:

  • 应用程序搜索
  • 网站搜索
  • 企业搜索
  • 日志处理和分析
  • 基础设施指标和容器监测
  • 应用程序性能监测
  • 地理空间数据分析和可视化
  • 安全分析
  • 业务分析

2、Elasticsearch 相关概念

2.1、Index(索引)

索引是具有相似结构的文档的集合, 等同于 Solr 中的集合;每个索引有唯一的名称, 名称小写。索引类似 MySQL 中 database 概念。

2.2、Document(文档)

文档是存储在 ES 中的 JSON 格式的字符串, 由 field(字段) 构成。

2.3、Field(字段)

字段可以是一个简单的值(如字符串、数字、日期), 也可以是一个数组, 还可以嵌套一个对象或多个对象。字段类似于关系数据库中表数据的列, 每个字段都对应一个类型. 可以指定如何分析某一字段的值, 即对 field 指定分词器。

2.4、Type(类型)

type 是 index 的逻辑分类, 在 ES 6.x 版本之前, 每个索引中可以定义一个或多个 type, 而在 6.X 版本之后, 一个 index 中只能定义一个 type。通常,会为具有一组共同字段的文档定义一个 type。

2.5、Mapping(映射)

mapping 是对字段的定义说明,如某个字段的数据类型、默认值、分析器、是否被索引等等;类似于 Solr 中 schema.xml 约束文件的作用。

2.6、Node(节点)

node 指的是 ES 的单个正在运行的实例。单个物理和虚拟服务器容纳多个节点,这取决于其物理资源的能力,如 RAM,存储和处理能力。

2.7、Cluster(集群)

cluster 是一个或多个 node 的集合,cluster 为整个数据提供跨所有节点的集合索引和搜索功能。

2.8、Shard(分片)

单个 node 无法存储大量的索引数据, ES 可以把一个索引分成多个分片, 分布到不同的 node 上, 从而构成分布式索引。每个分片都是一个 Lucene 实例, 也就是说每个分片底层都有一个单独的 Lucene 提供独立的索引和检索服务, 它们可以托管在集群的任一 node 上。

分片可以实现集群的水平扩展,提高系统的性能和吞吐量。

2.9、Replica(副本)

可以为 shard 创建副本,提高数据的安全性。建立索引时, 系统会先将索引存储在主分片(Primary Shard)中, 然后再将主分片中的索引复制到副本分片(Replica Shard)中。副本提高了系统的可用性、容错性和吞吐量。

2.10、Elasticsearch 和 RDBMS 的对比

Elasticsearch RDBMS
Index(索引) DataBase(数据库)
Type(类型) Table(表)
Document(文档) Row(行)
Field(字段) Column(列)
Mapping(映射) Schema(约束)
Query DSL(ES 的查询语言) SQL(结构化查询语言)

3、Elasticsearch 字段类型

3.1、Common types

字段类型   说明
binary   二进制类型,存储 Base64 编码后的数据
boolean   布尔类型,False values: false, "false", "" (empty string);True values: true, "true"
Keywords keyword  关键字类型,不就行分词处理
  constant_keyword 当所有文档的某个 keyword 字段具有相同值时,可以使用该字段
  wildcard 用于 wildcard 查询,具有更高的效率
Numbers long -2^63~2^63-1
  integer -2^31~2^31-1
  short -32768~32767
  byte -128~127
  double 双精度 64 位 IEEE 754 浮点数
  float 单精度 32 位 IEEE 754 浮点数
  half_float 半精度 16 位 IEEE 754 浮点数
  scaled_float 带缩放因子的缩放类型浮点数,需配合缩放因子 scaling_factor 一起使用。
  unsigned_long 无符号 64 位整数,0~2^64-1
Dates date

日期类型,可以存储以下格式(通过format指定格式,可指定多个格式):
A、字符串,如:"2015-01-01" or "2015/01/01 12:10:30"(format 为:"yyyy/MM/dd" 或 "yyyy/MM/dd HH:mm:ss")
B、milliseconds-since-the-epoch(format 为:epoch_millis)
C、seconds-since-the-epoch(format 为:epoch_second)

  date_nanos

date 类型以毫秒为粒度存储日期,date_nanos 以纳秒为粒度存储日期

alias  

设置字段别名

3.2、Objects and relational types

字段类型   说明
object   JSON 对象类型

3.3、Structured data types

字段类型   说明
Range   范围字段类型表示上限和下限之间的连续值范围,使用 gt 或 gte 来定义下限,使用 lt 或 lte 来定义上限。
  integer_range -2^31~2^31-1
  float_range 单精度 32 位 IEEE 754 浮点数值范围
  long_range -2^63~2^63-1
  double_range 双精度 64 位 IEEE 754 浮点数值范围
  date_range 日期值范围
  ip_range ip 范围,支持 IPv4 和 IPv6
ip   ip 类型,支持 IPv4 和 IPv6

3.4、Text search types

字段类型   说明
text fields text 文本类型,会就行分词处理
  match_only_text 一种空间优化的 text 变体,它禁用评分,并且位置查询较慢。它最适合用于索引日志消息。

3.5、Spatial data types

字段类型   说明
geo_point   经纬度类型
     

4、Elasticsearch 分词器

分词器 说明
standard 默认分词器,按词切分,小写处理
simple 按照非字母切分(符号被过滤),小写处理
stop 小写处理,停用词过滤(the ,a,is)
whitespace 按照空格切分,不转小写
keyword 不分词,直接将输入当做输出
pattern 正则表达式,默认 \W+
   
ik_smart ik 分词器,只分一次,句子里面的每个字只会出现一次
ik_max_word ik 分词器,句子的字可以反复出现。

5、Elasticsearch 逻辑架构图

RESTful Style API:RESTful 风格接口。
Java(Netty):Java 客户端。
Transport:集群与客户端交互方式。
Disvcovery:节点发现及 master 选举。Zen 属于 ES 的特殊发现机制,也是 ES 的内置发现机制,它提供了两种发现方式:单播和多播。EC2 是另外一种插件形式的发现机制。
Scripting:脚本功能,支持 mvel、js、python等。
3rd plugins:第三方插件。
Index Moudle:索引模块。
Search Moudle:查询模块。
Mapping:映射信息。
River:用于其他数据源中获取数据,该项功能以插件的形式存在,目前支持的数据源:RabbitMQ、ActiveMQ、CSV、FileSystem、JDBC、GitHub、Kafka 等;针对关系型数据库提供了统一的 jdbc-river 来进行数据操作。
DistributedLucene Directory:Lucene 数据目录。
Gateway:ElasticSearch 索引的持久化存储方式。Gateway支持多种类型:本地文件系统(默认)、分布式文件系统 Hadoop 以及 AMZ 的 S3 云存储服务。

6、Elasticsearch 组件关系图

 

 

 

posted @ 2022-06-25 11:07  且行且码  阅读(302)  评论(0编辑  收藏  举报