还不会ES?Elasticsearch快速入门实操指南送上(上)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 还不会ES?Elasticsearch快速入门实操指南送上(上)

前言


本文主要介绍ES的常用请求,让大家能快速上手ES的使用


主要参考官网的Quick start指引。


一、请求方式


Elasticsearch发送请求主要有2种方式:

1、使用rest api发送http请求,比如curl命令


curl -X GET -u elastic:123456  "localhost:9200/?pretty"


2、使用Kibana’s console的请求工具

进入kibana界面,打开控制台——》开发工具

66.png


官网中的示例代码可以直接拷贝到Kibana中执行,也可以Copy as curl复制到服务器上执行curl请求。

65.png

通过设置按钮,还可以配置对应的kibana控制台的相关信息。这样当点击View in Console就能直接跳转到

我们自己安装的kibana的控制台。

64.png


这里为了请求的方便和简洁性,下面的演示中都是采用Kibana’s console的请求工具向ES发送请求。


二、创建索引


创建索引时,注意一下三点:

1、设置索引的settings属性

2、设置索引的mappings属性

3、设置索引的别名


官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.13/indices-create-index.html


方式一:只创建索引


PUT my-index-000001


方式二:创建索引并同时指定settings、mappings、aliases

PUT my-index-000001
{
  "settings": {
        "number_of_shards": "4",
        "number_of_replicas": "0",
        "index": {
            "refresh_interval": "30s"
        }
  },
  "mappings": {
    "properties": {
      "content": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_smart"
      },
      "name": {
        "type": "keyword"
      },
      "age": {
        "type": "integer"
      },
      "@timestamp" : {
          "type" : "date"
        }
    }
  },
   "aliases": {
    "alias1": {}
  }
}


说明:

采用PUT命令创建索引my-index-000001,并同时设置索引的settings和mappings。


settings主要用来配置索引的一些全局属性,比如分片数,副本数,刷新频次,等。示例中通过number_of_shards指定了索引的分片数为1。


mappings主要用来声明索引中包含的字段和类型,对应关系型数据库中的表结构声明。


三、设置setting


number_of_shards

说明:索引分片数量

索引分片数在索引创建好了之后就不能调整了,只能重建索引


number_of_replicas

说明:用来控制索引的副本数量


index.refresh_interval

说明:索引刷新频率

数据写入后几秒可以被搜索到,默认是 1s。每次索引的 refresh 会产生一个新的 lucene 段, 这会导致频繁的合并行为,如果业务需求对实时性要求没那么高,可以将此参数调大,实际调优告诉我,该参数确实很给力,cpu 使用率直线下降。


设置settings:

PUT /my-index-000001
{
  "settings": {
    "index": {
      "number_of_shards": 3,  
      "number_of_replicas": 2 
    }
  }
}

也可以简写成:

PUT /my-index-000001
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  }
}


修改settings:

说明:修改索引的副本数目。

PUT my-index-000001/_settings
{
  "number_of_replicas": "2"
}


查看索引的详情:


GET /my-index-000001/


查看索引的settings:


GET /my-index-000001/_settings


查看索引的mapping:


GET /my-index-000001/_mapping


注意⚠️:

分片数number_of_shards的属性在索引创建后就不能修改了。


四、设置mapping


说明:

映射是定义文档及其包含的字段如何存储和索引的过程。

每个文档都是字段的集合,每个字段都有自己的数据类型。 映射数据时,您创建一个映射定义,其中包含与文档相关的字段列表。 映射定义还包括元数据字段,例如 _source 字段,用于自定义处理文档相关元数据的方式。

mapping属性主要用来设置索引中的字段名称和字段类型以及text字段的分词策略。


官网对mapping的介绍:

https://www.elastic.co/guide/en/elasticsearch/reference/7.13/mapping.html


mapping主要有2种类型:

1、自动映射 Dynamic mapping

当 Elasticsearch 在文档中检测到新字段时,它默认动态地将该字段添加到类型映射中。

也就是添加数据时,发现新的字段会自动添加类型映射。


2、精确映射 Explicit mapping

由用户自己定义索引的映射,这种方式会更加精准。


注意⚠️:

ES的mapping可以新增字段,但是对于已经存在的字段,只能添加属性,不能修改字段的类型。

如果需要修改已经存在的字段的type类型,只能进行重建索引reindex。

ES的mapping并不是不能修改,只是不能对已经存在的字段类型进行修改。


获取索引的mapping信息


GET /my-index-000001/_mapping


获取索引中单个字段的mapping信息


GET /my-index-000001/_mapping/field/content


设置mapping信息

PUT /my-index-000001/_mapping
{
     "dynamic": false, 
     "properties": {
      "content": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_smart"
      },
      "name": {
        "type": "keyword"
      },
      "age": {
        "type": "integer"
      },
      "@timestamp" : {
          "type" : "date",
          "format": "yyyy-MM-dd HH:mm:ss"
        }
    }
}


PUT /my-index-000001
{
  "mappings": {
    "dynamic": false, 
    "properties": {
      "content": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_smart"
      },
      "name": {
        "type": "keyword"
      },
      "age": {
        "type": "integer"
      },
      "@timestamp" : {
          "type" : "date",
          "format": "yyyy-MM-dd HH:mm:ss"
        }
    }
  }
}


说明:

给索引添加4个字段,content、name、age、@timestamp。

其中content类型为text,会进行分词匹配,设置分词器为ik_max_word,查询分词器为ik_smart。


如果时间字段需要指定多种格式,可以采用如下方式声明:

"create_time" : {
     "type" : "date",
    "format" : "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}


dynamic 参数控制是否动态添加新字段,并接受以下参数:


true

新字段被添加到映射中(默认)。


runtime

新字段作为运行时字段添加到映射中。 这些字段未编入索引,并在查询时从 _source 加载。


false

新字段将被忽略。 这些字段不会被索引或可搜索,但仍会出现在返回命中的 _source 字段中。 这些字段不会添加到映射中,必须显式添加新字段。


strict

如果检测到新字段,则会抛出异常并拒绝文档。 新字段必须显式添加到映射中。


给索引增加一个新的字段映射:

PUT /my-index-000001/_mapping
{
  "properties": {
    "email": {
      "type": "keyword"
    }
  }
}


五、设置索引别名


官网介绍:https://www.elastic.co/guide/en/elasticsearch/reference/7.13/indices-aliases.html


索引别名是用于引用一个或多个现有索引的辅助名称。

大多数 Elasticsearch API 接受索引别名来代替索引。


一个索引别名能关联多个索引。可以用索引别名来代替真实索引名称查询。


方式一:创建索引时指定别名

PUT /my-index-000001
{
  "aliases": {
    "alias_1": {}
  }
}

方式二:给已经存在的索引新增索引别名

POST /_aliases
{
  "actions" : [
    { "add" : { "index" : "my-index-000001", "alias" : "alias1" } }
  ]
}


移除索引别名:

POST /_aliases
{
  "actions" : [
    { "remove" : { "index" : "my-index-000001", "alias" : "alias1" } }
  ]
}

重命名索引别名:

POST /_aliases
{
  "actions" : [
    { "remove" : { "index" : "my-index-000001", "alias" : "alias1" } },
    { "add" : { "index" : "my-index-000001", "alias" : "alias2" } }
  ]
}


六、添加数据


1、单条添加

指定索引ID添加单条数据

PUT /my-index-000001/_doc/1
{"content": "小天今天在研究大数据", "name": "小天", "age": 25,"@timestamp": "2018-05-08 16:25:42"}


自动生成索引ID添加单条数据

POST my-index-000001/_doc
{"content": "小天尝试通过POST添加单条数据", "name": "小天", "age": 25,"@timestamp": "2018-05-08 16:25:42"}
POST /my-index-000001/_doc?op_type=create
{"content": "小天今天去钓鱼", "name": "小天", "age": 25,"@timestamp": "2018-05-08 16:25:42"}


2、批量添加

通过bulk命令实现批量添加数据,可以通过create属性指定id,如果不指定则自动生成索引ID。

PUT /my-index-000001/_bulk
{ "create": { } }
{"content": "小明同学觉得java是最好的编程语言", "name": "小明", "age": 20,"@timestamp": "2020-05-08 16:25:42"}
{ "create":  {  "_id": "20210602060517329146" }}
{"content": "小明同学今天学习编程5个小时", "name": "小明", "age": 20,"@timestamp": "2020-05-08 16:25:42"}


通过添加refresh,批量添加数据后,立刻刷新索引。保证大批量的添加数据后,索引立刻刷新,可以立刻被检索到。

PUT /my-index-000001/_bulk?refresh
{ "create": { } }
{"content": "路见不平,拔刀相助", "name": "小李", "age": 29,"@timestamp": "2019-05-08 16:25:42"}


七、关闭索引


POST /my-index-000001/_close?wait_for_active_shards=0


八、开启索引


POST /my-index-000001/_open


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
2月前
|
数据可视化 Java Windows
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
本文介绍了如何在Windows环境下安装Elasticsearch(ES)、Elasticsearch Head可视化插件和Kibana,以及如何配置ES的跨域问题,确保Kibana能够连接到ES集群,并提供了安装过程中可能遇到的问题及其解决方案。
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
|
1月前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
109 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
1月前
|
自然语言处理 搜索推荐 Java
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(一)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图
49 0
|
1月前
|
存储 自然语言处理 搜索推荐
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
34 0
|
2月前
|
JSON 自然语言处理 数据库
ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入
概念、ik分词器、倒排索引、索引和文档的增删改查、RestClient对索引和文档的增删改查
ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入
|
3月前
|
自然语言处理 Java 索引
ElasticSearch 实现分词全文检索 - Java SpringBoot ES 文档操作
ElasticSearch 实现分词全文检索 - Java SpringBoot ES 文档操作
41 0
|
3月前
|
自然语言处理 Java 索引
ElasticSearch 实现分词全文检索 - Java SpringBoot ES 索引操作
ElasticSearch 实现分词全文检索 - Java SpringBoot ES 索引操作
43 0
|
7天前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
20 5
|
2月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
3月前
|
数据可视化 Docker 容器
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
这篇文章提供了通过Docker安装Elasticsearch和Kibana的详细过程和图解,包括下载镜像、创建和启动容器、处理可能遇到的启动失败情况(如权限不足和配置文件错误)、测试Elasticsearch和Kibana的连接,以及解决空间不足的问题。文章还特别指出了配置文件中空格的重要性以及环境变量中字母大小写的问题。
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】