2016-05-09 27 views
0

ich eine Standardvorlage an der richtigen Stelle, die wieElasticsearch: Standardvorlage nicht erkennt Datum

PUT /_template/abtemp 
{ 
    "template": "abt*", 
    "settings": { 
    "index.refresh_interval": "5s", 
    "number_of_shards": 5, 
    "number_of_replicas": 1, 
    "index.codec": "best_compression" 
    }, 
    "mappings": { 
    "_default_": { 
     "_all": { 
     "enabled": false 
     }, 
     "_source": { 
     "enabled": true 
     }, 
     "dynamic_templates": [ 
     { 
      "message_field": { 
      "match": "message", 
      "match_mapping_type": "string", 
      "mapping": { 
       "type": "string", 
       "index": "analyzed", 
       "omit_norms": true, 
       "fielddata": { 
       "format": "disabled" 
       } 
      } 
      } 
     }, 
     { 
      "string_fields": { 
      "match": "*", 
      "match_mapping_type": "string", 
      "mapping": { 
       "type": "string", 
       "index": "analyzed", 
       "omit_norms": true, 
       "fielddata": { 
       "format": "disabled" 
       }, 
       "fields": { 
       "raw": { 
        "type": "string", 
        "index": "not_analyzed", 
        "ignore_above": 256 
       } 
       } 
      } 
      } 
     } 
     ] 
    } 
    } 
} 
sieht

die Idee, hier ist das

  1. die Vorlage für alle Indizes gelten, deren Name abt*
  2. Analysieren Sie ein Zeichenfolgenfeld nur, wenn es den Namen message hat. Alle anderen String-Felder werden not_analyzed sein und eine entsprechende .raw Feld

jetzt i indizieren versuchen, einige Daten in diese als

curl -s -XPOST hostName:port/indexName/_bulk --data-binary @myFile.json 

haben und hier ist die Datei

{ "index" : { "_index" : "abtclm3","_type" : "test"} } 
{ "FIELD1":1, "FIELD2":"2015-11-18 15:32:18"", "FIELD3":"MATTHEWS", "FIELD4":"GARY", "FIELD5":"", "FIELD6":"STARMX", "FIELD7":"AL", "FIELD8":"05/15/2010 11:30", "FIELD9":"05/19/2010 7:00", "FIELD10":"05/19/2010 23:00", "FIELD11":3275, "FIELD12":"LC", "FIELD13":"WIN", "FIELD14":"05/15/2010 11:30", "FIELD15":"LC", "FIELD16":"POTUS", "FIELD17":"WH", "FIELD18":"S GROUNDS", "FIELD19":"OFFICE", "FIELD20":"VISITORS", "FIELD21":"STATE ARRIVAL - MEXICO**", "FIELD22":"08/27/2010 07:00:00 AM +0000", "FIELD23":"MATTHEWS", "FIELD24":"GARY", "FIELD25":"", "FIELD26":"STARMX", "FIELD27":"AL", "FIELD28":"05/15/2010 11:30", "FIELD29":"05/19/2010 7:00", "FIELD30":"05/19/2010 23:00", "FIELD31":3275, "FIELD32":"LC", "FIELD33":"WIN", "FIELD34":"05/15/2010 11:30", "FIELD35":"LC", "FIELD36":"POTUS", "FIELD37":"WH", "FIELD38":"S GROUNDS", "FIELD39":"OFFICE", "FIELD40":"VISITORS", "FIELD41":"STATE ARRIVAL - MEXICO**", "FIELD42":"08/27/2010 07:00:00 AM +0000" } 

note dass es einige Felder gibt, z. B. FIELD2, die als date klassifiziert werden sollten. Außerdem sollte FIELD31 als long eingestuft werden. Also die Indizierung passiert und wenn ich mir die Daten ansehe, sehe ich, dass die Zahlen korrekt klassifiziert wurden, aber alles andere wurde unter string gestellt. Wie stelle ich sicher, dass die Felder mit Zeitstempeln als date s klassifiziert werden?

+1

Vorausgesetzt, Ihre 'myFile.csv' Datei ist [richtig formatiert für Massenanrufe] (https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html), brauchen Sie nur Geben Sie '--data-binary @ myFile.csv' an (dh Sie haben das' @ 'Zeichen verpasst) – Val

+1

Die Datei muss json sein, damit sie importiert werden kann. Und es muss ein bestimmtes Format haben. Siehe hier: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html –

+0

danke! das hat funktioniert. Außerdem habe ich die Fragen umformuliert. Kannst du mir bitte helfen? – AbtPst

Antwort

1

Sie haben dort viele Datumsformate. Sie müssen eine Vorlage wie diese:

{ 
    "template": "abt*", 
    "settings": { 
    "index.refresh_interval": "5s", 
    "number_of_shards": 5, 
    "number_of_replicas": 1, 
    "index.codec": "best_compression" 
    }, 
    "mappings": { 
    "_default_": { 
     "dynamic_date_formats":["dateOptionalTime||yyyy-mm-dd HH:mm:ss||mm/dd/yyyy HH:mm||mm/dd/yyyy HH:mm:ss aa ZZ"], 
     "_all": { 
     "enabled": false 
     }, 
     "_source": { 
     "enabled": true 
     }, 
     "dynamic_templates": [ 
     { 
      "message_field": { 
      "match": "message", 
      "match_mapping_type": "string", 
      "mapping": { 
       "type": "string", 
       "index": "analyzed", 
       "omit_norms": true, 
       "fielddata": { 
       "format": "disabled" 
       } 
      } 
      } 
     }, 
     { 
      "dates": { 
      "match": "*", 
      "match_mapping_type": "date", 
      "mapping": { 
       "type": "date", 
       "format": "dateOptionalTime||yyyy-mm-dd HH:mm:ss||mm/dd/yyyy HH:mm||mm/dd/yyyy HH:mm:ss aa ZZ" 
      } 
      } 
     }, 
     { 
      "string_fields": { 
      "match": "*", 
      "match_mapping_type": "string", 
      "mapping": { 
       "type": "string", 
       "index": "analyzed", 
       "omit_norms": true, 
       "fielddata": { 
       "format": "disabled" 
       }, 
       "fields": { 
       "raw": { 
        "type": "string", 
        "index": "not_analyzed", 
        "ignore_above": 256 
       } 
       } 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

Dies ist wahrscheinlich nicht die Formate alles, was Sie da drin haben nicht abdeckt, müssen Sie die verbleibenden hinzuzufügen. Die Idee ist, sie unter getrennt durch || anzugeben und sie dann auch unter dem Feld format für das Feld date selbst anzugeben.

Um eine Idee zu bekommen, was Sie tun müssen, um sie zu definieren, finden Sie unter this section of the documentation für integrierte Formate und this piece of documentation für benutzerdefinierte Formate, die Sie verwenden möchten.

+0

arbeitete wie ein Charme! Vielen Dank – AbtPst