elasticsearch 数据 添加,更新,删除,查询
上篇文章说了,elasticsearch mapping字段的增,删,更新。如果把mapping的修改理解成对数据结构的修改,那这篇文章就可以理解成对数据的修改。
1,添加数据
$ curl -XPOST "http://127.0.0.1:9200/ik_v2/chinese/3?pretty" -H "Content-Type: application/json" -d '
{
"id" : 3,
"username" : "测试测试",
"description" : "测试测试"
}'
2,更新数据
2.1,部分数据更新
$ curl -XPOST 'localhost:9200/ik_v2/chinese/3/_update?pretty' -H "Content-Type: application/json" -d '{
"doc" : {
"username" : "testtest"
}
}
}'
$ curl -XGET "http://127.0.0.1:9200/ik_v2/chinese/3?pretty"
{
"_index" : "ik_v2",
"_type" : "chinese",
"_id" : "3",
"_version" : 1,
"found" : true,
"_source" : {
"id" : 3,
"username" : "testtest", //部分更新了
"description" : "测试测试"
}
}
2.2,全部更新
curl -XPOST "http://127.0.0.1:9200/ik_v2/chinese/3?pretty" -H "Content-Type: application/json" -d '
{
"id" : 4,
"username" : "111111111",
"description" : "222222222"
}'
//id为3的数据全部更新了
$ curl -XGET "http://127.0.0.1:9200/ik_v2/chinese/3?pretty"
{
"_index" : "ik_v2",
"_type" : "chinese",
"_id" : "3",
"_version" : 1,
"found" : true,
"_source" : {
"id" : 4,
"username" : "111111111",
"description" : "222222222"
}
}
2.3,拼接更新
$ curl -XPOST 'localhost:9200/ik_v2/chinese/3/_update?pretty' -H "Content-Type: application/json" -d '{
"script" : {
"inline" : "ctx._source.description += params.content", //因为description是string型,所以是拼
"params" : {
"content" : 333
}
}
}'
$ curl -XPOST 'localhost:9200/ik_v2/chinese/3/_update?pretty' -H "Content-Type: application/json" -d '{
"script" : {
"inline" : "ctx._source.id += params.num", //因为id是int型,所以是加
"params" : {
"num" : 2
}
}
}'
$ curl -XGET "http://127.0.0.1:9200/ik_v2/chinese/3?pretty"
{
"_index" : "ik_v2",
"_type" : "chinese",
"_id" : "3",
"_version" : 3,
"found" : true,
"_source" : {
"id" : 6, //加了2
"username" : "111111111",
"description" : "222222222333" //拼了333
}
}
2.4,添加字段,并更新数据
//添加一个字段为sex值为1
$ curl -XPOST 'localhost:9200/ik_v2/chinese/3/_update?pretty' -H "Content-Type: application/json" -d '{
"script" : "ctx._source.sex = 1"
}'
//删除sex这个字段
$ curl -XPOST 'localhost:9200/ik_v2/chinese/3/_update?pretty' -H "Content-Type: application/json" -d '{
"script" : "ctx._source.remove(\"sex\")"
}'
在这里要注意,用这个方法,mapping结构会改变。
注:以上的更新操作都是单条数据更新
2.5,多条数据更新
$ curl -XPOST 'localhost:9200/ik_v2/test/_update_by_query?pretty' -H "Content-Type: application/json" -d '{
> "query": {
> "bool": {
> "should": {
> "match": {
> "username": "高铁"
> }
> }
> }
> },
> "script" : {
> "inline" : "ctx._source.username = \"666666\""
> }
> }'
{
"took" : 6,
"timed_out" : false,
"total" : 3,
"updated" : 2, //更新了二条
"deleted" : 0,
"batches" : 1,
"version_conflicts" : 0,
"noops" : 0,
"retries" : {
"bulk" : 0,
"search" : 0
},
"throttled_millis" : 0,
"requests_per_second" : -1.0,
"throttled_until_millis" : 0,
"failures" : [ ]
}
注意,这个条件字段,最好不要用分词字段,因为不可控。上面我只是为了测试用。
3,删除数据
3.1,单条删除
$ curl -XDELETE "http://127.0.0.1:9200/ik_v2/chinese/3?pretty"
3.2,多条数据删除
$ curl -XPOST 'http://127.0.0.1:9200/ik_v2/_delete_by_query?pretty' -H "Content-Type: application/json" -d '{
> "query": {
> "term": {
> "username": "666666"
> }
> }
> }'
{
"took" : 6,
"timed_out" : false,
"total" : 3,
"deleted" : 2, //删除了二条
"batches" : 1,
"version_conflicts" : 0,
"noops" : 0,
"retries" : {
"bulk" : 0,
"search" : 0
},
"throttled_millis" : 0,
"requests_per_second" : -1.0,
"throttled_until_millis" : 0,
"failures" : [ ]
}
注意,这个条件字段,最好不要用分词字段,因为不可控。
4,查询
$ curl -XPOST "http://127.0.0.1:9200/ik,ik_v2/chinese/_search?pretty" -H "Content-Type: application/json" -d '
{
"query": {
"multi_match": {
"query": "中国高铁",
"fields": [ "username", "description"]
}
}
}
'
查询的操作,非常多,后面会单独的详细说。查询总的来说,支持多索引多字段查询。新版es不支持一个索引多个mapping,老版还支持多mapping查询。
