2017-05-12 60 views
0

當我試圖禁用ElasticSearch設置中的動態映射時,我遇到了錯誤。我正在使用ElasticSearch 1.7版本進行實施。動態映射禁用在ElasticSearch中不起作用

堆棧跟蹤:

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) 

設置片段:

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

我看到的是動態映射,在設置中禁用對ES點,但作業將失敗。我有一個avro json映射文件和es json映射文件,其中avro json映射文件是超集,而es json映射文件是子集。我不希望超集映射文件中的所有字段都反映在ES索引上,而只是轉儲位於子集映射文件中的字段。我做錯了,還是有其他的方式嗎?

謝謝。

回答

0

這是因爲你已經設置了"index.mapper.dynamic": false這意味着新的類型將不會自動創建,而無需先聲明它們。

你想要做的是在你的類型映射中設置"dynamic": "false" PUT /test_index { "mappings": { "test_type": { "dynamic": "false" } } } 有關詳細信息: https://www.elastic.co/guide/en/elasticsearch/guide/1.x/dynamic-mapping.html

實施例:

  1. 運行映射 PUT /my_index { "mappings": { "testing": { "dynamic": "false", "properties": { "field1": { "type": "string", "index": "analyzed" } } } } }

  2. 指數 響應

  3. testing型文檔 { "my_index": { "mappings": { "testing": { "dynamic": "false", "properties": { "field1": { "type": "string" } } } } } }

正如你會看到,沒有爲field99沒有映射。

+0

' 「映射」:{ 「測試」:{ 「動態」: 「假」, 「屬性」:{ 「field1的」:{ 「類型」: 「串」, 「索引」: 「分析」 }, 「FIELD2」:{ 「類型」: 「串」, 「索引」: 「not_analyzed」 }, 「字段3」:{ 「類型」: 「串」, 「索引「:」not_analyzed「 }, 」field4「:{ 」type「:」string「, 」index「:」analysed「 }, 「字段5」:{ 「類型」: 「串」, 「指數」: 「分析」 }} } } '沒有工作。 – Blank

+0

我用一個例子編輯了這篇文章。希望有所幫助。 – YunujD