Поле [], используемое в выражении, не существует в сопоставлениях

Функция, которую я пытаюсь реализовать, заключается в создании метрики в кибане, которая отображает количество «непроверенных» пользователей. Я отправляю журнал, отправленный, когда пользователь регистрируется, затем журнал, когда пользователь проверяется.

Итак, подсчет, который я хочу, - это разница между количеством зарегистрированных и подтвержденных.

В kibana я не могу выполнить такую ​​математическую операцию, поэтому я нашел обходной путь: я добавил «скриптовое поле» с именем «unvalidated», которое равно 1, когда пользователь регистрируется, и -1, когда пользователь проверяет свою учетную запись. Сумма поля "unvalidated" должна быть количеством непроверенных пользователей.

Это сценарий, который я определил в моем поле сценария: doc['ctxt_code'].value == 1 ? 1 : doc['ctxt_code'].value == 2 ? -1 : 0

с:

  • ctxt_code 1 как журнал регистрации

  • ctxt_code 2 как проверенный журнал

Эта настройка хорошо работает, когда все мои журналы имеют «ctxt_code», но когда журнал без этого поля отправляется, kibana выдает следующую ошибку:

Field [ctxt_code] used in expression does not exist in mappings ошибка кибаны

Я не могу понять эту ошибку, потому что кибана говорит:

If a field is sparse (only some documents contain a value), documents missing the field will have a value of 0

в чем дело.

Кто-нибудь знает?


person Paul Andrieux    schedule 18.05.2016    source источник
comment
Если вы француз, вы можете помочь нам на французском форуме Elasticsearch: discuss.elastic.co/t/   -  person lenybernard    schedule 21.05.2016
comment
Вы уверены, что поле ctxt_code существует в сопоставлениях всех ваших индексов logstash? Я вижу в правом верхнем углу скриншота, что вы работаете за последние семь дней, можете ли вы убедиться, что индексы logstash за последние семь дней имеют это поле ctxt_code в созданном отображении?   -  person Val    schedule 25.05.2016
comment
Нет новостей хорошие новости?   -  person Val    schedule 27.05.2016


Ответы (1)


Журналы без поля ctxt_code — это нормально... но у вас должно быть сопоставление этого поля в ваших индексах. Я вижу, что вы запрашиваете несколько индексов с помощью logstash-*, поэтому вы, вероятно, нажимаете тот, у которого его нет.

Вы можете включить сопоставление для своего поля во все индексы. Просто зайдите в Sense и использовать это:

PUT logstash-*/_mappings/[your_mapping_name]
{
  "properties": {
    "ctxt_code": {
      "type": "short",           // or any other numeric type, including dates
      "index": "not_analyzed"    // Only works for non-analyzed fields.
    }
  }
}

Если вы предпочитаете, вы можете сделать это из командной строки: CURL -XPUT 'http://[elastic_server]/logstash-*/_mappings/[your_mapping_name]' -d '{ ... same JSON ... }'

person Joseph Tinoco    schedule 22.07.2016