2016-05-09 6 views
0

У меня есть шаблон по умолчанию в месте, которое выглядит какElasticsearch: По умолчанию шаблон не определяет дату

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 
       } 
       } 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

идея здесь это

  1. применить шаблон для всех индексов, чье имя соответствует abt*
  2. Только проанализируйте поле строки, если оно называется message. Все другие струнные поля будут not_analyzed и будут иметь соответствующую .raw поля

теперь я индексировать некоторые данные в это как

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

и здесь является файл

{ "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" } 

сведению что существует несколько полей, таких как FIELD2, которые должны быть классифицированы как date. Кроме того, FIELD31 следует классифицировать как long. Таким образом, индексирование происходит, и когда я смотрю на данные, я вижу, что цифры были правильно классифицированы, но все остальное было помещено под string. Как я могу убедиться, что поля, имеющие временные метки, классифицируются как date?

+1

Если ваш файл 'myFile.csv' [правильно отформатирован для массовых вызовов] (https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html), вам просто нужно для указания '--data-binary @ myFile.csv' (т. е. вы пропустили знак' @ ') – Val

+1

Файл должен быть json, чтобы иметь возможность импортировать объем. И он должен иметь определенный формат. См. Здесь: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html –

+0

спасибо! это сработало. Кроме того, я перефразировал вопросы. не могли бы вы помочь мне? – AbtPst

ответ

1

У вас там много форматов даты. Вам нужен шаблон, как этот:

{ 
    "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 
       } 
       } 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

Это, вероятно, не покрывает все форматы, которые Вы имеете в наличии, вам необходимо добавить оставшиеся из них. Идея состоит в том, чтобы указать их под dynamic_date_formats, разделенных ||, а затем указать их также в поле format для самого поля date.

Чтобы получить представление о том, что вам нужно сделать, чтобы определить их, см. this section of the documentation для встроенных форматов и this piece of documentation для любых пользовательских форматов, которые вы планируете использовать.

+0

работал как шарм! благодаря – AbtPst

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