2017-05-12 5 views
0

Ich bekomme Fehler, wenn ich versuche, dynamisches Mapping in ElasticSearch-Einstellungen zu deaktivieren. Ich verwende ElasticSearch 1.7 Version für die Implementierung.Dynamic Mapping Disabled funktioniert nicht in ElasticSearch

Stacktrace:

8151 [main] WARN org.apache.hadoop.mapred.YarnChild - Exception running child : org.elasticsearch.hadoop.rest.EsHadoopInvalidRequest: Found unrecoverable error [10.74.51.71:9200] returned Not Found(404) - [TypeMissingException[[test_2017051222] type[[vehicle, trying to auto create mapping, but dynamic mapping is disabled]] missing]]; Bailing out.. 
    at org.elasticsearch.hadoop.rest.RestClient.retryFailedEntries(RestClient.java:207) 
    at org.elasticsearch.hadoop.rest.RestClient.bulk(RestClient.java:170) 
    at org.elasticsearch.hadoop.rest.RestRepository.tryFlush(RestRepository.java:225) 
    at org.elasticsearch.hadoop.rest.RestRepository.flush(RestRepository.java:248) 
    at org.elasticsearch.hadoop.rest.RestRepository.doWriteToIndex(RestRepository.java:187) 
    at org.elasticsearch.hadoop.rest.RestRepository.writeToIndex(RestRepository.java:163) 
    at org.elasticsearch.hadoop.mr.EsOutputFormat$EsRecordWriter.write(EsOutputFormat.java:151) 
    at org.apache.hadoop.mapred.ReduceTask$NewTrackingRecordWriter.write(ReduceTask.java:566) 
    at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:89) 
    at org.apache.hadoop.mapreduce.lib.reduce.WrappedReducer$Context.write(WrappedReducer.java:105) 
    at org.apache.hadoop.mapreduce.Reducer.reduce(Reducer.java:150) 
    at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:171) 
    at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:635) 
    at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:390) 
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:422) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698) 
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) 

Einstellungen Snippet:

"settings": { 
    "number_of_shards": 5, 
    "number_of_replicas": 1, 
    "index.query.default_field":"test", 
    "index.refresh_interval" : "5s", 
    "index.mapper.dynamic": false , 
    "analysis": { 
     "filter": { 
      "ngram_filter": { 
       "type": "ngram", 
       "min_gram": 2, 
       "max_gram": 18, 
       "token_chars": [ 
        "letter", 
        "digit" 
       ] 
      } 
     }, 
     "analyzer": { 
      "ngram_analyzer": { 
       "type": "custom", 
       "tokenizer": "standard", 
       "filter": [ 
        "lowercase", 
        "ngram_filter" 
       ] 
      } 
     } 
     } 
    } 

ich bin, dass eine dynamische Abbildung zu sehen ist, in den Einstellungen auf ES Endpunkt deaktiviert, aber der Job fehlschlägt. Ich habe eine AVRO JSON-Mapping-Datei und ES JSON-Mapping-Datei, wo Avro JSON Mapping-Datei ist die Obermenge, während ES JSON Mapping-Datei ist Teilmenge. Ich möchte nicht, dass alle Felder in der Superset-Mapping-Datei im ES-Index abgebildet werden, sondern nur die Dump-Felder, die sich in der Subset-Mapping-Datei befinden. Tue ich es falsch oder gibt es einen anderen Weg, es zu tun?

Danke.

Antwort

0

Das liegt daran, dass Sie eingestellt haben, was bedeutet, dass neue Typen nicht automatisch erstellt werden, ohne sie zuvor zu deklarieren.

Was möchten Sie tun, ist "dynamic": "false" in der Zuordnung Ihres Typs festgelegt. PUT /test_index { "mappings": { "test_type": { "dynamic": "false" } } } Weitere Info: https://www.elastic.co/guide/en/elasticsearch/guide/1.x/dynamic-mapping.html

Beispiel:

  1. Run Mapping PUT /my_index { "mappings": { "testing": { "dynamic": "false", "properties": { "field1": { "type": "string", "index": "analyzed" } } } } }

  2. Index das Dokument in testing Typ POST /my_index/testing/1 { "field1":"demo", "field99":"anotherDemo" }

  3. Antwort von GET /my_index/testing/_mapping { "my_index": { "mappings": { "testing": { "dynamic": "false", "properties": { "field1": { "type": "string" } } } } } }

Wie Sie, dass es keine Zuordnung für den field99 zu sehen ist.

+0

' "Zuordnungen": { "testen": { "dynamic": "false" "Eigenschaften": { "feld1": { "type": "string" "index": "analysiert" }, "field2": { "type": "string" "index": "not_analyzed" }, "field3": { "type": "string" „index ":" not_analyzed " }, " Feld4 ": { " Typ ":" Zeichenfolge ", " Index ":" analysiert " }, "field5": { "type": "string", "index": "analysiert" } } } } 'Hat nicht funktioniert. – Blank

+0

Ich habe den Post mit einem Beispiel bearbeitet. Ich hoffe, das hilft. – YunujD

Verwandte Themen