ElasticSearch笔记系列(4)——ElasticSearch集群索引创建

ES的RESTFUL风格的API

ES的API组成结构是以RESTFUL风格的API来封装的。

我们来看一下他的API基本格式。

http://<ip>:<port>/<索引>/<类型>/<文档id>

API的URL里的每一个元素都是他的概念。即都是它的名词。

动词都是通过http方法来区分的:

GET/POST/PUT/DELETE

如何创建索引

先根据上篇博客介绍的,把ES一主二从外加head全部打开。

你会发现电脑内存立即消耗殆尽。

非结构化创建

我们选择点击【索引】,然后点击【新建索引】

我们给索引取个名字,叫house。可以看到,这里还可以调整分片和副本数。这里我默认选择5个分片和1个副本。

点击【OK】,这里显示创建成功。

我们可以看到索引的概况已经发生变化,出现我们刚刚添加的house索引。house是索引名,记住,这个要小写且不能有双划线(下划线和减号)

然后我们再到概览里看一下。这里我们可以看到0、1、2、3、4分别指的是house索引的5个分片,它们分散存在master和两台slave上。

你会发现每个分片数字都有两个,因为我们刚才设置的副本数是1。细心的你一定注意到了,每个分片中,有一个粗方框和一个细方框。粗方框代表这个分片是主分片,细方框代表分片的备份,即细方框是粗方框的备份分片。

这里还有个细节。我们点击head插件页面上house索引的信息菜单按钮,选择【索引信息】

可以看到如下:

这里我们需要注意的是一个,mappings属性。这个属性代表结构化信息,如果为空,代表次索引为非结构化索引。

{
"state": "open",
"settings": {
"index": {
"creation_date": "1523543127792",
"number_of_shards": "5",
"number_of_replicas": "1",
"uuid": "yAZIunJJS_-OrN5JtCHuqA",
"version": {
"created": "5060899"
},
"provided_name": "house"
}
},
"mappings": { },
"aliases": [ ],
"primary_terms": {
"0": 1,
"1": 1,
"2": 1,
"3": 1,
"4": 1
},
"in_sync_allocations": {
"0": [
"KgGw0XboSK-iVa0M-ZYjIA"
,
"cKHd13tERbKD4czontrruQ"
],
"1": [
"V7rqZ1aERyyqaZQjE44WUA"
,
"2xwY2SNUQnOhDcyfnQZCwg"
],
"2": [
"yLi3b1-aT2mCR9wnRtJ64Q"
,
"HYw9u5W1SXWSe9ka5_oA4Q"
],
"3": [
"MlYordT7T_ys_s6EB1L9_w"
,
"vssLnGOqQ7K8YO3yFTHW1g"
],
"4": [
"OWATPEyLR0eLwG5PWUBkAg"
,
"XJYOtK68RraVQDXhtzYwbw"
]
}
}

那么如何建立一个结构化索引呢?

(本文出自oschina博主happybks的博文:https://my.oschina.net/happyBKs/blog/1795508)

结构化索引创建

点击页面上【符合查询】

然后我们构建一个url来调用ES的一个API。

我们给house索引加一个类型:apartment公寓;

然后添加一个关键词_mappings,指定加一个映射。(明白为什么索引名称不能有双划线了吧,因为一些特殊用途的关键词就是以下划线开头的)

以上就是为ES添加一个结构化索引的API调用格式。下面,我们来定义一个具体的映射结构,格式为json。

我们输入一下json,为apartment索引的属性apartmentname映射一个文本类型。

我们选择【易读】复选框,点击【验证JSON】

json也一起附上:

{
  "apartment": {
    "properties": {
      "apartmentname": {
        "type": "text"
      }
    }
  }
}

我们点击【提交请求】,提示我们创建成功,如图

然后我们点击回到【概览】。

注意:一定要点击右上角【刷新】按钮,否则无法看到我们刚才添加结构化映射的更新效果。

我们再次点击【信息】中的【索引信息】,这时候我们就能看到结构化索引的映射信息了。

{
"state": "open",
"settings": {
"index": {
"creation_date": "1523543127792",
"number_of_shards": "5",
"number_of_replicas": "1",
"uuid": "yAZIunJJS_-OrN5JtCHuqA",
"version": {
"created": "5060899"
},
"provided_name": "house"
}
},
"mappings": {
"apartment": {
"properties": {
"apartmentname": {
"type": "text"
}
}
}
},
"aliases": [ ],
"primary_terms": {
"0": 1,
"1": 1,
"2": 1,
"3": 1,
"4": 1
},
"in_sync_allocations": {
"0": [
"KgGw0XboSK-iVa0M-ZYjIA"
,
"cKHd13tERbKD4czontrruQ"
],
"1": [
"V7rqZ1aERyyqaZQjE44WUA"
,
"2xwY2SNUQnOhDcyfnQZCwg"
],
"2": [
"yLi3b1-aT2mCR9wnRtJ64Q"
,
"HYw9u5W1SXWSe9ka5_oA4Q"
],
"3": [
"MlYordT7T_ys_s6EB1L9_w"
,
"vssLnGOqQ7K8YO3yFTHW1g"
],
"4": [
"OWATPEyLR0eLwG5PWUBkAg"
,
"XJYOtK68RraVQDXhtzYwbw"
]
}
}

使用POSTMAN调用ES API创建索引

写过爬虫的朋友一定都用过postman,真是模拟各类http请求的好工具。

我们这里需要创建一个索引,请按照ES的服务地址和端口(注意:是ES的地址和端口,不是head插件的)

restfult api风格的API创建索引用的是http的put协议。

然后我们需要提交一个请求体位json的请求。所以选择body的raw,然后选择JSON格式。在postman中,软件会自动为你监测你将输入的json是否符合语法规则。在head插件那里还需要你自己注意格式。

我们创建的是rent租赁房屋索引。结构化索引当然需要定义一下映射。当然,我们先在settings中农定义好索引的分片数量和副本数量,我们这里默认写3和1就好。

然后我们做一下索引的映射定义mappings。格式如下。

这里我们为community类型创建其映射信息,community小区有communityname小区名称映射属性,属性值类型为文本text;属性city所在城市的值类型为关键字类型keyword。

text和keyword的区别:

keyword:存储数据时候,不会分词建立索引

text:存储数据时候,会自动分词,并生成索引(这是很智能的,但在有些字段里面是没用的,所以对于有些字段使用text则浪费了空间)。

age房龄属性是整型,注意是小写哦。

建造日期creationdate属性是日期类型date。

date类型的属性,可以指定format格式。

如果包含多种格式,可以将属性值中不同种类格式描述表达式用双竖线||分隔开。

它还支持时间戳的格式,这里我们用epoch_mills来表示。

{
	"settings":{
		"number_of_shards":3,
		"number_of_replicas":1
	},
	"mappings":{
		"community":{
			"properties":{
				"communityname":{
					"type":"text"
				},
				"city":{
					"type":"keyword"
				},
				"age":{
					"type":"integer"
				},
				"creationdate":{
					"type":"date",
					"format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
				}
			}
		},
		"shop":{
			
		}
	}
}

我们为rent索引创建了一个shop商铺类型,这里我们什么映射都不定义。

之后我们提交请求。

注意是put协议请求,且这里json是为某个索引提交各个类型的映射,所以请在请求的url中把索引名称rent一起带上,否则会报错如下:

请求成功,成功创建结构化索引:

我们这时候刷新head首页,查看:

我们发现rent索引已经建立,且在我们一主二从的ES集群上已经创建了3分片、1副本的策略的结构化索引。

我们点击【信息】查看【索引信息】:

{
"state": "open",
"settings": {
"index": {
"creation_date": "1523632189666",
"number_of_shards": "3",
"number_of_replicas": "1",
"uuid": "lUrZ_KHtQcuG33MFNivX-A",
"version": {
"created": "5060899"
},
"provided_name": "rent"
}
},
"mappings": {
"shop": { },
"community": {
"properties": {
"creationdate": {
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis",
"type": "date"
},
"city": {
"type": "keyword"
},
"communityname": {
"type": "text"
},
"age": {
"type": "integer"
}
}
}
},
"aliases": [ ],
"primary_terms": {
"0": 1,
"1": 1,
"2": 1
},
"in_sync_allocations": {
"0": [
"CCMRsr2uSQmBj4a4GQisFQ"
,
"0RFsy8yXT6WM25oL8n5gew"
],
"1": [
"2hf4wI1BThSOHCfNqxIFQw"
,
"EUt4DmXeQa-OOFTZC9jP4g"
],
"2": [
"8z1oyQ4WSui8MZvQn7xYTg"
,
"vEbuzvxzTW2y_mokZWQSig"
]
}
}

猜你喜欢

转载自my.oschina.net/happyBKs/blog/1795508