推荐初学学习路程
阮一峰老师的基础介绍
官方中文权威指南
elasticsearch是啥?
Elasticsearch 是一个分布式、可扩展、实时的搜索与数据分析引擎。赋予你的数据以搜索、分析和探索的能力。
elasticsearch术语
了解es术语是快速掌握es架构设计的基础
-
Node(节点) 与 Cluster(集群)
Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例。
单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster)。 -
Index (索引)
索引就是像关系数据库中的“数据库”。通过映射可以定义成多种类型。索引是一个逻辑命名空间映射到一个或多个主要的分片,可以有零个或多个副本分片
下面的命令可以查看当前节点的所有 Index:
$ curl -X GET 'http://localhost:9200/_cat/indices?v'
-
Document(文档)
Index 里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index(索引)。同一个 Index 里面的 Document,不要求有相同的结构(scheme),但是最好保持相同,这样有利于提高搜索效率。
Document 使用 JSON 格式表示,例:
{
"user": "张三",
"title": "工程师",
"desc": "数据库管理"
}
-
Field(字段)
文档中包含的一组字段或键值对。字段的值可以是一个简单的(标量)值(如字符串,整数,日期),或者一个嵌套的结构就像一个数组或对象。一个字段就是类似关系数据库表中的一列。 -
Id(标识)
每个文档ID标识了一个文档。一个文档的索引/类型/ ID必须是唯一的。如果没有提供ID,将是自动生成。 -
Source field(源字段)
默认情况下,你的JSON文档将被索引存储在_source字段里面,所有的get(获取)和search(搜索)请求将返回的该字段。这将允许你直接从搜索结果中访问到源数据,而不需要再次发起请求检索。
注:索引将返回完整的的JSON字符串给你,即使它包含无效的JSON。此字段里的内容不表示任何该对象里面的数据如何被索引。 -
Term(术语)
在elasticsearch里,术语(term)是一个被索引的精确值。术语 foo, Foo,FOO 是不想等的。术语(即精确值)可以使用“term”查询接口来查询。 -
Text(文本)
文本(或全文)是普通非结构化的文本,如本段。默认情况下,文本将被分析成术语,术语才是实际存储在索引中。文本字段在索引时需要进行分析,以便全文搜索,全文查询的关键字在搜索时,必须分析产生(搜索)与索引时相同的术语。 -
Type(类型)
Document 可以分组,如weather这个 Index 里面,可以按城市分组(北京和上海),也可以按气候分组(晴天和雨天)。这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤 Document。不同的 Type 应该有相似的结构(schema),举例来说,id字段不能在这个组是字符串,在另一个组是数值。这是与关系型数据库的表的一个区别。性质完全不同的数据(比如products和logs)应该存成两个 Index,而不是一个 Index 里面的两个 Type(虽然可以做到)。
下面的命令可以列出每个 Index 所包含的 Type。
$ curl 'localhost:9200/_mapping?pretty=true'
根据规划,Elastic 6.x 版只允许每个 Index 包含一个 Type,7.x 版将会彻底移除 Type。
-
Mapping(映射)
映射是像关系数据库中的”模式定义“。每个索引都有一个映射,它定义了每个索引的类型,再加上一些索引范围的设置。映射可以被明确地定义,或者在一个文档被索引的时候自动生成。 -
Analysis(分析)
分析的过程就是将全文(full text)转换成 术语/分词(terms)。 这取决于使用那个分析器 -
Shard(分片)
一个分片是一个单一的Lucene的实例。这是一个低级别的通过ElasticSearch自动管理的“工作者”单元。索引是一个逻辑命名空间指向主分片和副本分片。索引的主分片和副本分片的数量需要明确的指定。然而你的代码应该只处理一个索引。Elasticsearch分配集群中所有节点的分片。在节点出现故障或增加新节点的时候,可以自动的将一个节点上的分片移动到另一个节点上。 -
Primary shard(主分片)
每个文档都存储在一个主要分片上。当你索引一个文档时,索引首先生成在主分片上,然后才到主分片的所有副本上。默认情况下,索引有5个主分片。可以指定更多或更少的主分片来适应索引可以处理的文档数。一旦创建了索引,就不能改变索引中主分片的数量。 -
Replica shard(副本分片)
每个主分片可以有零个或多个副本。副本是主分片的一个拷贝,有两个作用:- 1、故障转移:如果主分片有问题,副本分片可以提升为主分片;
- 2、提高性能:获取和搜索请求可以处理主分片或副本分片。
默认情况下,每个主分片有一个副本,不过索引的副本数量可以动态地改变。在同一个节点上,一个副本分片将永远不会和其主分片一起运行。
-
Routing(路由)
当你索引一个文档,它是存储在一个主分片里。这分片的选择是通过哈希的路由值。默认情况下,路由值来自文档的ID;如果该文档指定了父文档,则使用父文档的ID(以确保这个子文档和父文件都存储在相同的分片上)。这个路由值可以在索引的时候,通过指定数值或者配置字段映射来覆盖。
常用命令
- 创建索引
$ curl -X PUT 'localhost:9200/weather'
服务器返回一个 JSON 对象,里面的acknowledged字段表示操作成功。
{
"acknowledged":true,
"shards_acknowledged":true
}
-
删除索引
$ curl -X DELETE 'localhost:9200/weather'
-
新增记录
$ curl -X PUT 'localhost:9200/weather/clouds/1' -d '
{
"date": "2018-10-10",
"title": "多云",
"desc": "天气转冷,添加衣物"
}'
/weather/clouds/1
weather既是索引名 clouds为文档名 1为设定Id为1
-
查找记录
向/Index/Type/Id发出 GET 请求,就可以查看这条记录。
$ curl 'localhost:9200/weather/clouds/1?pretty=true'
-
删除记录
$ curl -X DELETE 'localhost:9200/weather/clouds/1'
-
数据查询
使用 GET 方法,直接请求/Index/Type/_search
,就会返回所有记录。
网友评论