2015-03-11 1 views
0

Перечисление данных в Solr. Данные изменяются с использованием морфина.morphline @ flume - поиск изменения регулярного выражения и хеш-функции

Ищу пару основных функций в библиотеке morphline:

  1. создать хэш-значение на основе значений других атрибутов (например, хэш = («ша-1», метка времени, сообщение, хозяин, ..)
  2. изменение случай строковое значение атрибута (что-то более общий характер, как regexp_replace бы, а).

пока не хочу, чтобы написать пользовательский обработчик Java .. Я думаю, что это должно быть проще)

ответ

0

(1) Негосударственное решение для хеш-функции, поскольку мне не удалось найти встроенную реализацию морфина, жестко закодированную SHA-1 (напр. нет для петли, жестко закодированы 20 байт):

{  java { 
      imports : "import java.security.*;" 
      code: """ 
       try { 
        MessageDigest digest = MessageDigest.getInstance("SHA-1"); 
        String value; 

        value = (String) record.getFirstValue("message"); 
        if (value != null) { digest.update(value.getBytes("ISO-8859-1"), 0, value.length()); } 
        value = (String) record.getFirstValue("timestamp"); 
        if (value != null) { digest.update(value.getBytes("ISO-8859-1"), 0, value.length()); } 
        value = (String) record.getFirstValue("hostname"); 
        if (value != null) { digest.update(value.getBytes("ISO-8859-1"), 0, value.length()); } 

        byte[] a = digest.digest(); 
        record.replaceValues("id" 
         , String.format("%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X" 
          ,a[0] ,a[1] ,a[2] ,a[3] ,a[4] ,a[5] ,a[6] ,a[7] ,a[8] ,a[9] //SHA-1 has exactly 20 bytes 
          ,a[10],a[11],a[12],a[13],a[14],a[15],a[16],a[17],a[18],a[19])); 
       } 
       catch (java.security.NoSuchAlgorithmException e) { logger.error("hash to id: caught NoSuchAlgorithmException for SHA-1"); } 
       catch (java.io.UnsupportedEncodingException e) { logger.error("hash to id: caught UnsupportedEncodingException"); } 
       finally { 
        return child.process(record); 
       } 
      """ 
     } 
} 

(2) необщего implementaion для нижней трансформации случае (я надеюсь morphline было только что-то вроде regexp_replace):

java { 
     code: """ 
      String program = (String) record.getFirstValue("program"); 
      String program_lc = program.toLowerCase(); 
      if (! program.equals(program_lc)) 
      { record.replaceValues("program", program_lc);  } 
      return child.process(record); 
     """ 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^