数据输入:文档和索引编辑

Elasticsearch 是一个分布式文档存储系统。与将信息存储为列数据行不同,Elasticsearch 存储已序列化为 JSON 文档的复杂数据结构。当您的集群中有多个 Elasticsearch 节点时,存储的文档将分布在整个集群中,并且可以从任何节点立即访问。

当存储文档时,它会被索引并在 近实时(1 秒内)中完全可搜索。Elasticsearch 使用一种称为倒排索引的数据结构,支持非常快速的全文搜索。倒排索引列出了出现在任何文档中的每个唯一词,并标识每个词出现的文档。

索引可以被认为是文档的优化集合,每个文档都是字段的集合,字段是包含数据的键值对。默认情况下,Elasticsearch 会索引每个字段中的所有数据,并且每个索引字段都有一个专门的优化数据结构。例如,文本字段存储在倒排索引中,数字和地理字段存储在 BKD 树中。使用每个字段数据结构来组装和返回搜索结果的能力是 Elasticsearch 如此快速的原因。

Elasticsearch 还具有无模式的能力,这意味着可以在不显式指定如何处理文档中可能出现的每个不同字段的情况下索引文档。当启用动态映射时,Elasticsearch 会自动检测并将新字段添加到索引中。这种默认行为使索引和探索数据变得容易 - 只需开始索引文档,Elasticsearch 将检测并将布尔值、浮点数和整数值、日期和字符串映射到相应的 Elasticsearch 数据类型。

但是,您比 Elasticsearch 更了解您的数据以及如何使用它。您可以定义规则来控制动态映射,并显式定义映射以完全控制字段的存储和索引方式。

定义您自己的映射使您能够

  • 区分全文字符串字段和精确值字符串字段
  • 执行特定于语言的文本分析
  • 优化字段以进行部分匹配
  • 使用自定义日期格式
  • 使用无法自动检测的数据类型,例如 geo_pointgeo_shape

以不同的方式为不同的目的索引同一个字段通常很有用。例如,您可能希望将字符串字段同时索引为用于全文搜索的文本字段和用于对数据进行排序或聚合的关键字字段。或者,您可能选择使用多个语言分析器来处理包含用户输入的字符串字段的内容。

在索引期间应用于全文字段的分析链也在搜索时使用。当您查询全文字段时,查询文本会经过相同的分析,然后才能在索引中查找词语。