一、Elasticsearch简介
Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。
Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。Elasticsearch是分布式的,这意味着索引可以被分成分片,每个分片可以有0个或多个副本。每个节点托管一个或多个分片,并充当协调器将操作委托给正确的分片。再平衡和路由是自动完成的。相关数据通常存储在同一个索引中,该索引由一个或多个主分片和零个或多个复制分片组成。一旦创建了索引,就不能更改主分片的数量。
二、Elasticsearch相关概念
Elasticsearch具有映射(mapping)、索引(index)、类型(type)、文档(document)、副本和分片等概念。
索引表示一类数据的结构,类似关系型数据库中数据表结构的概念,但是并不规定这类数据中的所有结构都相同
映射是给索引定义的结构设置类型等配置,比如字段数据结构类型和是否开启索引等,映射只能添加字段配置,不可修改字段配置
类型是用来在逻辑上给索引中的所有数据划分成多个部分,在7.x及以上版本删掉这一概念,类型统一定义为 _doc 类型
文档Elasticsearch存储的一个个数据对象就是文档,并且这些数据对象是JSON结构的,类型关系型数据库中一行数据的概念,文档中的每个字段都可以被索引。一个索引中的所有文档的ID都应该是不同的。
副本就是文档的冗余存储,是存储多几份文档数据
分片分片就是给文档数据划分成多份数据,并且每份数据存储在不同的地方
三、基本操作
对Elasticsearch服务器执行相关数据操作时,可以发送HTTP或者HTTPS请求,也可以使用Kibana执行相关命令,在使用Kibana执行数据操作时,Kibana版本需要与Elasticsearch版本相对应。以下相关操作基于Eibana7.17.17和Elasticsearch7.17.17。
1、索引基本操作
创建名称为user的索引
shell
PUT /user
响应:
json
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "user"
}
查看名称为name索引信息
shell
GET /user
响应
json
{
"user" : { # 索引名称
"aliases" : { }, # 索引别名
"mappings" : { }, # 索引映射
"settings" : { # 索引配置
"index" : {
"routing" : {
"allocation" : {
"include" : {
"_tier_preference" : "data_content"
}
}
},
"number_of_shards" : "1", # 分片数量
"provided_name" : "user",
"creation_date" : "1708869404053",
"number_of_replicas" : "1", # 副本数量
"uuid" : "7CTQFVh1QOmjZ3bopH-gQA",
"version" : {
"created" : "7171799"
}
}
}
}
}
删除名称为user的索引
shell
DELETE /user
响应
json
{
"acknowledged" : true
}
获取全部索引
shell
方式一:
GET /_all
方式二:
GET /_cat/indices?v
判断名称为user的索引是否存在
shell
# 状态码为200表示存在,404表示不存在
HEAD /user
2、映射基本操作
给名称为user的索引配置映射
shell
POST /user/_mapping
{ # 响应体
"properties": {
"name": { # 索引字段名称
"type": "text" # 字段数据结构
},
"age": { # 索引字段名称
"type": "long" # 字段数据结构
}
}
}
响应
json
{
"acknowledged" : true
}
查看名称为user的索引映射配置
shell
GET /user/_mapping
响应
json
{
"user" : {
"mappings" : {
"properties" : {
"age" : {
"type" : "long"
},
"name" : {
"type" : "text"
}
}
}
}
}
获取所有映射配置
shell
方式一:
GET /_mapping
方式二:
GET /_all/_mapping
向映射配置中新增字段配置,如果需要删除映射配置,只能删除索引
shell
POST /user/_mapping
{
"properties": {
"school": {
"type": "text"
}
}
}
响应
json
{
"acknowledged" : true
}
3、文档基本操作
添加文档
shell
PUT /user/_doc/111
{
"name": "zhansang",
"age": 18,
"school": "华南理工大学"
}
响应
json
{
"_index" : "user",
"_type" : "_doc",
"_id" : "111",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 2
}
获取文档
shell
GET /user/_doc/111
响应
json
{
"_index" : "user",
"_type" : "_doc",
"_id" : "111",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 2,
"found" : true,
"_source" : {
"name" : "zhansang",
"age" : 18,
"school" : "华南理工大学"
}
}
修改文档
shell
方式一:使用添加文档操作来对文档进行全部字段修改
方式二:对文档部分字段进行修改或添加字段
POST /user/_update/111
{
"doc": {
"age": 19
}
}
删除文档字段
shell
POST /user/_update/111
{
"script": "ctx._source.remove(\"class\")"
}
查看指定文档
shell
GET /user/_doc/111