Elasticsearch 是一个分布式文档存储。 Elasticsearch 不会将信息存储为行数据,而是存储已序列化为 JSON 文档的复杂数据结构。当集群中有多个 Elasticsearch 节点时,存储的文档将分布在集群中,并且可以立即从任何一个节点中被访问。
存储文档后,几乎在 1 秒钟内就可以实时地对其进行索引和完全搜索。 Elasticsearch 使用称为倒排索引的数据结构,该结构支持非常快速的全文本搜索。倒排索引列出了出现在任何文档中的每个唯一单词,并记录了每个单词出现过的所有文档。
索引可以认为是文档的优化集合,每个文档都是字段的集合,这些字段是包含数据的键值对。默认情况下,Elasticsearch 对每个字段中的所有数据建立索引,并且每个索引字段都具有专用的优化数据结构。例如,文本字段存储在倒排索引中,数字字段和地理信息字段存储在 BKD 树中。使用按照每个字段的数据结构去装配字段信息,并返回搜索结果的能力才能使 Elasticsearch 如此之快。
Elasticsearch 还具有 schema-less 的能力,这意味着无需显式指定如何处理文档中可能出现的每个不同字段即可对文档建立索引。启用动态映射后,Elasticsearch 自动检测并向索引添加新字段。这种默认行为使索引和探索数据变得容易,只要开始索引文档,Elasticsearch 就会检测 booleans,floting point , intger,date 和 strings ,并将其映射到适当的 Elasticsearch 数据类型。
您比 Elasticsearch 更了解您的数据以及如何使用它。您可以定义规则来控制动态映射,并显式定义映射以完全控制字段的存储和索引方式。
定义自己的映射使您能够:
- 区分 full-text string 字段和 exact value string 字段
- 执行特定于语言的文本分析
- 优化字段以进行部分匹配
- 使用自定义日期格式
- 使用无法自动检测到的数据类型,例如 geo_point 和 geo_shape
为不同的目的用不同的方式对同一字段建立索引通常很有用。例如,您可能希望将字符串字段索引为全文搜索的文本字段,以及索引为 keyword 字段以便对数据进行排序或汇总。或者,您可能选择使用多个语言的 analyzer 来处理包含用户输入的字符串字段的内容。
应用于索引期间的全文字段的分析链,也会在搜索时被使用。当您查询全文本字段时,对查询的文本进行相同的分析之后,再在索引中查找 term 。
详情见官网:www.elastic.co/guide/en/el…
翻译不准请多指教,翻译不易请勿盗用,如使用请标明出处