2013-11-04 13 views
6

Ich habe Daten von Logstash, die übereifrig analysiert werden. Im Wesentlichen würde das Feld "OS X 10.8" in "OS", "X" und "10.8" aufgeteilt werden. Ich weiß, ich könnte nur die Zuordnung ändern und für vorhandene Daten neu indizieren, aber wie würde ich den Standardanalysator (entweder in ElasticSearch oder LogStash) ändern, um dieses Problem in zukünftigen Daten zu vermeiden?Ändern des Standardanalysators in ElasticSearch oder LogStash

Konkrete Lösung: Ich habe eine Zuordnung für den Typ erstellt, bevor ich zum ersten Mal Daten an den neuen Cluster gesendet habe.

Lösung von IRC: Eine Index Template

Antwort

7

Wie Sie wissen, verwendet Elasticsearch Standard Analysator, wenn kein Analysator explizit angegeben wird. Während Sie die Vorlagen einstellen, können Sie also Ihren eigenen Analysator mit dem Namen Standard einstellen. Und dort können Sie eigene Regeln für das Setzen von Analyzer, Tokenzier, Token-Filtern festlegen.

Hier sind einige hilfreiche Links, die Sie besser verstehen helfen:

http://elasticsearch-users.115913.n3.nabble.com/How-we-can-change-Elasticsearch-default-analyzer-td4040411.html

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis.html

6

Nach dieser page Analysatoren angegeben pro-Abfrage werden kann, pro-Feld oder pro-Index.

Bei index time, Elasticsearch werden in dieser Reihenfolge für einen Analysator aussehen:

  • Der Analysator im field mapping definiert.
  • Ein Analysator namens default in den Indexeinstellungen.
  • Der standard Analysator.

Bei query time, gibt es noch ein paar Schichten:

  • Der Analysator in einem full-text query definiert.
  • Die im Feld Mapping definierte search_analyzer.
  • Der Analysator definiert in der field mapping.
  • Ein Analysator namens default_search in den Indexeinstellungen.
  • Ein Analysator namens default in den Indexeinstellungen.
  • Der standard Analysator.

Auf der anderen Seite, diese page Punkt zu wichtigen Sache:

Ein Analysator unter einem logischen Namen registriert ist. Es kann dann von Mapping-Definitionen oder bestimmten APIs referenziert werden. Wenn keine definiert sind, werden Standardwerte verwendet. Es gibt eine Option zu definieren, welche Analysatoren standardmäßig verwendet werden, wenn keine abgeleitet werden können.

So ist die einzige Möglichkeit, einen eigenen Analysator als Standard zu definieren, überschreibt eine der pre-defined analyzers, in diesem Fall den default Analysator.

{ 
    "settings": { 
    "number_of_shards": 1, 
    "number_of_replicas": 0, 
    "analysis": { 
     "char_filter": { 
     "charMappings": { 
      "type": "mapping", 
      "mappings": [ 
      "\\u200C => " 
      ] 
     } 
     }, 
     "filter": { 
     "persian_stop": { 
      "type": "stop", 
      "stopwords_path": "stopwords.txt" 
     } 
     }, 
     "analyzer": { 
     "default": {<--------- analyzer name must be default 
      "tokenizer": "standard", 
      "char_filter": [ 
      "charMappings" 
      ], 
      "filter": [ 
      "lowercase", 
      "arabic_normalization", 
      "persian_normalization", 
      "persian_stop" 
      ] 
     } 
     } 
    } 
    } 
} 
+0

Arbeiten auf '2.4.6' dank: es bedeutet, dass wir nicht einen beliebigen Namen für unseren Analysator verwenden können, muss es default

hier ein einfaches Beispiel für Indexeinstellung genannt werden. Die andere Antwort hat nicht funktioniert. – cahen

+0

@cohen Ich bin froh, dass es dir helfen könnte. –

Verwandte Themen