欢迎光临
我们一直在努力

Elasticsearch索引和Mapping

一、索引
ES会自动建立index和type,不需要提前创建,而且es默认会对document每个field都建立倒排索引。

查看所有索引:

GET /_cat/indices?v

1.创建索引示例

PUT /my_index
{
	"settings": {
		"number_of_shards": 1,
		"number_of_replicas": 0
	},
	"mappings": {
		"my_type": {
			"properties": {
				"my_field": {
					"type": "text"
				}
			}
		}
	}
}

2.删除索引示例

DELETE /my_index
DELETE /index_one,index_two
DELETE /index_*
DELETE /_all

3.修改索引示例

PUT /my_index/_settings
{
"number_of_replicas": 1
}

二、ES的元数据
1. _index元数据
a.代表一个document存放在哪个index中
b.类似的数据放在一个索引,非类似的数据放不同索引:product index(包含了所有的商品),sales index(包含了所有的商品销售数据),inventory index(包含了所有库存相关的数据)。如果你把比如product,sales,human resource(employee),全都放在一个大的index里面,比如说company index,不合适的。
c.index中包含了很多类似的document,就是说这些document的fields很大一部分是相同的,你说你放了3个document,每个document的fields都完全不一样,这就不是类似了,就不太适合放到一个index里面去了。
d.索引名称必须是小写的,不能用下划线开头,不能包含逗号
2. _type元数据
a.代表document属于index中的哪个类别(type)
b.一个索引通常会划分为多个type,逻辑上对index中有些许不同的几类数据进行分类:因为一批相同的数据,可能有很多相同的fields,但是还是可能会有一些轻微的不同,可能会有少数fields是不一样的,举个例子,就比如说,商品,可能划分为电子商品,生鲜商品,日化商品,等等。
c.type名称可以是大写或者小写,但是同时不能用下划线开头,不能包含逗号
3. _id元数据
a.代表document的唯一标识,与index和type一起,可以唯一标识和定位一个document
b.两种生成方法,第一种手动指定document的id(put /index/type/id),第二种以由es自动为我们创建id(长度为20个字符,URL安全,base64编码,GUID算法,保证分布式系统并行生成时不会发生冲突)
4. _source元数据
a.定制返回的结果,指定_source中,返回哪些field
例:GET /test_index/test_type/1?_source=test_field1,test_field2
三、mapping
1.概述:
①自动或手动为index中的type建立的一种数据结构和相关配置,简称为mapping。
②可以在创建数据之前,手动先创建index和type,以及type对应的mapping,但是不能修改mapping。
③dynamic mapping,自动为我们建立index、type,以及type对应的mapping。
③mapping中包含了每个field对应的数据类型,以及如何分词等设置。
④不同的数据类型(比如说date和text),可能有的是exact value,有的是full text。
⑤mapping就是index的type的元数据,每个type都有一个自己的mapping,决定了数据类型,建立倒排索引的行为,进行搜索的行为。
⑥exact value,在建立倒排索引的时候,分词的时候,是将整个值一起作为一个关键词建立到倒排索引中的;full text,会经历各种各样的处理,分词,normaliztion(时态转换,同义词转换,大小写转换),才会建立到倒排索引中。
2.查看mapping
语法:

GET /index/_mapping/type

示例:GET /website/_mapping/article
3.创建mapping示例

PUT /website
{
	"mappings": {
		"article": {
			"properties": {
				"authorId": {
					"type": "long"
				},
				"title": {
					"type": "text",
					"fields": {
						"keyword": {
							"type": "keyword",
							"ignore_above": 50
						}
					}
				},
				"postDate": {
					"type": "date"
				}
			}
		}
	}
}

4.mapping的常用字段类型
string(5.0版本后拆分成两种数据类型text和keyword)
byte,short,integer,long
float,double
boolean
date
5.定制dynamic mapping策略
PUT /my_index

{
	"mappings": {
		"my_type": {
			"dynamic": "strict",
			"properties": {
				"title": {
					"type": "text"
				},
				"address": {
					"type": "object",
					"dynamic": "true"
				}
			}
		}
	}
}

true:默认,遇到陌生字段,就进行dynamic mapping
false:遇到陌生字段,就忽略
strict:遇到陌生字段,就报错

未经允许不得转载:坤峰博客 » Elasticsearch索引和Mapping

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址