欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > ElasticSearch学习笔记四:基础操作(二)

ElasticSearch学习笔记四:基础操作(二)

2024/11/20 19:10:23 来源:https://blog.csdn.net/weixin_37624903/article/details/143889246  浏览:    关键词:ElasticSearch学习笔记四:基础操作(二)

一、前言

上一篇文章中我们学习了ES中的基础操作,包括索引和映射,同时也学习了ES中的基础数据类型,今天我们继续学习其他的数据类型。

二、复杂数据类型

1、数组(Array)

在ES中没有特别指定数据类型,换句话说任何类型的字段都可以组成数组。对于一个数组内所有数据的类型必须一致。例如 array1 [1,2,3,4,5] ,对于对象数组(数组内的元素是对象)有些特别,ES不支持独立的查询数组内的对象,如果想使用则使用 Nested(嵌套类型),这个放到后面学习。

案例:

PUT my-index-000001/_doc/1
{"message": "some arrays in this document...","tags":  [ "elasticsearch", "wow" ], "lists": [ {"name": "prog_list","description": "programming list"},{"name": "cool_list","description": "cool stuff list"}]
}PUT my-index-000001/_doc/2 
{"message": "no arrays in this document...","tags":  "elasticsearch","lists": {"name": "prog_list","description": "programming list"}
}GET my-index-000001/_search
{"query": {"match": {"tags": "elasticsearch" }}
}

这里可以看到文档2并没有数组,但是也可以正常写入,再解释一下上面说的无法单独查询数组内的对象,因为ES会把数组扁平化,所以我搜索“prog_list”,也会把“cool_list”带出来,因为他们在一个数组内,而不是单独的对象。

2、Object

对于JSON对象来说很多时候是分层的,也就是说有内部对象,此时就可以使用Object类型

案例:

PUT my-index-000001/_doc/1
{ "region": "US","manager": { "age":     30,"name": { "first": "John","last":  "Smith"}}
}当然也可以换一种方式创建
PUT my-index-000001
{"mappings": {"properties": { "region": {"type": "keyword"},"manager": { "properties": {"age":  { "type": "integer" },"name": { "properties": {"first": { "type": "text" },"last":  { "type": "text" }}}}}}}
}
3、Nested

嵌套类型是对象数据类型的特殊版本,它允许以可以彼此独立查询的方式对对象数组进行索引。

案例

PUT my-index-000001
{"mappings": {"properties": {"user": {"type": "nested" }}}
}PUT my-index-000001/_doc/1
{"group" : "fans","user" : [{"first" : "John","last" :  "Smith"},{"first" : "Alice","last" :  "White"}]
}GET my-index-000001/_search
{"query": {"nested": {"path": "user","query": {"bool": {"must": [{ "match": { "user.first": "Alice" }},{ "match": { "user.last":  "Smith" }} ]}}}}
}GET my-index-000001/_search
{"query": {"nested": {"path": "user","query": {"bool": {"must": [{ "match": { "user.first": "Alice" }},{ "match": { "user.last":  "White" }} ]}},"inner_hits": { "highlight": {"fields": {"user.first": {}}}}}}
}
与上面数组很像,不同的是Nested支持对数组内的数据单独进行搜索,这里不多赘述。
4、其他

ES中还有很多其他的数据类型,具体的可以参考 Field data types | Elasticsearch Guide [7.17] | Elastic

https://www.elastic.co/guide/en/elasticsearch/reference/7.17/mapping-types.html

三、文档操作

1、创建文档

语法:PUT /索引名/_doc/ID 或者 POST /索引名/_doc/ID

解释:ID可选,不一定要填写,如果不填写则由。

案例1:创建一个文档,不带ID

POST my-index-000001/_doc/
{"@timestamp": "2099-11-15T13:12:00","message": "GET /search HTTP/1.1 200 1070000","user": {"id": "kimchy"}
}

上面这个案例我们创建了一个文档,同时没有指定ID,由ES为我们自动创建文档ID。

案例2:创建文档并且自定义文档

POST my-index-000001/_doc/1
{"@timestamp": "2099-11-15T13:12:00","message": "GET /search HTTP/1.1 200 1070000","user": {"id": "hardy"}
}
这样我们就创建了一个自定义ID的文档
2、查询文档

查询是ES中最核心的功能,这部分内容后续将单独抽取出来,这里暂时不讲述

3、删除文档

1、根据ID删除

DELETE /索引名/ID

2、根据条件删除

根据条件删除和搜索是很类型的,这部分也放到后续学习搜索时一起讲

4、更新文档

1、根据ID更新

POST /<index>/_update/<_id>
{"doc": {"field1": "new_value1","field2": "new_value2"}
}

2、根据条件更新

根据条件更新和搜索是很类型的,这部分也放到后续学习搜索时一起讲

四、结束语

今天学习了剩下的常见的数据类型,还有简单的文档操作。这些相对来说简单,ES中最复杂的是搜索,搜索会放到后面详细讲解,希望对你有所帮助。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com