Logstash: De naam van geneste velden op basis van een bepaalde voorwaarde

stemmen
0

Ik ben op zoek naar de geneste velden te hernoemen van Elasticsearch terwijl migreren naar Amazonelasticsearch

In het document, wil ik het wijzigen 1) Wijzig de waarde veld value-zoekwoord als het veld waarde heeft JSON type gegevens 2) Wijzig de waarde veld -standaard te waarderen als het veld waarde heeft grootte meer dan 15

 _source: {
          applicationid : appid,
          interactionId: 716bf006-7280-44ea-a52f-c79da36af1c5,
          interactionInfo: [
            {
              value: {edited:false},
              title: msgMeta
            },
            {
              title: msg,
              value: hello testing,
            },
            {
              title: testing,
              value: I have a text that can be done and changed only the size exist more than 20 so we applied value-standard ,
            }
          ],
          uniqueIdentifier: a21ed89c-b634-4c7f-ca2c-8be6f31ae7b3,
        }
      }

het eindresultaat moet

 _source: {
          applicationid : appid,
          interactionId: 716bf006-7280-44ea-a52f-c79da36af1c5,
          interactionInfo: [
            {
              value-keyword: {edited:false},
              title: msgMeta
            },
            {
              title: msg,
              value: hello testing,
            },
            {
              title: testing,
              value-standard: I have a text that can be done and changed only the size exist more than 20 and so we applied value-standard  ,
            }
          ],
          uniqueIdentifier: a21ed89c-b634-4c7f-ca2c-8be6f31ae7b3,
        }
      }
De vraag is gesteld op 24/10/2019 om 12:02
bron van user
In andere talen...                            


2 antwoorden

stemmen
0

Voor 2), kunt u dit doen als volgt:

filter {
    if [_source][interactionInfo][2][value] =~ /.{15,15}/ {

        mutate {
            rename => ["[_source][interactionInfo][2][value]","[_source][interactionInfo][2][value-standard]"]
        }
    }
}

De reguliere expressie .{15,15}komt overeen met een reeks 15 tekens lang zijn. Als het veld korter is dan 15 tekens, wordt de reguliere expressie niet overeen en het mutate#renamewordt niet toegepast.

Voor 1), zou een mogelijke oplossing kunnen proberen om het veld met de json filter ontleden en als er geen _jsonparsefailurelabel, de naam van het veld.

antwoordde op 24/10/2019 om 17:14
bron van user

stemmen
0

Stichtte de oplossing voor deze. Ik heb een robijn filter in Logstash gebruikt om elk document, evenals geneste document Hier controleren is de robijn code

require 'json'

def register(param)
end

def filter(event)
  infoarray = event.get("interactionInfo")
  infoarray.each {  |x|
      if x.include?"value"
         value = x["value"]
         if value.length > 15
           apply_only_keyword(x)
         end
       end
      if x.include?"value"
        value = x["value"]
         if validate_json(value)
           apply_only_keyword(x)
         end
       end
  }
event.set("interactionInfo",infoarray)
return [event]
end


def validate_json(value)
  if value.nil?
    return false
  end
  JSON.parse(value)
  return true
rescue JSON::ParserError => e
  return false
end

def apply_only_keyword(x)
  x["value-keyword"] = x["value"]
  x.delete("value")
  if x.include?"value-standard"
    x.delete("value-standard")
  end
  if x.include?"value-whitespace"
    x.delete("value-whitespace")
  end
end
antwoordde op 14/11/2019 om 11:07
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more