1: 数据结构
- 索引 index
索引与关系型数据库实例(Database)相当。索引只是一个 逻辑命名空间,它指向一个或多个分片(shards),内部用Apache Lucene实现索引中数据的读写
- 类型 type
相当于数据库中的table概念。每个文档在ElasticSearch中都必须设定它的类型。文档类型使得同一个索引中在存储结构不同文档时,只需要依据文档类型就可以找到对应的参数映射(Mapping)信息,方便文档的存取
- 文档 document
相当于数据库中的row, 是可以被索引的基本单位。例如,你可以有一个的客户文档,有一个产品文档,还有一个订单的文档。文档是以JSON格式存储的。在一个索引中,您可以存储多个的文档。请注意,虽然在一个索引中有多分文档,但这些文 档的结构是一致的,并在第一次存储的时候指定, 文档属于一种 类型(type),各种各样的类型存在于一个 索引 中
- 域 field
相当于数据库中的一个字段。
和MySQL进行对比
MySQL | ES | |
库 | database | 索引 |
表 | table | 类型 |
行 | 行 row | 文档 |
字段 | 列 Columns | 字段(Fields) |
2: 核心概念
- 集群 Cluster
集群,包含多个节点,每个节点都属于那个集群都是通过配置(集群名称 默认是elasticearch) 来决定的,对于中小型应用来说,刚开始一个集群就一个节点
- 节点 Node
集群中一个节点,节点也有一个名称(默认是随机分配的),节点的名称很重要(在执行运维管理操作的时候),默认节点会去加入一个名称为‘elasticearch’ 的集群,如果直接启动一堆节点,那么他们 会自动组成一个elasticearch 集群。当然一个节点也可以组成一个elasticearch集群
- Mapping
对数据进行约束,相当于mysql中的字段类型约束
- 分片shard
单台机器无法存储大量数据,es可以讲一个索引中的数据切分为多个shard, 分布在多台服务器上存储。有了shard就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提高 吞吐量和性能。每个shard都是一个Lucene index
- 副本 replica
任何一个服务器随时都可能出现故障或宕机,此时shard可能就会丢失,因此可以为每个shard创建多个replica副本。replica可以在多个shard故障时提供备用服务,保证数据不丢失,多个replica还可以提 升搜索操作的吞吐量和性能。primary shard (建立索引时一次设置,不能修改,默认5个),replica shard(随时修改数量,默认1个),默认每个索引10个shard,5个primary shard,5个replica shard,最小的 高可用配置,是2台服务器
3: 数据类型
3.1: 核心数据类型
(1)字符串类型: text, keyword
(2)数字类型:long, integer, short, byte, double, float, half_float, scaled_float
(3)日期:date
(4)日期 纳秒:date_nanos
(5)布尔型:boolean
(6)Binary:binary
(7)Range: integer_range, float_range, long_range, double_range, date_range
3.2 复杂数据类型
(1)Object: object(for single JSON objects)
(2)Nested: nested (for arrays of JSON objects)
3.3 地理数据类型
(1)Geo-point: geo_point (for lat/lon points)
(2)Geo-shape: geo_shape (for complex shapes like polygons)
3.4 特殊数据类型
(1)IP: ip (IPv4 和 IPv6 地址)
(2)Completion类型:completion (to provide auto-complete suggestions)
(3)Token count:token_count (to count the number of tokens in a string)
(4)mapper-murmur3:murmur3(to compute hashes of values at index-time and store them in the index)
(5)mapper-annotated-text:annotated-text (to index text containing special markup (typically used for identifying named entities))
(6)Percolator:(Accepts queries from the query-dsl)
(7)Join:(Defines parent/child relation for documents within the same index)
(8)Alias:(Defines an alias to an existing field.)
(9)Rank feature:(Record numeric feature to boost hits at query time.)
(10)Rank features:(Record numeric features to boost hits at query time.)
(11)Dense vector:(Record dense vectors of float values.)
(12)Sparse vector:(Record sparse vectors of float values.)
(13)Search-as-you-type:(A text-like field optimized for queries to implement as-you-type completion)
3.5.数组类型
在Elasticsearch中,数组不需要一个特定的数据类型,任何字段都默认可以包含一个或多个值,当然,这多个值都必须是字段指定的数据类型。
3.6 Multi-fields
Multi-fields 通常用来以不同的方式或目的索引同一个字段。比如,一个字符串类型字段可以同时被映射为 text 类型以用于全文检索、 keyword字段用于排序或聚合。又或者,你可以用standard分析器、english分析器和french分析器来索引同一个 text字段。