Elasticsearch专栏-3.es基本用法-基础api

es基本用法-基础api

    • 索引index增删改查
    • 文档doc增删改查
        • 方式1:PUT
        • 方式2:POST
        • 方式1:_doc
        • 方式2:_update
    • 批量操作bulk
      • 同一索引
      • 不同索引
    • 官网数据导入

索引index增删改查

在es7以后,已经不存在type,所以直接创建索引即可。以es_index_test举例。演示用kibana,左侧为api,右侧为结果。

PUT	/es_index_test
{
	"mappings": {
		"properties": {
			"name": {
				"type": "text"
			},
			"age": {
				"type": "long"
			}
		}
	}
}

Elasticsearch专栏-3.es基本用法-基础api_第1张图片

DELETE /es_index_test

Elasticsearch专栏-3.es基本用法-基础api_第2张图片

mappings一旦创建,其字段类型就不能再被修改。对于需要修改字段的场景,一般都是新建新的mapping,把原有数据拷贝过来。
字段虽然不能再被修改,但可以新增新的字段。

GET	/es_index_test

Elasticsearch专栏-3.es基本用法-基础api_第3张图片
基于第一篇讲过的es数据类型,这里贴上一份字段类型更为丰富的index,仅供参考。
这里面涉及到的类型有keyword、text、long、float、date、子对象。其中address字段有两种数据类型,orders包含子对象。

PUT	/es_index_complex
{
	"mappings": {
		"properties": {
			"name": {
				"type": "keyword"
			},
			"age": {
				"type": "long"
			},
			"content": {
				"type": "text"
			},
			"address": {
				"type": "text",
				"fields": {
					"keyw": {
						"type": "keyword"
					}
				}
			},
			"createTime": {
				"type": "date",
				"format": "yyyy-MM-dd HH:mm:ss"
			},
			"orders": {
				"properties": {
					"id": {
						"type": "keyword"
					},
					"money": {
						"type": "float"
					}
				}
			}
		}
	}
}

文档doc增删改查

文档doc的新增有put和post两种方式,它们各自又有_create和_doc两种方式,相当于有两大类,四小类的新增方式。不同方式使用方法,体现在要不要带上id以及数据状态。如下分别举例:

方式1:PUT

(1) _create、不带id。创建失败。

PUT	/es_index_test/_create
{
	"name": "zhangsan",
	"age": 20
}

Elasticsearch专栏-3.es基本用法-基础api_第4张图片
(2) _create、带id。创建成功,返回结果是create。

PUT	/es_index_test/_create/1
{
	"name": "zhangsan",
	"age": 20
}

Elasticsearch专栏-3.es基本用法-基础api_第5张图片
(3) _create、带相同id。创建失败。
Elasticsearch专栏-3.es基本用法-基础api_第6张图片
(4) _doc、不带id。创建失败。

PUT	/es_index_test/_doc/
{
	"name": "lisi",
	"age": 30
}

Elasticsearch专栏-3.es基本用法-基础api_第7张图片
(5) _doc、带id。创建成功,返回结果是create。

PUT	/es_index_test/_doc/2
{
	"name": "lisi",
	"age": 30
}

Elasticsearch专栏-3.es基本用法-基础api_第8张图片
(6) _doc、带相同id。创建成功,返回结果是update。
Elasticsearch专栏-3.es基本用法-基础api_第9张图片

总结
1.在put模式下,无论使用_create还是_doc,都必须带上id。否则创建失败。
2.使用_create方法时,如果id相同,创建失败。
3.使用_doc方法时,如果id相同,创建不会失败,此时是对数据做了update。
4.虽然上述创建过程很绕人和繁琐,但本质还是一样,即:不会存在两份数据拥有相同id。这就是mysql唯一索引概念。

方式2:POST

(1) _create、不带id。创建失败。

POST /es_index_test/_create
{
	"name": "zhangsan",
	"age": 40
}

Elasticsearch专栏-3.es基本用法-基础api_第10张图片

(2) _create、带id。创建成功,返回结果是create。

POST /es_index_test/_create/3
{
	"name": "zhangsan",
	"age": 40
}

Elasticsearch专栏-3.es基本用法-基础api_第11张图片

(3) _create、带相同id。创建失败。
Elasticsearch专栏-3.es基本用法-基础api_第12张图片

(4) _doc、不带id。创建成功,返回结果是create,id自动生成。

POST /es_index_test/_doc/
{
	"name": "zhangsan",
	"age": 40
}

Elasticsearch专栏-3.es基本用法-基础api_第13张图片

(5) _doc、带id。创建成功,返回结果是create。

POST /es_index_test/_doc/4
{
	"name": "zhangsan",
	"age": 40
}

Elasticsearch专栏-3.es基本用法-基础api_第14张图片

(6) _doc、带相同id。创建成功,返回结果是update。
Elasticsearch专栏-3.es基本用法-基础api_第15张图片

总结
1._create方式下,和put处理方式一模一样。id必须带上,且相同id添加会报错。
2._doc方式下,id可以带也可以不带。区别是,带id,以后提交都是更新。不带id,每次提交都是新增。
3.post和put创建文档的本质是一样的,即id的唯一性。可以存在两份同样数据,但不会存在id相同的两份数据。

补充:以上4种方式那种合适,看你喜欢。

DELETE /es_index_test/_doc/4

Elasticsearch专栏-3.es基本用法-基础api_第16张图片

也有两种方法,_doc和_update。直接带上要修改的数据即可。

方式1:_doc
POST /es_index_test/_doc/3
{
	"name": "wangwu",
	"age": 11
}

Elasticsearch专栏-3.es基本用法-基础api_第17张图片

方式2:_update
POST /es_index_test/_update/3
{
	"doc": {
	  "name":"lisi001"
	}
}

Elasticsearch专栏-3.es基本用法-基础api_第18张图片

(1)查询单个文档

GET /es_index_test/_doc/2

Elasticsearch专栏-3.es基本用法-基础api_第19张图片
(2)查看所有文档

GET /es_index_test/_search

Elasticsearch专栏-3.es基本用法-基础api_第20张图片

批量操作bulk

在mysql中,批量操作通常指的是批量插入。而es的批量操作适用性更宽,可以对同一个索引进行批量插入、修改等,也可以对不同索引同时进行不同的批量操作。批量操作涉及的方法有:create、index、update、delete。相关说明如下:

方法 说明
create 如果文档不存在就创建,但如果文档存在就返回错误
index 如果文档不存在就创建,如果文档存在就更新
update 更新一个文档,如果文档不存在就返回错误
delete 删除一个文档,如果要删除的文档id不存在,就返回错误

另外,在批量操作过程中,某一个操作失败,是不会影响其他文档的操作的。而bulk对JSON串的有着严格的要求。每个JSON串不能换行,只能放在同一行。

同一索引

  1. 批量新增
POST /es_index_test/_bulk
{"index":{"_id":"10"}}
{"name":"lisi001","age":30}
{"index":{"_id":"11"}}
{"name":"lisi002","age":31}

Elasticsearch专栏-3.es基本用法-基础api_第21张图片

  1. 批量修改、删除
POST /es_index_test/_bulk
{"update":{"_id":"10"}}
{"doc": {"name": "admin-02", "age":30}}
{"delete":{"_id":"11"}}

Elasticsearch专栏-3.es基本用法-基础api_第22张图片

不同索引

POST /_bulk
{"index": {"_index": "es_index_test", "_id": "10"}}
{"name":"lisi002","age":30}
{"index": {"_index": "es_index_test_02", "_id": "123"}}
{"name":"lisi002","age":30}

Elasticsearch专栏-3.es基本用法-基础api_第23张图片

官网数据导入

为了学习和测试es,官网提供了一批数据。现在我们将其导入,供后面查询使用。
数据地址:https://download.elastic.co/demos/kibana/gettingstarted/accounts.zip
打开后,数据格式如下,我们可以看到这些数据就是批量导入使用的格式。
Elasticsearch专栏-3.es基本用法-基础api_第24张图片

之后,我们将数据拷贝到kibana中,执行即可。这里我指定创建索引为bank。
Elasticsearch专栏-3.es基本用法-基础api_第25张图片
插入完成后,我们来看下索引bank的信息
Elasticsearch专栏-3.es基本用法-基础api_第26张图片
从这里我们可以看到,没有提前创建索引情况下,在插入数据时,es会自动帮我们创建好索引。在第一章中说过,文本是有text和keyword两种数据类型。这里也可以看出,默认情况下,es会为文本字段同时创建text和keyword两种类型。后续该字段就支持分词和不分词查询了。
另外,setting字段包含了索引的分片信息。我们创建索引时候,也可以自己指定。
最后,我们在查询下这次导入数据的总量。
Elasticsearch专栏-3.es基本用法-基础api_第27张图片
数据总量显示1000,和原始数据总量一致。

你可能感兴趣的:(Elasticsearch,elasticsearch)