1.26W字 22图详解!ElasticSearch 最全详细使用教程(下)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 1.26W字 22图详解!ElasticSearch 最全详细使用教程

17. 索引监控

17.1 查看索引状态信息

官网链接:

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-stats.html

查看所有的索引状态:

GET /_stats

查看指定索引的状态信息:

GET /index1,index2/_stats

17.2 查看索引段信息

官网链接:

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-segments.html

GET /test/_segments 
GET /index1,index2/_segments
GET /_segments

17.3 查看索引恢复信息

官网链接:
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-recovery.html

GET index1,index2/_recovery?human

GET /_recovery?human

17.4 查看索引分片的存储信息

官网链接:

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-shards-stores.html

# return information of only index test
GET /test/_shard_stores
# return information of only test1 and test2 indices
GET /test1,test2/_shard_stores
# return information of all indices
GET /_shard_stores
  GET /_shard_stores?status=green

18. 索引状态管理

18.1 Clear Cache 清理缓存

POST /twitter/_cache/clear

默认会清理所有缓存,可指定清理query, fielddata or request 缓存

POST /kimchy,elasticsearch/_cache/clear
POST /_cache/clear

18.2 Refresh,重新打开读取索引

POST /kimchy,elasticsearch/_refresh
POST /_refresh

18.3 Flush,将缓存在内存中的索引数据刷新到持久存储中

POST twitter/_flush

18.4 Force merge 强制段合并

POST /kimchy/_forcemerge?only_expunge_deletes=false&max_num_segments=100&flush=true

可选参数说明:


max_num_segments 合并为几个段,默认1

only_expunge_deletes 是否只合并含有删除文档的段,默认false

flush 合并后是否刷新,默认true

POST /kimchy,elasticsearch/_forcemerge
POST /_forcemerge

三、映射详解



1. Mapping 映射是什么

映射定义索引中有什么字段、字段的类型等结构信息。相当于数据库中表结构定义,或 solr中的schema。因为lucene索引文档时需要知道该如何来索引存储文档的字段。
ES中支持手动定义映射,动态映射两种方式。

1.1. 为索引创建mapping

 PUT test
{
<!--映射定义 -->
"mappings" : {
<!--名为type1的映射类别 mapping type-->
        "type1" : {
        <!-- 字段定义 -->
            "properties" : {
            <!-- 名为field1的字段,它的field datatype 为 text -->
                "field1" : { "type" : "text" }
            }
        }
    }
}

说明:映射定义后续可以修改

2. 映射类别 Mapping type 废除说明

ES最先的设计是用索引类比关系型数据库的数据库,用mapping type 来类比表,一个索引中可以包含多个映射类别。这个类比存在一个严重的问题,就是当多个mapping type中存在同名字段时(特别是同名字段还是不同类型的),在一个索引中不好处理,因为搜索引擎中只有 索引-文档的结构,不同映射类别的数据都是一个一个的文档(只是包含的字段不一样而已)

从6.0.0开始限定仅包含一个映射类别定义( "index.mapping.single_type": true ),兼容5.x中的多映射类别。从7.0开始将移除映射类别。
为了与未来的规划匹配,请现在将这个唯一的映射类别名定义为“_doc”,因为索引的请求地址将规范为:PUT {index}/_doc/{id} and POST {index}/_doc

Mapping 映射示例:

PUT twitter
{
  "mappings": {
    "_doc": {
      "properties": {
        "type": { "type": "keyword" },
        "name": { "type": "text" },
        "user_name": { "type": "keyword" },
        "email": { "type": "keyword" },
        "content": { "type": "text" },
        "tweeted_at": { "type": "date" }
      }
    }
  }
}

多映射类别数据转储到独立的索引中:


ES 提供了reindex API 来做这个事

image.png

3. 字段类型 datatypes

字段类型定义了该如何索引存储字段值。ES中提供了丰富的字段类型定义,请查看官网链接详细了解每种类型的特点:

https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html

3.1 Core Datatypes     核心类型

string
    text and keyword
Numeric datatypes
    long, integer, short, byte, double, float, half_float, scaled_float
Date datatype
    date
Boolean datatype
    boolean
Binary datatype
    binary
Range datatypes     范围
    integer_range, float_range, long_range, double_range, date_range

3.2 Complex datatypes 复合类型

Array datatype
    数组就是多值,不需要专门的类型
Object datatype
    object :表示值为一个JSON 对象
Nested datatype
    nested:for arrays of JSON objects(表示值为JSON对象数组 )

3.3 Geo datatypes  地理数据类型

Geo-point datatype
    geo_point:for lat/lon points  (经纬坐标点)
Geo-Shape datatype
    geo_shape:for complex shapes like polygons (形状表示)

3.4 Specialised datatypes 特别的类型

IP datatype
    ip:for IPv4 and IPv6 addresses
Completion datatype
    completion:to provide auto-complete suggestions
Token count datatype
    token_count:to count the number of tokens in a string
mapper-murmur3
    murmur3:to compute hashes of values at index-time and store them in the index
Percolator type
    Accepts queries from the query-dsl
join datatype
    Defines parent/child relation for documents within the same index

4. 字段定义属性介绍

字段的type (Datatype)定义了如何索引存储字段值,还有一些属性可以让我们根据需要来覆盖默认的值或进行特别定义。请参考官网介绍详细了解:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-params.html

 analyzer   指定分词器
    normalizer   指定标准化器
    boost        指定权重值
    coerce      强制类型转换
    copy_to    值复制给另一字段
    doc_values  是否存储docValues
    dynamic
    enabled    字段是否可用
    fielddata
    eager_global_ordinals
    format    指定时间值的格式
    ignore_above
    ignore_malformed
    index_options
    index
    fields
    norms
    null_value
    position_increment_gap
    properties
    search_analyzer
    similarity
    store
    term_vector

字段定义属性—示例

PUT my_index
{
  "mappings": {
    "_doc": {
      "properties": {
        "date": {
          "type":   "date",
           <!--格式化日期 -->
          "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
        }
      }
    }
  }
}

5. Multi Field 多重字段

当我们需要对一个字段进行多种不同方式的索引时,可以使用fields多重字段定义。如一个字符串字段即需要进行text分词索引,也需要进行keyword 关键字索引来支持排序、聚合;或需要用不同的分词器进行分词索引。


示例:


定义多重字段:


说明:raw是一个多重版本名(自定义)

PUT my_index
{
  "mappings": {
    "_doc": {
      "properties": {
        "city": {
          "type": "text",
          "fields": {
            "raw": {
              "type":  "keyword"
            }
          }
        }
      }
    }
  }
}

往多重字段里面添加文档

PUT my_index/_doc/1
{
  "city": "New York"
}
PUT my_index/_doc/2
{
  "city": "York"
}

获取多重字段的值:

PUT my_index/_doc/1
{
  "city": "New York"
}
PUT my_index/_doc/2
{
  "city": "York"
}

6. 元字段

官网链接:
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-fields.html

元字段是ES中定义的文档字段,有以下几类:

image.png

7. 动态映射

动态映射:ES中提供的重要特性,让我们可以快速使用ES,而不需要先创建索引、定义映射。如我们直接向ES提交文档进行索引:

PUT data/_doc/1
{ "count": 5 }

ES将自动为我们创建data索引、_doc 映射、类型为 long 的字段 count


索引文档时,当有新字段时, ES将根据我们字段的json的数据类型为我们自动加人字段定义到mapping中。


7.1 字段动态映射规则

image.png7.2 Date detection 时间侦测


所谓时间侦测是指我们往ES里面插入数据的时候会去自动检测我们的数据是不是日期格式的,是的话就会给我们自动转为设置的格式

date_detection 默认是开启的,默认的格式dynamic_date_formats为:

[ "strict_date_optional_time","yyyy/MM/dd HH:mm:ss Z||yyyy/MM/dd Z"]
PUT my_index/_doc/1
{
  "create_date": "2015/09/02"
}
GET my_index/_mapping

自定义时间格式:

PUT my_index
{
  "mappings": {
    "_doc": {
      "dynamic_date_formats": ["MM/dd/yyyy"]
    }
  }
}

禁用时间侦测:

PUT my_index
{
  "mappings": {
    "_doc": {
      "date_detection": false
    }
  }
}

7.3 Numeric detection  数值侦测


开启数值侦测(默认是禁用的)

PUT my_index
{
  "mappings": {
    "_doc": {
      "numeric_detection": true
    }
  }
}
PUT my_index/_doc/1
{
  "my_float":   "1.0",
  "my_integer": "1"
}
相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
Java Linux 数据安全/隐私保护
百度搜索:蓝易云【centos7系统安装elasticsearch8.7.0,并设置密码访问教程。】
现在,您已经成功安装并设置密码访问Elasticsearch 8.7.0。您可以使用设置的密码来访问和管理Elasticsearch实例。
219 1
|
7月前
|
存储 自然语言处理 网络协议
【elastic search】下载安装、使用教程
【elastic search】下载安装、使用教程
91 1
|
6月前
|
Java 索引 Spring
教程:Spring Boot中集成Elasticsearch的步骤
教程:Spring Boot中集成Elasticsearch的步骤
|
7月前
|
搜索推荐 Java 索引
教程:Spring Boot中集成Elasticsearch的步骤
教程:Spring Boot中集成Elasticsearch的步骤
|
8月前
|
安全 搜索推荐 定位技术
一张图30个知识点,全方位认知 Elasticsearch 技术发展
一张图30个知识点,全方位认知 Elasticsearch 技术发展
102 3
|
自然语言处理 关系型数据库 定位技术
分布式系列教程(35) -ElasticSearch文档映射
分布式系列教程(35) -ElasticSearch文档映射
81 0
|
JSON 自然语言处理 数据格式
分布式系列教程(33) -ElasticSearch DSL语言查询与过滤
分布式系列教程(33) -ElasticSearch DSL语言查询与过滤
205 0
分布式系列教程(32) -ElasticSearch条件查询
分布式系列教程(32) -ElasticSearch条件查询
198 0
|
自然语言处理 搜索推荐 索引
分布式系列教程(31) -ElasticSearch倒排索引
分布式系列教程(31) -ElasticSearch倒排索引
98 0
|
网络协议 Java Maven
分布式系列教程(30) -SpringBoot整合ElasticSearch
分布式系列教程(30) -SpringBoot整合ElasticSearch
75 0