文档和索引

数据输入:文档和索引

Elasticsearch 是分布式文档仓库. Elasticsearch存储那些已经被序列化成JSON格式的复杂数据. 当在集群中有多个Elasticsearch节点时,存储的文档会被分发到集群中, 并且可以立刻从任意节点进行访问.

当文档被存储后,它会被创建索引,并且能近实时地进行搜索. Elasticsearch 通过一种被称作倒排索引的数据结构来支持快速的全文搜索. 倒排索引包含了所有文档中出现的所有词汇,并标记出包含它的文档.

索引可以被看做文档的优化集合, 每个文档都是字段的集合,它们是包含了你的数据的键值对. 默认情况下, Elasticsearch 中所有字段和字段值都建立了专用的优化过的数据结构. 例如:文本字段存储在倒排索引中,数字和地理位置信息被存储在BKD tree 中,正是因为有了这种通过组装各个字段数据结构来构造查询结果的能力,才使得Elasticsearch如此之快.

Elasticsearch 同时也拥有无模式数据存储的能力, 这意味着通过文档中未显示声明过该如何处理的字段,同样能索引到文档. 当启用动态索引时, Elasticsearch 将自动检测并将新的字段添加到索引中,这种默认行为将使得索引和查找数据都变得简单,只需要开启文档索引,Elasticsearch将监测数据类型,并将它们映射成相应的Elasticsearch数据类型.

归根结底,还是你自己更了解你的数据,以及该如何使用它们. 你可以定制规则来控制动态映射,甚至通过显式定义映射来完全控制字段的存储和索引方式.

定义自己的映射将使你可以:

  • 区分全文字符串字段和精确值字符串字段
  • 表现出语言特有的文本分析
  • 为部分查询优化字段
  • 使用习惯的数据格式
  • 使用那些像 geo_pointgeo_shape 那样无法被自动检测出的数据类型

为了不同的目的使用不同的方式来索引同一字段通常是很有用的. 例如, 你可能想使用一个字符串字段来进行全文搜索,同时你也想使用它作为
关键字对你的数据进行分类或聚集. 或者你想通过多个语言分析器来处理用户输入字符串字段的内容.

索引过程中被应用于全文字段的分析链,在搜索时也会被使用.查询全文字段时,在去索引中搜索条件前,查询文本将会应用同样的分析.

文章链接 https://fangzongzhou.github.io/2019/07/24/计算机/技术文档/Elasticsearch/文档和索引/