Elasticsearch入门核心概念详解

编程

@Document(indexName = "item",type = "docs", shards = 1, replicas = 0)

public class Item {

[@Id](https://my.oschina.net/u/3451001)

private Long id;

@Field(type = FieldType.Text, analyzer = "ik_max_word")

private String title;

@Field(type = FieldType.Keyword)

private String category;

}

核心概念

1. document(文档)

es 中的最小数据单元,一个 document 可以是一条商品数据,也可以是一条订单数据,通常用 JSON 格式表示,一个 document 里面有多个 field,每个 field 就是一个数据字段。

以下是一个商品 document:

{

"id": "1",

"name": "Macbook pro 2018",

"desc": "2018年新款 配置: xxxxxxx",

"category_id": "2",

}

2. index(索引)

包含一堆有相似结构的文档数据,比如一个商品分类索引,订单索引,索引有一个名称。一个 index 包含很多 document,一个 index 就代表了一类类似的或者相同的 document。比如说建立一个商品 index,里面可能就存放了所有的商品数据,所有的商品 document。

3. type(类型)

每个索引里都可以有一个或多个 type,type 是 index 中的一个逻辑数据分类,一个 type 下的 document,都有部分相同的 field。

比如:商品index,里面存放了所有的商品document,

而商品分很多种类,每个种类的document的 field 可能不太一样,比如说电器商品,可能会包含如售后时间;生鲜类商品包含保质期这样的的field

举例说明:

一个商品 index,包含电器商品type 和 生鲜商品type

每一个type里面,都会包含一堆 document

{

"id": "2",

"name": "长虹电视机",

"desc": "4k高清",

"category_id": "3",

"service_period": "1年"// 特殊 field

}

{

"id": "3",

"name": "基围虾",

"desc": "纯天然,冰岛产",

"category_id": "4",

"eat_period": "7天" // 特殊 field

}

4. cluster(集群)及 node(节点)

一个集群包含多个节点,每个节点属于哪个集群是通过一个配置(集群名称,默认是elasticsearch)来决定的。

节点也有一个名称(默认是随机分配的),节点名称很重要(在执行运维管理操作的时候),默认节点会去加入一个名称为“elasticsearch”的集群,如果直接启动一堆节点,那么它们会自动组成一个elasticsearch集群,当然一个节点也可以组成一个elasticsearch集群

5. shard

单台机器无法存储大量数据,es 可以将一个索引中的数据切分为多个 shard,分布在多台服务器上存储。有了shard就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升吞吐量和性能。每个shard都是一个lucene index。

6. replica

任何一个服务器随时可能故障或宕机,此时shard可能就会丢失,因此可以为每个shard创建多个replica副本。replica可以在shard故障时提供备用服务,保证数据不丢失,多个replica还可以提升搜索操作的吞吐量和性能。

注意:

primary shard(建立索引时一次设置,不能修改,默认5个)

replica shard(随时修改数量,默认1个)

默认每个索引10个shard,5个primary shard,5个replica shard,最小的高可用配置,是2台服务器。

总结

当我们熟悉并了解 Elasticsearch 的核心概念后,再来看下面的代码,就能看懂 90% 左右了。

@Document(indexName = "item",type = "docs", shards = 1, replicas = 0)

public class Item {

@Id

private Long id;

@Field(type = FieldType.Text, analyzer = "ik_max_word")

private String title;

@Field(type = FieldType.Keyword)

private String category;

}

以上是 Elasticsearch入门核心概念详解 的全部内容, 来源链接: utcz.com/z/513033.html

回到顶部