ElasticSearch中是否可以在其中包含带有List的嵌套类型?一个例子就像我想的那样
{
"name" : "Zach",
"car" : [
{
"make" : "Saturn",
"model" : "SL",
"colors": ["Red","Blue","Green"]
},
{
"make" : "Saturn",
"model" : "Imprezza",
"colors": ["Pink","Green"]
}
]
}
我如何查询这样的FF?
1)我想询问所有人,他们的汽车是"制造"与#34;土星"并且具有"绿色"
的颜色2)我想询问所有人的汽车颜色是"绿色"或" PINK"
答案 0 :(得分:1)
是。我就是这样做的:
步骤1.设置映射:
PUT /index_name
{
"mappings": {
"type_name": {
"properties": {
"name": {
"type": "string"
},
"car": {
"type": "nested",
"properties": {
"make": {
"type": "string"
},
"model": {
"type": "string"
},
"colors": {
"type": "string"
}
}
}
}
}
}
}
步骤2.填充索引:
PUT /index_name/type_name/1
{
"name": "Zach",
"car": [
{
"make": "Saturn",
"model": "SL",
"colors": [
"Red",
"Blue",
"Green"
]
},
{
"make": "Saturn",
"model": "Imprezza",
"colors": [
"Pink",
"Green"
]
}
]
}
步骤3.查询索引。 注意:您需要使用bool query才能检索包含多个查询参数的文档。
GET /index_name/type_name/_search
{
"query": {
"nested": {
"path": "car",
"query": {
"bool": {
"must": [
{
"match": {
"make": "Saturn"
}
},
{
"match": {
"colors": "Green"
}
}
]
}
}
}
}
}
答案 1 :(得分:0)
是的,您可以拥有嵌套文档数组。
这是您的解决方案。
创建索引,放置映射和数据。
PUT x3
PUT x3/x4/_mapping
{
"x4": {
"properties": {
"name": {
"type": "string"
},
"car": {
"type": "nested",
"properties": {
"make": {
"type": "string",
"index": "not_analyzed"
},
"model": {
"type": "string",
"index": "not_analyzed"
},
"colors": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
PUT /x3/x4/1
{
"name": "Zach",
"car": [
{
"make": "Saturn",
"model": "SL",
"colors": [
"Red",
"Blue",
"Green"
]
},
{
"make": "Saturn",
"model": "Imprezza",
"colors": [
"Pink",
"Green"
]
}
]
}
1)我想询问所有人,他们的汽车是"制造"与#34;土星"并且具有"绿色"
的颜色POST x3/x4/_search
{
"filter": {
"nested": {
"path": "car",
"filter": {
"and": {
"filters": [
{
"term": {
"make":"Saturn"
}
},{
"term": {
"colors":"Green"
}
}
]
}
}
}
}
}
2)我想询问所有人的汽车颜色是"绿色"或" PINK"
POST x3/x4/_search
{
"filter": {
"nested": {
"path": "car",
"filter": {
"terms": {
"car.colors": [
"Green" , "Pink"
]
}
}
}
}
}
引用:: nested filter,mapping,term filter
希望这会有所帮助!!