前言
此文章不完整,后面用到会慢慢补上,针对es6.8版本的命令行操作指令,请确认版本再往下看
下面所有的_doc代替的类型,如果在创建索引时,那可以在put后加上?include_type_name=false
忽略类型,那么es创建的默认的类型就是_doc
一、 创建
1、创建一个新的索引
put 新索引
{
"settings": {
"number_of_shards": 3, //主分片
"number_of_replicas": 1 //副本数
},
"mappings": {
"类型":{
"properties": {
"字段名": {
"type" : "类型"
},
"字段名": {
"type" : "类型"
}
}
}
}}
在7.0以后已经删除类型了,但是这是6.8还是有类型的,
但是这里也可以不设置,下面就是一个例子(但是实际上默认给你创建了 _doc 类型)
put 新索引? include_type_name=false
{
"mappings": {
"properties": {
"字段名": {
"type": "字段类型"
}
}
}
}
二、 添加
1、 指定id插入数据
put 索引/类型/指定的id
{
"name": "名字",
"age": 22,
"date": 1603683862
}
2、不指定id插入数据
post 索引/类型/
{
"name": "孔超",
"age": 22,
"date": 1603684892
}
3、 如果此id存在则不插入,
put 索引/类型/id?op_type=create
{
"字段名" : "值",
"字段名" : "值"
}
另一种写法
put 索引/类型/id/_create
4、 设置添加文档的超时时间
put 索引/类型/id?timeout=5m //超时时间为5分钟,
三、修改
1、更新文档中的某个字段
post 索引/类型/id/_update
{
"doc": {
"name": "sss",
"age": 33
}
}
2 、添加索引中的字段映射
PUT 索引/_mapping/_doc
{
"properties": {
"新字段名": {
"type": "字段类型"
}
}
}
如果多个索引都添加这个字段映射,直接可以在 put /索引1,索引2/_mapping/_doc
后面一致
3、 修改索引中的字段映射
通常无法更新现有的字段的映射,但是有例外
- 添加新的字段映射
- ignore_above 参数更新
- new properties可以添加到Object数据类型字段
给的例子是下面这样的
PUT my_index
{
"mappings": {
"_doc": {
"properties": {
"name": {
"properties": {
"first": {
"type": "text"
}
}
},
"user_id": {
"type": "keyword"
}
}
}
}
}
PUT my_index/_mapping/_doc
{
"properties": {
"name": {
"properties": {
"last": {
"type": "text"
}
}
},
"user_id": {
"type": "keyword",
"ignore_above": 100
}
}
}
如果创建时不指定类型,那可以在put后加上?include_type_name=false
下面是官方文档,可以看看
创建索引不加类型
4、 通过查询修改文档
POST 索引/_update_by_query?conflicts=proceed
{
"script": {
"source": "脚本",
},
"query": {
"文档类型": {
"字段名": "字段值"
}
}
}
符合查询要求的都会执行脚本,有冲突也会执行下去
四、 删除
1、 删除文档
delete 索引/类型/id
设置删除此文档的超时时间
delete 索引/类型/id?timeout=5m
2、 删除索引
delete 索引
3、 按查询结果删除索引、类型、文档
POST 索引/_delete_by_query
{
"query": {
"match": {
"字段名": "值"
}
}
}
这样在此索引下的只要有此字段名的值符合上面的要求的文档都会被删除
但是在执行操作时遇到冲突就会中止,不会回滚
如果想遇到冲突继续执行的话就在后面加上conflicts=proceed
,下面就是一个例子
POST twitter/_doc/_delete_by_query?conflicts=proceed
五、查询
1、 查询某索引/类型下所有的文档
get 索引/_search
get 索引/类型/_search
2、根据id查询某个文档
get 索引/类型/id
3、查询是否存在此索引
head 索引名
4、获取文档的指定字段的内容
get 索引/类型/id?_source_includes=a*&_source_excludes=字段名
另一种写法
get 索引/类型/id/_source=a*,字段名 //以逗号分隔
5 只获_source的内容
get 索引/类型/id/_source
如果查看是否有_source存在,则用
head索引/类型/id/_source
6、用一个查询对多个文档进行不同的查询处理
GET /_mget
{
"docs" : [
{
"_index" : "test",
"_type" : "_doc",
"_id" : "1"
},
{
"_index" : "test",
"_type" : "_doc",
"_id" : "2"
}
]
}
如果索引和类型相同,完全可以下面这样写
GET /test/_doc/_mget
{
"docs" : [
{
"_id" : "1"
},
{
"_id" : "2"
}
]
}
GET /test/_doc/_mget
{
"ids" : ["1", "2"] //都招的是id,直接用数组来表示
}
如果想返回的数组中每一个文档是全部的就这样处理,如果不是全部的,只是特定字段就加上
"_source" : ["field3", "field4"]
7 、查询索引映射字段
(1)、查询所有索引的字段映射
get /_mapping
get /_all/_mapping
(2)、查询所有索引中某一类型的字段映射
get /_mapping/类型
get/_all/_mapping/类型
8、查询索引下的字段映射
get 索引/_mapping/类型/field/字段名
get /索引1,索引2/_mapping/类型/field/字段名
get /_all/_mapping/类型/field/字段1,字段2
get /_all/_mapping/类型/field/* //*代表通配符,也可以是a*
get 索引/_mapping/类型/field/字段.字段 //这个表示的是字段还有子字段映射
例子
{
"mappings": {
"_doc": {
"properties": {
"id": { "type": "text" },
"title": { "type": "text"},
"abstract": { "type": "text"},
"author": {
"properties": {
"id": { "type": "text" },
"name": { "type": "text" }
}
}
}
}
}
}
GET 索引/_mapping/_doc/field/author.id
查询是否有此索引是否有此类型
Head 索引/_mapping/类型 //200代表存在,400不存在
六、 索引模板
1、 创建一个新的索引模板
(1)普通的索引模板
put _template/模板名称
{
"index_patterns": ["te*", "bar*"], //匹配的索引名字,可以是多个索引前缀的模板
"order": 3, //代表此索引模板的等级,如果一个索引有多个符合要求的索引模板就会高的在低阶的基础上修改添加成一个新的虚拟的索引模板给新索引用
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
},
"mappings": {
"_doc": {
"_source": {
"enabled": true //如果为false ,那你查询出来的所有数据都没有_source,聚合函数例外,默认true
},
"properties": {
"字段名": {
"type": "字段类型"
},
"字段名": {
"type": "字段类型"
},
"time": {
"type": "date",
"format": "EEE MMM dd HH:mm:ss Z yyyy"
}
}
}
}
}
2、 查看索引模板
(1)、 查看所有模板
get _template
(2)、 查看指定的模板
get _template/模板名
(3)、 模糊匹配
get _template/模板名前缀 + *
(4)、 批量查询
get _template/模板名1,模板名2
(5)、模板是否存在
head _template/模板名称
3 删除指定模板
delete _template/模板名
4 修改索引模板
删除重新建呗,当然你也可以用多索引模板的方法添加/覆盖,但是如果只是简单的尽量就用一个索引模板,多了反而麻烦,
5根据索引模板创建索引
首先创建一个 example* 的索引模板,再根据上面创建索引的方式创建一个 example_2010 索引,这样如果不设置字段,则字段就会和索引模板上的一致,如果在创建索引时加了字段,则字段会合并,取并集
如果是两个索引模板符合,根据order的大小,低的提供基础,高的在低的基础上进行添加/覆盖于特定对象/属性的映射,之后合并成一个虚拟的索引模板用于此索引的创建。
警告:如果具有相同order的多个匹配模板,将导致不确定的合并顺序