存储于文档和索引中的数据
ElasticSearch是一个分布式的文档存储库。ElasticSearch不将信息存储为列数据行,而是存储已序列化为JSON文档的复杂数据结构。当集群中有多个ElasticSearch节点时,存储的文档将分布在集群中,并且可以从任何节点立即访问。
当存储文档时,它会被索引,并在1秒内以近乎实时的方式进行完全搜索。ElasticSearch使用一种称为倒排索引的数据结构,支持非常快速的全文搜索。倒排索引列出任何文档中出现的每个唯一单词,并标识每个单词出现在其中的所有文档。
索引可以看作是文档的优化集合,每个文档都是字段的集合,字段是包含数据的键值对。默认情况下,ElasticSearch索引每个字段和每个索引字段中的所有数据都有一个专用的优化数据结构。例如,文本字段存储在反向索引中,数字和地理字段存储在BKD树中。使用每个字段的数据结构来组装和返回搜索结果的能力使ElasticSearch如此之快。
ElasticSearch还具有无模式的能力,这意味着可以对文档编制索引,而无需显式指定如何处理文档中可能出现的每个不同字段。启用动态映射后,ElasticSearch会自动检测并向索引添加新字段。这种默认行为使索引和浏览数据变得容易——只需开始索引文档,ElasticSearch将检测布尔值、浮点值和整数值、日期和字符串并将其映射到相应的ElasticSearch数据类型。
但是,最终,您比ElasticSearch更了解您的数据以及如何使用它。您可以定义规则来控制动态映射,并显式定义映射来完全控制字段的存储和索引方式。
定义自己的映射使您能够:
-
区分全文字符串字段和精确值字符串字段
-
执行语言特定的文本分析
-
为部分匹配优化字段
-
使用自定义日期格式
-
使用无法自动检测的数据类型,如地理点和地理形状
为了不同的目的,用不同的方法索引同一个字段通常很有用。例如,您可能希望将字符串字段索引为全文搜索的文本字段和排序或聚合数据的关键字字段。或者,您可以选择使用多个语言分析器来处理包含用户输入的字符串字段的内容。
索引期间应用于全文字段的分析链也在搜索时使用。查询全文字段时,在索引中查找术语之前,查询文本将进行相同的分析。