Поле Elasticsearch разбивается на несколько значений

Я использую стек ELK для журналов доставки. Проблема, с которой я столкнулся, заключается в том, что одно из полей разбивается на несколько значений.
Чтобы было понятно, для продукта поля мои значения должны быть:
Anti Malware, New Anti Virus, VPN-1 & FireWall-1 и еще несколько.

однако при запуске:

curl --user admin:111111 -XPOST 'localhost:9200/filebeat-2016.07.14/_search?pretty' -d '
{
  "size": 0,
  "aggs": {
    "group_by_product": {
      "terms": {
        "field": "product",
        "script": "_value"
      }
    }
  }
}'

Результат:

{
  "size": 0,
  "aggs": {
    "group_by_product": {
      "terms": {
        "field": "product"
      }
    }
  }
}'
{
  "took" : 116,
  "timed_out" : false,
  "_shards" : {
    "total" : 20,
    "successful" : 20,
    "failed" : 0
  },
  "hits" : {
    "total" : 2624573,
    "max_score" : 0.0,
    "hits" : [ ]
  },
  "aggregations" : {
    "group_by_product" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 8748,
      "buckets" : [ {
        "key" : "1",
        "doc_count" : 2439769
      }, {
        "key" : "firewall",
        "doc_count" : 2439769
      }, {
        "key" : "vpn",
        "doc_count" : 2439769
      }, {
        "key" : "anti",
        "doc_count" : 166522
      }, {
        "key" : "malware",
        "doc_count" : 87399
      }, {
        "key" : "new",
        "doc_count" : 79123
      }, {
        "key" : "virus",
        "doc_count" : 79123
      }, {
        "key" : "blade",
        "doc_count" : 8249
      }, {
        "key" : "compliance",
        "doc_count" : 8249
      }, {
        "key" : "identity",
        "doc_count" : 5176
      } ]
    }
  }
}

Таким образом, значение VPN-1 & FireWall-1 разбивается на vpn, firewall и 1.

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

Спасибо.


person bratibrat    schedule 17.07.2016    source источник


Ответы (1)


Вам нужно использовать динамические шаблоны. См. здесь.

Вам просто нужно убедиться, что поля, созданные динамически, соответствуют определенному шаблону, или просто используйте *, если вы хотите, чтобы он был применим ко всем полям. Установите анализатор на ключевое слово. Этот анализатор передает строку как есть.

person rajat    schedule 17.07.2016
comment
Спасибо за ответ. Прочитал вашу ссылку, и все равно что-то мне непонятно. Чтобы применить динамический шаблон, мне нужно, чтобы индекс уже существовал, а если нет, то создать его вручную, но в моем случае (и во всех случаях ELK, я полагаю) logstash создает индексы динамически (в шаблоне : filebeat-%{+YYYY.MM.dd} Итак, как я могу применить динамический шаблон для всех индексов? - person bratibrat; 18.07.2016
comment
Вы всегда можете получить данные в индекс по вашему выбору через logstash, есть опция для индекса, поэтому вы можете указать logstash, в какой индекс отправлять данные. Кроме того, если вы не хотите этого делать, вы всегда можете использовать регулярное выражение в своих сопоставлениях, таких как filebeat-%*, и сопоставление будет применяться ко всем индексам, соответствующим этому шаблону. Обратитесь к этому code972.com/blog/2015/02/ - person rajat; 18.07.2016