ES 映射

Elasticsearch 为其用户提供了一种映射机制。它允许用户对文档及其字段执行映射。映射是索引或存储数据库中的文档和字段的过程。它定义了文档及其字段的存储和索引方式。

我们可以为不同类型的字段定义数据类型,例如-字符串、数字、geo_point 等。因此,要将数字字段视为数字,字符串字段作为全文或精确值字符串,日期字段作为日期,Elasticsearch 需要知道每个字段的数据类型。此信息存储在映射中。下面是一些关于映射需要注意的要点:

  • 映射允许我们定义字段的数据类型,例如名称字段的字符串数据类型。
  • 它指定文档中提供的字段的格式。
  • 映射还用于配置与类型关联的元数据。

下面的例子将向您展示一个简单映射的演示,其中我们将创建一个名为books with mapping的索引:

POST http://localhost:9200/books/_docs
{
  "mappings": {
   "type1": {
    "_source": {
       "enabled": false
    },
    "properties": {
      "book_name": {"type":"string"},
      "author_name": {"type":"string"},
      "price": {"type":"float"},
      "publisher": {"type":"string"},
      "published_date": {"type":"date"}
    }
   }
  }
}

回复

{
    "acknowledged": true,
"shards_acknowledged": true,
"index": "books"
}

屏幕截图

Elasticsearch Mapping

数据类型

Elasticsearch 支持不同字段的各种数据类型。让我们简要讨论每种数据类型:

核心数据类型: 这些是广泛使用的基本数据类型。一些核心数据类型是-short、integer、long、float、double、string、byte、Boolean 和 date。大多数系统都支持这些数据类型。

复杂数据类型: 复杂数据类型是用户定义的数据类型,它是核心数据类型的集合。复杂的数据类型是-数组、JSON 对象(本质上是分层的)和嵌套数据类型。

Geo 数据类型: Geo 数据类型是一种特殊的数据类型,用于存储地理详细信息,例如地点的位置。例如:

  • geo_point 有助于识别经度和纬度。
  • geo_shape 有助于定义不同的几何形状,如矩形。

专用数据类型: 这些数据类型是专用数据类型,用于保存唯一的详细信息,例如 IP 地址、用于计算字符串中标记数量的 token_count 以及自动完成

映射类型

每个索引都有不止一种映射类型,这进一步将索引的文档划分为逻辑组或块。

映射可能因字段和元字段等某些因素而彼此不同。

字段或属性: 字段也被视为属性。在 elasticsearch 中,不同的映射具有不同数据类型的各种字段。在索引中,名称相同但映射类型不同的字段必须具有相同的映射。

元字段: 元字段使有关映射以及其他对象的信息可用与它相关联,例如 _index、_id、_source 和 _type 字段。他们负责自定义如何处理与文档关联的元数据。

动态映射:

Elasticsearch 提供了一种自动创建映射的机制。这种用户友好的机制称为动态映射。它允许用户将数据直接发布到任何未定义的映射。然后 Elasticsearch 会自动为其创建映射。

静态映射:

在大多数情况下,我们已经知道保存在文档中的数据类型。因此,每当我们创建索引时,定义字段及其类型就变得容易了。这种机制称为静态映射,由用户在创建索引时创建。

映射参数

映射参数是定义映射的基本和基本因素。它们还有助于存储数据的关键——字段和存储。映射参数负责在搜索时如何分析这些细节。在 Elasticsearch 中,以下是映射参数:

  • analyzer
  • boost
  • coerce
  • copy_to
  • doc_values
  • dynamic
  • enabled
  • fields
  • fielddata
  • format
  • geohash
  • geohash_prefix
  • geohash_precision
  • ignore_above
  • ignore_malformed
  • include_in_all
  • Index_options
  • lat_lon
  • norms
  • null_value
  • position_increment_gap
  • properties
  • search_analyzer
  • similarity
  • store
  • team_vector

获取索引的映射细节

以下命令用于获取与索引关联的映射:

GET http://localhost:9200/student1/
_mapping?include_type_name=false

响应:

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
     "student": {
          "mappings": {
         "properties": {
             "Addmission_year": {
             "type":"text",
              "fields": {
             "keyword": {
            "type": "keyword"
            "ignore_above": 256
        }
             }
          },
             "country": {
             "type":"text",
              "fields": {
             "keyword": {
            "type": "keyword"
            "ignore_above": 256
        }
             }
          },
             "course": {
             "type":"text",
              "fields": {
             "keyword": {
            "type": "keyword"
            "ignore_above": 256
        }
             }
          },
             "email": {
             "type":"text",
              "fields": {
             "keyword": {
            "type": "keyword"
            "ignore_above": 256
        }
             }
          },
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 

截图

Elasticsearch Mapping

移除映射类型

Elasticsearch 7.0.0 及更高版本不支持索引的 _default_ 映射。但是,在 Elasticsearch 6.x 中创建的索引将继续像以前一样工作。 Elasticsearch 7.0 版本的 API 中不推荐使用类型。

下一章:ES 模块

Elasticsearch 由模块组成,模块负责其功能。在这些模块的帮助下,elasticsearch 执行其功能。我们将在本章中讨论几个模块。这些模块有两个设置,可以是静态的和动态的。静态设置:需要配置静态设置。必须在节点级别 ...