Elasticsearch(017):es常见的字段映射类型之嵌套类型(nested)
程序员文章站
2022-04-23 15:41:20
...
es中的嵌套类型(nested)
之前在对象类型(object)小节中,我们提到假如需要索引字段是对象数组,而不是对象,这时我们需要使用嵌套数据类型。
形如下面的示例数据结构。
{
"group" : "fans",
"user" : [
{
"first" : "John",
"last" : "Smith"
},
{
"first" : "Alice",
"last" : "White"
}
]
}
我们可以user
属性是一个对象集合。这种结构我们在创建映射时该怎么定义呢?
假如user
字段是对象数组字段(嵌套数据类型)
示例如下
#创建映射的参数
PUT example/docs/_mapping
{
"group": {
"type": "text"
},
"user": {
"type": "nested"
"properties": {
"id": {"type": "keyword"},
"name": {"type": "text"},
"age": {"type": "short"}
}
}
}
假如数据结构定义好了之后,我们想要新增一个文档(document),该怎么办?
示例如下
PUT example/docs/12313213123
{
"group": "研发组",
"user": [
{
"id": 1,
"name": "张三",
"age": 22
},
{
"id": 2,
"name": "李四",
"age": 19
},
{
"id": 3,
"name": "tom",
"age": 21
}
]
}
假如我们想对嵌套中的user
的name
属性进行搜索
示例如下
GET examaple/docs/_search
{
"query": {
"nested": {
"path": "user",
"query": {
"bool": {
"must": [
{
"match": {
"user.name": "李四"
}
}
]
}
}
}
}
}
注意
-
由于嵌套文档被索引为单独的文档,因此只能在nested查询。
-
为具有100个嵌套字段的文档建立索引实际上是为101个文档建立索引,因为每个嵌套文档都被索引为一个单独的文档。为了防止定义不正确的映射,每个索引可以定义的嵌套字段的数量默认为限制为50。
上一篇: Hibernate JPA注解一对多
下一篇: Promise的前世今生和妙用技巧
推荐阅读
-
Elasticsearch(017):es常见的字段映射类型之嵌套类型(nested)
-
Elasticsearch(023):es常见的字段映射类型之IP类型
-
Elasticsearch(021):es常见的字段映射类型之地理点类型(geo-point)
-
Elasticsearch(025):es常见的字段映射类型之单词计数类型(token count)
-
Elasticsearch(019):es常见的字段映射类型之数组类型(arrays)
-
Elasticsearch(020):es常见的字段映射类型之二进制类型(binary)
-
Elasticsearch(016):es常见的字段映射类型之对象类型(object)
-
Elasticsearch(024):es常见的字段映射类型之 连接类型(join type)
-
Elasticsearch(022):es常见的字段映射类型之地理形状类型(geo_shape、多边的复杂的地址形状)
-
Elasticsearch(014):es常见的字段映射类型之date(日期类型)