2017-01-01 5 views
0

У меня есть массив, содержащий объект с ключом и значением. Я бы хотел проверить, является ли поле «ключ» чем-то.Logstash - найти в массиве, где находится поле объекта

Это работает -

if "MyTest" in [doc][customInput][tags][0][key]    
mutate { add_field => {"[doc][test]" => "5555"}}    

Но я жёстко [0] индекс, то соответствующая запись не может быть первой в массиве.

Как его написать?

+0

это совершенно неясно, здесь «соответствующая запись не может быть первым в массиве «? Даже подумал, что это не первый элемент в массиве, он все равно будет искать весь массив? – Kulasangar

+0

@Darth_Vader - он будет искать весь массив, но если в элементе содержатся примитивные строки, все будет в порядке, проблема в том, что мне нужно получить доступ к «ключевому» полю внутри объекта (массив каждого элемента - это объект), и это то, что Я не знаю обойтись без жесткого кодирования индекса [0]? – BornToCode

ответ

0

Я закончил с использованием рубинового фильтра для этой цели (не мог найти способ сделать это без него):

filter { 
    ruby { 
     code => " 
       myArray = event['doc']['customInput']['tags'] 
       if myArray && myArray.detect{|t| t['key'] == "MyTest"}  
        event['doc']['test'] = tags_array.detect{|t| t['key'] == 'MyTest'}['value'] 
       end   
       " 
     } 
     }