1. 主页
  2. 文档
  3. Elasticsearch中文文档
  4. 什么是Elasticsearch
  5. 数据在文档和索引(Data in: documents and indices)

数据在文档和索引(Data in: documents and indices)

内容纲要

ES是一个分布式的文档仓库。ES将复杂的数据结构序列化为JSON文档进行存储,而不是将信息存储为行列的形式。当一个ES集群中有多个ES节点时,存储的文档会分布在整个集群中,并且可以从任何节点立即访问。

当一个文档被存储后,他会在1秒内(近实时)被索引并且可以搜索。ES使用一种被叫做倒排索引的数据结构来支持非常快速的全文搜索。倒排索引列出了任何文档中出现的每个唯一单词,并标识了每个单词出现的所有文档。
倒排索引示意图:
倒排索引示意图

一个索引(index)可以被认为时一个优化后的文档(document)的集合,并且每一个文档是一个字段(fields)的集合,字段是包含你的数据的键值对,默认情况下,ES索引所有数据的每一个字段并且每一个索引字段都有一个特有的优化后的数据结构。例如:文本(text)字段被存储在倒排索引,数值(numeric)及地理(geo)字段被存储在BKD树中。使用每一个字段数据结构来组装返回搜索结果的能力是ES如此快速的原因

ES同样具有无schema的能力,这意味着无需明确指定怎么处理每一个可能出现在文档中的不同的的字段就可以对文档进行索引。当开启了动态mapping,ES会自动探测和添加新的字段到文档中,这种默认的行为使得索引和查看你的数据变得非常容易–只需开始索引文档,ES就会探测并且映射boolean,float,integer,dates和strings到合适的ES数据类型

另外,如果你对自己的数据类型的了解超过了ES自己的类型推断,你可以定义自己的规则用来控制动态mapping或者显式定义mapping来控制字段的存储和索引方式。

自定义mapping可以做到以下几件事:

  • 区分全文索引字段和精确字符串字段(比如keyword类型)
  • 执行特定语言的分词
  • 优化字段以进行部分匹配??
  • 使用自定义日期类型
  • 使用es无法自动探测出来的数据类型,如:geo_point,geo_shape

因为不同的目的对同一个字段使用不同的方式进行索引也是非常常见的

数据在文档和索引(Data in: documents and indices)

我们要如何帮助您?