es的nested查询
warning:
这篇文章距离上次修改已过182天,其中的内容可能已经有所变动。
Elasticsearch的nested查询用于查询嵌套类型的字段。嵌套类型是指一个字段,其中包含了一个数组,数组中的每个元素都是一个独立的文档,这些文档被索引为父文档的一部分。
以下是一个使用nested查询的例子:
假设我们有一个名为products
的索引,其中的文档包含一个名为specs
的嵌套字段,每个spec
包含size
和color
信息。
首先,我们需要将specs
字段标记为nested
类型:
PUT /products
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"specs": {
"type": "nested",
"properties": {
"size": {
"type": "keyword"
},
"color": {
"type": "keyword"
}
}
}
}
}
}
然后,我们可以添加一些文档:
POST /products/_doc/1
{
"name": "Apple Watch",
"specs": [
{ "size": "38mm", "color": "silver" },
{ "size": "42mm", "color": "gold" }
]
}
POST /products/_doc/2
{
"name": "Apple iPhone",
"specs": [
{ "size": "5.5", "color": "black" },
{ "size": "6.1", "color": "jet" }
]
}
现在,如果我们想要查询所有包含size
为5.5
且color
为black
的产品,我们可以执行以下nested查询:
POST /products/_search
{
"query": {
"nested": {
"path": "specs",
"query": {
"bool": {
"must": [
{
"match": {
"specs.size": "5.5"
}
},
{
"match": {
"specs.color": "black"
}
}
]
}
}
}
}
}
这将返回只有一个产品符合条件,即Apple iPhone。
评论已关闭