Как получить количество массивов вложенных объектов в эластичном поиске

Может ли кто-нибудь помочь мне получить агрегированное количество вложенных объектов в эластичном поиске, скажем, если мое сопоставление эластичных объектов поиска выглядит следующим образом:

{
"employe": {
"dynamic": "strict",
"properties": {
  "empId":{
    "type": "keyword"
  },
  "entities": {
     "type": "nested"
      }
   }
 }
}

сущности - это тип массива с другим объектом. Я хотел получить количество сущностей отфильтрованного элемента. Я пробовал какой-то эластичный поисковый запрос, но он не работает

{
"query": {
"bool": {
  "filter": [
    {
      "terms": {
        "empId": [12121,2121212]
      }
    }
  ]
}
},
"size": 0,
"aggs": {
"entities_agg": {
  "sum": {
      "field": "entities",
      "script": {
        "inline": "doc['entities'].values.size()"
      }
    }
  }
 }
}

person Ashish Yadav    schedule 13.03.2018    source источник


Ответы (1)


Вы не можете получить доступ к вложенным данным через значения документа, вместо этого вам нужно получить доступ к исходному документу, например:

{
  "query": {
    "bool": {
      "filter": [
        {
          "terms": {
            "empId": [
              12121,
              2121212
            ]
          }
        }
      ]
    }
  },
  "size": 0,
  "aggs": {
    "entities_agg": {
      "sum": {
        "script": {
          "inline": "params._source.entities.size()"
        }
      }
    }
  }
}
person Val    schedule 13.03.2018
comment
Я получаю эту ошибку {type: script_exception, причина: ошибка выполнения, script_stack: [params._source.entities.size (), ^ ---- ЗДЕСЬ], script: params._source.entities.size (), lang: безболезненно, вызвано_ по: {type: null_pointer_exception, cause: null}} - person Ashish Yadav; 14.03.2018
comment
Вероятно, это потому, что в некоторых документах нет поля entities. Это возможно? - person Val; 14.03.2018
comment
Хорошо, тогда какую версию ES вы используете? - person Val; 14.03.2018
comment
версия: {номер: 5.6.8, build_date: 2018-02-16T16: 46: 30.010Z, build_snapshot: false, lucene_version: 6.6.1} - person Ashish Yadav; 14.03.2018
comment
Можете ли вы назвать подполе, которое присутствует во всех entities? - person Val; 14.03.2018
comment
Вы правы, я подробно рассмотрел все элементы, и в одном из них я обнаружил, что у элемента нет сущностей. Большое спасибо, ваш запрос у меня работает нормально. - person Ashish Yadav; 14.03.2018
comment
Хорошо, здорово, рад, что это помогло! - person Val; 14.03.2018
comment
Еще один вопрос, если моя структура элемента похожа на эту { "entities": [ { "sets": [ { "text": "hello", "entityType": "one", "mention": 1 } ] } ] }, тогда как я могу теперь получить совокупные значения наборов - person Ashish Yadav; 14.03.2018
comment
здесь я создал заголовок stackoverflow.com/questions/49270141/, если вы также можете помочь в этом - person Ashish Yadav; 14.03.2018