前言

关于深入理解索引过程中的细节。例如,索引一篇文档时:

{"name": "Elasticsearch Denver"}。由于上述是一个字符串,所以name是一个字符串类型。其他的字段可能是数值型、布尔型等。本章将介绍一下三种类型的字段。

  • 核心——这些字段包括字符串和数值型
  • 数组和多元字段——这些字段在某个字段中存储相同核心类型的多个值。例如,tags字段可以拥有多个标签。
  • 预定义——这些字段包括_ttl(time to live)和timestamp.

这些字段是元数据,ES可以自动管理。提供更多功能,例如,让其自动将新数据加入文档集合,或者用TTL让过期的文档自动删除


一、使用映射来定义各种文档

每篇文档属于一种类型,而每种类型属于一个索引。索引相当于数据库,类型相当于表格。类型包含了映射中每一个字段的定义。映射则包括了,该类型的文档可能出现的所有字段。

类型只提供逻辑上的分离

在ES中,不同类型的文档物理上没有进行分离。在同一个索引中,所有的文档不论什么类型,都是存储在属于相同分片的同一组文件中。一份分片就是一个lucene的索引,索引的名称就是lucene索引中的一个字段,所有映射的所有字段都是lucene索引中的字段。

类型的概念是针对ES的一层抽象,但不属于lucene这使得可以在同一个索引中建立不同类型的文档。ES负责分离这些文档,例如,在某个类型中搜索时,ES会过滤出那个类型的文档。

这地方需要注意的是,当检索一个索引下面的某篇文档时,可能会有多个类型下面有相同的字段名字。字段名字相同的必须保持映射一致。

注:一个mapping下面多type在6版本后取消了。

1.1 检索和定义映射

查看某个字段类型当前的映射,需要向该mapping接口发送一个HTTP——GET请求

localhost:9200/mapping/type/_mapping?pretty

当直接把数据put进去的时候,可以自动生成索引。

java删除es数据 不能立即生效 es删除数据原理_字段

java删除es数据 不能立即生效 es删除数据原理_java删除es数据 不能立即生效_02

1.2  扩展现有的映射

如果在现有的基础上在设置一个映射,,ES会将二者进行合并。但并不是所有的这种合并都有效。如果想把一个现有的字段类型更改成为一个新的字段类型,需要通过下面的操作

  1. 将想更改的字段其中的所有数据移除。
  2. 设置新的映射。
  3. 再次索引所有的数据。

1.3 用于定义文档字段的核心类型

ES中一个字段可以是核心类型之一,如字符串或者 数值型,也可以是一个从核心类型派生出来的复杂类型,如数组。还有一些其他类型如嵌套类型,允许在文档中包含其他文档。

需要重点提到的是_all字段索引了,文档中的所有字段。这个可以用来搜索。