как извлечь вложенный объект, соответствующий критерию, из эластичного, используя logstash - PullRequest
0 голосов
/ 23 сентября 2018

Я пытаюсь получить вложенный объект, используя вложенный тип данных, из упругого поиска, используя logstash со следующим файлом конфигурации с именем "export-nested.conf"

input {
 elasticsearch {
    hosts => "localhost:9200"
    index => "test"
    query => '
  {"query": {
      "nested": {
      "path": "comments",
      "query": {
        "match": {"comments.active": true}
      },
      "inner_hits": {
         "highlight": {
          "fields": {
            "comments.active": {}
          }
        }
      }
    }
}}'
  }
}
output {
   csv {
    fields => ["comments.author","comments.number"]
    path => "output.csv"
  }
}

Воспроизвести проблему: Шаг 1: - Я создал нижеиндекс со следующим отображением

PUT test
{
  "mappings": {
    "_doc": {
      "properties": {
        "comments": {
          "type": "nested"
        }
      }
    }
  }
}

step2: - Введенные данные в индекс, который я создал:

PUT test/_doc/1?refresh
{
  "title": "Test1",
  "comments": [
    {
      "author": "elis",
      "number": 1,
      "active": true
    },
    {
      "author": "zara",
      "number": 2,
      "active": false
    }
  ]
}

PUT test/_doc/2?refresh
{
  "title": "Test2",
  "comments": [
    {
      "author": "john",
      "number": 3,
      "active": false
    },
    {
      "author": "rob",
      "number": 4,
      "active": true
    }
  ]
}

Step3: - Использовал следующую команду для запуска logstash

bin/logstash -f export-nested.conf

Вывод: я получаю пустые данные в выходном файле.

,
,

Ожидаемый вывод:

elis,1
rob,4

1 Ответ

0 голосов
/ 24 сентября 2018

Я, наконец, получил разрешение для вышеуказанного запроса после прочтения учебников и траты большого количества времени.Я изменил свой файл конфигурации logstash, чтобы решить эту проблему.Я проверил это, и он дает мне желаемый вывод.

input {
 elasticsearch {
    hosts => "localhost:9200"
    index => "objectindex"
    query => '
      {"query": {
        "match": {"comments.active": true}
      }}'
  }
}
filter {
   split {
     field => "comments"
   }
}
output {
  if [comments][active] {  
    stdout { codec => rubydebug }
    csv {
      fields => ["[comments][author]","[comments][number]"]
      path => "output.csv"
    }
  }
}

Вывод: -

elis,1
rob,4

Здесь я разделил массив комментариев с помощью фильтра и затем экспортировал данныетолько те объекты, для которого comments.active имеет значение true.

Эта конфигурация может использоваться с вложенным объектом "comments" типа данных по умолчанию "object", а в выходном плагине я печатаю его на консоли, а также в csvфайл.Таким образом, вы можете выбрать оба или изменить его согласно вашему требованию.

-Спасибо

...