2017-01-06 5 views
0

Я пытаюсь следующий запрос:Elasticsearch получить вложенное поле

{ 
    "fields": [ 
     "id", 
     "payload", 
     "payload_parsed" 
    ], 
    "query": { 
     "filtered": { 
      "filter": { 
       "bool": { 
        "must": [ 
         { 
          "match": { 
           "id": "some-id-123" 
          } 
         } 
        ] 
       } 
      } 
     } 
    } 
} 

payload является строкой JSON, и payload_parsed является разобранной полезной нагрузкой. Я не знаю, какова полезная нагрузка и сколько уровней ее вложенности. Я не делаю запрос на payload_parsed, а скорее на id, и это ошибка, которую я получаю: "field [payload_parsed] isn't a leaf field"

Как получить данные?

ответ

0

Это задокументированная функция. В fields вы можете использовать только листовые узлы, т. Е. Узлы, у которых нет дочерних элементов. В вашем случае вам нужно получить это поле через _source. Попробуйте выполнить следующие запросы:

{ 
    "fields": [ 
     "id", 
     "payload" 
    ], 
    "_source": "payload_parsed", 
    "query": { 
     "filtered": { 
      "filter": { 
       "bool": { 
        "must": [ 
         { 
          "match": { 
           "id": "some-id-123" 
          } 
         } 
        ] 
       } 
      } 
     } 
    } 
} 
Смежные вопросы