elasticsearch组件
阅读原文时间:2023年07月09日阅读:5

Elasticsearch 是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据。 它被用作全文检索、结构化搜索、分析以及这三个功能的组合

ElasticSearch(简称ES)是一个基于Lucene构建的开源、分布式、RESTful的全文本搜索引擎。

一、ES理论知识

ElasticSearch不仅只是一个全文本搜索引擎,它还是一个分布式实时文档存储,其中每个field均是被索引的数据且可被搜索;也是一个带实时分析功能的分布式搜索引擎,并且能够扩展至数以百计的服务器存储及处理PB级的数据。

如前所述,ElasticSearch在底层利用Lucene完成其索引功能,因此其许多基本概念源于Lucene。

1.1 索引(Index)

ES将数据存储于一个或多个索引中,索引是具有类似特性的文档的集合。类比传统的关系型数据库领域来说,索引相当于SQL中的一个数据库,或者一个数据存储方案(schema)。

索引由其名称(必须为全小写字符)进行标识,并通过引用此名称完成文档的创建、搜索、更新及删除操作。一个ES集群中可以按需创建任意数目的索引。

1.2 类型(Type)

类型是索引内部的逻辑分区(category/partition),然而其意义完全取决于用户需求。因此,一个索引内部可定义一个或多个类型(type)。一般来说,类型就是为那些拥有相同的域的文档做的预定义。

例如,在索引中,可以定义一个用于存储用户数据的类型,一个存储日志数据的类型,以及一个存储评论数据的类型。类比传统的关系型数据库领域来说,类型相当于“表”。

1.3文档(Document)

文档是Lucene索引和搜索的原子单位,它是包含了一个或多个域的容器,基于JSON格式进行表示。文档由一个或多个域组成,每个域拥有一个名字及一个或多个值,有多个值的域通常称为“多值域”。每个文档可以存储不同的域集,但同一类型下的文档应该有某种程度上的相似之处。

1.4 映射(Mapping)

ES中,所有的文档在存储之前都要首先进行分析。用户可根据需要定义如何将文本分割成token、哪些token应该被过滤掉,以及哪些文本需要进行额外处理等等。另外,ES还提供了额外功能,例如将域中的内容按需排序。事实上,ES也能自动根据其值确定域的类型。

接下去再说说ES Cluster相关的一些概念。

1.5 集群(Cluster)

ES集群是一个或多个节点的集合,它们共同存储了整个数据集,并提供了联合索引以及可跨所有节点的搜索能力。多节点组成的集群拥有冗余能力,它可以在一个或几个节点出现故障时保证服务的整体可用性。集群靠其独有的名称进行标识,默认名称为“elasticsearch”。节点靠其集群名称来决定加入哪个ES集群,一个节点只能属一个集群。如果不考虑冗余能力等特性,仅有一个节点的ES集群一样可以实现所有的存储及搜索功能。

1.6节点(Node)

运行了单个实例的ES主机称为节点,它是集群的一个成员,可以存储数据、参与集群索引及搜索操作。类似于集群,节点靠其名称进行标识,默认为启动时自动生成的随机Marvel字符名称。用户可以按需要自定义任何希望使用的名称,但出于管理的目的,此名称应该尽可能有较好的识别性。

节点通过为其配置的ES集群名称确定其所要加入的集群。

1.7分片(Shard)和副本(Replica)

ES的“分片(shard)”机制可将一个索引内部的数据分布地存储于多个节点,它通过将一个索引切分为多个底层物理的Lucene索引完成索引数据的分割存储功能,这每一个物理的Lucene索引称为一个分片(shard)。

每个分片其内部都是一个全功能且独立的索引,因此可由集群中的任何主机存储。创建索引时,用户可指定其分片的数量,默认数量为5个。Shard有两种类型:primary和replica,即主shard及副本shard。Primary shard用于文档存储,每个新的索引会自动创建5个Primary shard,当然此数量可在索引创建之前通过配置自行定义,不过,一旦创建完成,其Primary shard的数量将不可更改。

Replica shard是Primary Shard的副本,用于冗余数据及提高搜索性能。

每个Primary shard默认配置了一个Replica shard,但也可以配置多个,且其数量可动态更改。ES会根据需要自动增加或减少这些Replica shard的数量。ES集群可由多个节点组成,各Shard分布式地存储于这些节点上。ES可自动在节点间按需要移动shard,例如增加节点或节点故障时。简而言之,分片实现了集群的分布式存储,而副本实现了其分布式处理及冗余功能。

二、ES基本操作

# 获取当前es中索引信息

curl -H 'Content-Type:application/json' -XGET -u sgadmin:密码 '172.26.112.219:9200/_cat/indices?v'

# 查看未分配分片shard

curl -H 'Content-Type:application/json' -XGET -u sgadmin:密码 'esdefault:9200/_cat/shards?h=index,shard,prirep,state,unassigned.reason'|grep UNASSIGNED

# 删除索引

curl -H 'Content-Type:application/json' -XDELETE -u sgadmin:密码 'esdefault:9200/search_sys_log_v1_2021_08/'

# 创建超管用户/usr/share/elasticsearch/bin/elasticsearch-users useradd sgadmin -p "密码" -r superuser

# 创建集群用户

curl -s -XPOST -u 'sgadmin:密码'  http://esdefault:9200/_xpack/security/user/sgadmin -H "Content-Type:application/json" -d '{"password":"密码","roles":["superuser"]}'

# 查看集群用户

curl -s -XGET -u 'sgadmin:密码' 'localhost:9200/_xpack/security/user'

# 查看es集群master信息

[root@ly 17:20 ~]# curl --insecure --anyauth -u sgadmin:密码 http://10.11.48.204:9200/_cat/master?v

# 查看es集群node信息

curl --insecure --anyauth -u 用户:密码 http://172.26.203.102:9200/_cat/nodes?v# 查看es集群健康状态# 状态status为green或yellow为正常

[root@ly 17:20 ~]# curl -H 'Content-Type:application/json' -XGET -u 用户:密码 '172.26.23.205:9200/_cat/health?v'

epoch      timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent

1646299257 09:20:57  wpses   yellow          1         1    661 661    0    0      220             0                  -                 75.0%

curl -u 用户:密码 -X GET http://127.0.0.1:9200/_cat/indices?v

# 查看插件

curl -X  GET  -H 'Content-Type: application/json'  'http://sgadmin:密码@esdefault.default:9200/_cat/plugins?pretty'

# es的ik分词器功能验证

curl -H 'Content-Type:application/json' -XGET -u sgadmin:密码 'esdefault:9200/_analyze?pretty' -d '{ "text": "你好啊   " }'