我的结构:
人:类型对象。
Person.Cars:类型嵌套。
Person.Cars.Radios:type nested。
我想写一个查询,找到所有人:
{ "query": { "nested": { "path": "person.cars", "query": { "bool": { "filter": [ { "match": { "person.cars.id": { "query": "X" } } }, { "range": { "person.cars.year": { "from": 40, "to": 100 } } } ] }, "nested": { "path": "person.cars.radios", "query": { "bool": { "filter": [ { "match": { "person.cars.radios.id": { "query": "Y" } } } ] } } } } } } }
我的回答:
{
"error": {
"root_cause": [
{
"type": "parsing_exception",
"reason": "[bool] malformed query, expected [END_OBJECT] but found [FIELD_NAME]",
"line": 26,
"col": 5
}
],
"type": "parsing_exception",
"reason": "[bool] malformed query, expected [END_OBJECT] but found [FIELD_NAME]",
"line": 26,
"col": 5
},
"status": 400
}
如何写这样的查询?我知道我必须移动我的第二个嵌套部分,但我不知道如何。
答案 0 :(得分:1)
我建议您添加第二个嵌套查询作为第一个bool过滤器的一部分。
{
"query": {
"nested": {
"path": "person.cars",
"query": {
"bool": {
"filter": [
{
"match": {
"person.cars.id": {
"query": "X"
}
}
},
{
"range": {
"person.cars.year": {
"from": 40,
"to": 100
}
}
},
{
"nested": {
"path": "person.cars.radios",
"query": {
"bool": {
"filter": [
{
"match": {
"person.cars.radios.id": {
"query": "Y"
}
}
}
]
}
}
}
}
]
}
}
}
}
}
答案 1 :(得分:0)
@jordivador你是如此接近。:)只需在范围过滤后删除查询键。
好主意:使用Java API - 检查如何编写查询。
{
"query": {
"nested": {
"path": "person.cars",
"query": {
"bool": {
"filter": [
{
"match": {
"person.cars.id": {
"query": "X"
}
}
},
{
"range": {
"person.cars.year": {
"from": 40,
"to": 100
}
}
},
{
"nested": {
"path": "person.cars.radios",
"query": {
"bool": {
"filter": [
{
"match": {
"person.cars.radios.id": {
"query": "Y"
}
}
}
]
}
}
}
}
]
}
}
}
}
}