У меня есть следующие данные в elasticsearch типа называют «банк»Elasticsearch Сбой запроса точно для поля массива внутри документа
[
{
"_id": "1",
"name": "ICIC",
"balance": "$2,574.27",
"friends": [
{
"roleid": 0,
"name": "Alana Shepard",
"isactive": true
},
{
"roleid": 1,
"name": "Katheryn Hatfield",
"isactive": false
}
]
},
{
"_id": "2",
"name": "SBK",
"balance": "$2,346.44",
"friends": [
{
"roleid": 0,
"name": "Hinton Kaufman",
"isactive": true
},
{
"roleid": 1,
"name": "Miles Alford",
"isactive": true
}
]
}
]
Теперь я пытаюсь получить документ, где friends.roleid = 1 и друзей .isactive = true. DSL запрос запрашиваемая следующим образом,
{
"query": {
"bool": {
"must": [
{
"term": {
"friends.roleid": {
"value": 1
}
}
},
{
"term": {
"friends.isactive": {
"value": true
}
}
}
]
}
}
}
Результаты, ожидаемые является объектом с _id = 2. Но на самом деле это было как _id = 1, так и _id = 2. Будет очень полезно, если кто-нибудь поможет найти, в чем проблема в запросе DSL. Спасибо
Вам нужно объявить поле 'друзей' как' вложенный' тип. См. Почему здесь: https://www.elastic.co/guide/en/elasticsearch/guide/2.x/nested-objects.html – Val
Val Как написать вложенный запрос и обычный запрос dsl в том же запросе? –
Вы можете использовать 'bool/must', чтобы объединить их вместе так же, как и вы, чтобы объединить запросы' term' внутри вложенного. – Val