一、索引
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:遇到陌生字段,就报错