Elasticsearch简单入门

一、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

其它API参考

相关推荐
jwolf242 分钟前
Elasticsearch向量搜索:从语义搜索到图搜图只有一步之遥
elasticsearch·搜索引擎·ai
你可以叫我仔哥呀2 小时前
ElasticSearch学习笔记三:基础操作(一)
笔记·学习·elasticsearch
hummhumm2 小时前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
java1234_小锋6 小时前
Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?
大数据·elasticsearch·jenkins
Elastic 中国社区官方博客6 小时前
Elasticsearch 开放推理 API 增加了对 IBM watsonx.ai Slate 嵌入模型的支持
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
我的运维人生6 小时前
Elasticsearch实战应用:构建高效搜索与分析平台
大数据·elasticsearch·jenkins·运维开发·技术共享
Mephisto.java10 小时前
【大数据学习 | Spark】Spark的改变分区的算子
大数据·elasticsearch·oracle·spark·kafka·memcache
mqiqe10 小时前
Elasticsearch 分词器
python·elasticsearch
小马爱打代码10 小时前
Elasticsearch简介与实操
大数据·elasticsearch·搜索引擎
java1234_小锋19 小时前
Elasticsearch是如何实现Master选举的?
大数据·elasticsearch·搜索引擎