开始学习ElasticSearch,做点笔记,增强记忆
一、ElasticSearch基本概念
1、NRT (Near RealTime)
ElasticSearch是一个近乎实时的搜索,之所以说近乎实时,是因为从你插入文档和这个文档变为可搜索会有一段延迟,通常为1秒
2、cluster 集群
1个以上的node(节点)可组成一个集群,当然一个节点也可组成一个集群,不过没什么意义。cluster 通过cluster.name来标识,多个node需要根据cluster.name来加入集群cluster。cluster.name的默认名字是elasticsearch。
3、Node 节点
1个node是cluster中的一个服务器,提供索引和搜索能力。node也通过一个名称来标识。默认是一个在启动时自动生成的UUID。这个名称被用在节点间的通讯等场合。一个cluster可以有任意多个node。
4、Index 索引
Index在ES中是很重要的概念,相当于MongoDB中的DB。Index同样通过一个名称来标识,这个名称必须是小写。一个集群中可以有任意多个Index。
5、Type 分类
Index可以由一个或多个Type组成。注意,Type是一个逻辑概念。相当于关系数据库中的表。
6、Documents 文档
Document代表一个文档,相当于关系型数据库中的一条记录,是数据的基本组成单位。Document以JSON的形式存在。需要注意的是,一个Document虽然在物理存储上存储在Index中,但在逻辑存储上,它必须归属于Index中的一个Type。
7、Shards和Replicas
在实际项目中,一个Index可能存储大量的数据,比如1TB,这种情况下很有可能超出了存储介质实际的存储容量。即使能够存的下,也会大大降低搜索的速度,这个时候就可以将一个Index分成多个片,叫Shard(碎片)。每个Shard也是一个具备完整功能且独立的“Index”。
在网络或云环境中,ES任何时刻都有可能发生故障,这时候就需要有失效备援的机制,防止未知原因下Shard或者节点突然的掉线或消失。ES允许你做1个以上的碎片复制,这种复制的碎片叫Replica Shards,简称为Replica。
总结一下,一个Index可以被分割为多个Shard,一个Index同样可以有0或多个的复制(备份)。一旦被复制,每个Shard就有主Shard和Shard副本,Shard副本的数量在Index创建的时候定义,在Index创建后你就改不了了。
二、API 惯例、规则
1、大多数API都支持index参数,它的值可以是test1,test2,test3 这种形式,也可以使用通配符test*,*test,te*st等,如果是_all那就是作用于所有index,也支持使用+\-号(+test*,-test3),当然,一些作用对象是单个索引的API就不支持这个特性了。
2、Date math support in index name (索引名称的日期数学运算)
格式:
所有表达式必须是经过URIEncode编码的。 GET /
假如当前日期是2020年5月20日中午12:30 ,Date math表达式为
以下是官网给出的例子:
注意最后一个的写法:+12h 加上12小时
3、 通用的可选参数
1)pretty=true/false 返回结果数据是否以漂亮的格式展示
2)human=true/false 返回结果数据是否以人类易读形式显示
3)Date math 操作 +1h +1M(月份) +1m(分钟) +1y 等等
4)返回结果过滤 GET /_search?q=elasticsearch&filter_path=took,hits.hits._id,hits.hits._score ,返回的格式如下:
{
"took" : 3,
"hits" : {
"hits" : [
{
"_id" : "0",
"_score" : 1.6375021
}
]
}
}
5)flat_settings 是否以扁平方式显示 =true 和 =false的返回结果分别是:
true -> {
"twitter" : {
"settings": {
"index.number_of_replicas": "1",
"index.number_of_shards": "1",
"index.creation_date": "1474389951325",
"index.uuid": "n6gzFZTgS664GUfx0Xrpjw",
"index.version.created": ...,
"index.provided_name" : "twitter"
}
}
}
false -> {
"twitter" : {
"settings" : {
"index" : {
"number_of_replicas": "1",
"number_of_shards": "1",
"creation_date": "1474389951325",
"uuid": "n6gzFZTgS664GUfx0Xrpjw",
"version": {
"created": ...
},
"provided_name" : "twitter"
}
}
}
}
6) 还有一些其他的error_trace等可选参数,不一一列举
4、基于URL的访问控制 URL-based access control
三、文档API