2015-11-09 4 views
2

Привет Я пытаюсь получить запрос для фильтрации на основе значений в массиве объектов, структура как этотelasticsearch запрос вложенный массив объектов

{ 
    "_index": "test", 
    "_type": "home", 
    "_id": "1247816", 
    "_score": 1, 
    "_source": { 
    "TranCust": { 
     "CustId": 1247816, 
     "sourceNodeName": "SRC" 
    }, 
    "TranList": [ 
     { 
     "TranId": 2431015, 
     "batchNr": "211" 
     }, 
     { 
     "TranId": 2431016, 
     "batchNr": "213" 
     } 
    ] 
    } 
} 

в качестве примера, я хотел бы найти все документы с TranId из 2431015, мой запрос выглядит следующим образом

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "nested": { 
      "path": "TranList", 
      "query": { 
       "bool": { 
       "must": [ 
        { 
        "match": { 
         "TranId": "2431015" 
        } 
        } 
       ] 
       } 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

, кажется, не возвращать никаких результатов, есть лучший способ, чтобы попытаться написать этот запрос?

EDIT, здесь отображения ставят в

{ 
"mappings": { 
    "home": { 
     "properties": { 
      "TranCust": { 
       "type": "object" 
       } 
      }, 
      "TranList": { 
       "type": "nested" 
      } 
     } 
    } 
} 
} 
+0

Вы уверены, что ваши объекты хранит как 'inested type', а не' object'? –

+0

Я добавил сопоставления, которые я поставил на вопрос – user2168435

ответ

3

ИТАК после многих попыток это как я получил его на работу

{"query": { 
"bool": { 
    "must": [ 
    { 
     "nested": { 
     "path": "TranList", 
     "query": { 
      "bool": { 
      "must": [ 
       { "match": { "TranList.TranId ": "2431015" }} 
      ] 
    }}}} 
    ] 
}} 
} 
Смежные вопросы