Elasticsearch 入门到精通-(索引、文档、Mapping)

一、索引(index)

        「索引」含义的区分你可能已经注意到索引(index)这个词在Elasticsearch中有着不同的含义,所以有必要在此做一下区分:索引(名词) 如上文所述,一个索引(index)就像是传统关系数据库中的数据库,它是相关文档存储的地方,index的复数是indices 或indexes。索引(动词) 「索引一个文档」表示把一个文档存储到索引(名词)里,以便它可以被检索或者查询。这很像SQL中的INSERT关键字,差别是,如果文档已经存在,新的文档将覆盖旧的文档。倒排索引 传统数据库为特定列增加一个索引,例如B-Tree索引来加速检索。Elasticsearch和Lucene使用一种叫做倒排索引(inverted index)的数据结构来达到相同目的。

二、文档(document)

        「文档」一个Document就像数据库中的一行记录,文档会被序列化成JSON格式,保持在Elasticsearch中,多个Document存储于一个索引(Index)中。文档以JSON(Javascript Object Notation)格式来表示,而JSON是一个到处存在的互联网数据交互格式。

三、类型(type)

        「类型」类型是文档的逻辑容器,类似于表是行的容器。 您将具有不同结构(模式)的文档放在不同类型中。 例如,您可以使用一种类型来定义聚合组,并在人们聚集时为事件定义另一种类型。
每种类型的字段定义称为映射。 例如,name将映射为字符串,但location下的geolocation字段将映射为特殊的geo_point类型。 (我们探讨如何使用附录A中的地理空间数据。)每种字段的处理方式都不同。 例如,您在名称字段中搜索单词,然后按位置搜索组以查找位于您居住地附近的组。

        很多人认为Elasticsearch是schemaless的。大家都甚至认为Elasticsearch中的数据库是不需要mapping的。其实这是一个错误的概念。schemaless在Elasticsearch中正确的理解是,我们不需要事先定义一个类型关系数据库中的table才使用数据库。在Elasticsearch中,我们可以不开始定义一个mapping,而直接写入到我们指定的index中。这个index的mapping是动态生成的。其中的数据项的每一个数据类型是动态识别的。比如时间,字符串等,虽然有些的数据类型还是需要我们手动调整,比如geo_point等地理位置数据。另外,它还有一个含义,同一个type,我们在以后的数据输入中,可能增加新的数据项,从而生产新的mapping。这个也是动态调整的。

        由于一些原因,在Elasticsearch 6.0以后,一个Index只能含有一个type。这其中的原因是:相同index的不同映射type中具有相同名称的字段是相同; 在Elasticsearch索引中,不同映射type中具有相同名称的字段在Lucene中被同一个字段支持。在默认的情况下是_doc。在未来8.0的版本中,type将被彻底删除。

四、映射(mapping)

        mapping是类似于数据库中的表结构定义,主要作用如下:

        1、定义index下的字段名

        2、定义字段类型,比如数值型、浮点型、布尔型等

        3、定义倒排索引相关的设置,比如是否索引、记录position等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值