在ElasticSearch 7中应用映射

问题描述

我已经使用ElasticSearch 6很长时间了,并且设法为我最常用的字段应用了映射。最近,我创建了另一个群集(v7.7),但是不能使用与已弃用 default 相同的映射。我的映射中有一些嵌套对象。当我用_doc替换 default 时,我可以应用映射,但是对ES的所有传入请求都将被拒绝,并将进入Logstash死信队列。 (我正在使用logstash并将应用程序日志发送到ElasticSearch。这是我的映射json:

  "index_patterns": [
    "logstash-*"
  ],"settings": {
    "index": {
      "mapping": {
        "total_fields": {
          "limit": "50000"
        }
      },"refresh_interval": "5s"
    }
  },"mappings": {
    "_default_": {
      "_all": {
        "norms": false
      },"properties": {
        "@timestamp": {
          "type": "date"
        },"name": {
          "ignore_above": 64,"type": "keyword"
        },"logger": {
          "ignore_above": 64,"hostname": {
          "ignore_above": 256,"pid": {
          "type": "integer"
        },"level": {
          "type": "short"
        },"v": {
          "type": "short"
        },"env": {
          "ignore_above": 64,"service": {
          "ignore_above": 256,"message": {
          "type": "text"
        },"module": {
          "type": "keyword"
        },"subModule": {
          "type": "keyword"
        },"docker": {
          "properties": {
            "container_id": {
              "ignore_above": 512,"type": "keyword"
            },"container_name": {
              "ignore_above": 512,"image_id": {
              "ignore_above": 512,"image_name": {
              "ignore_above": 512,"command": {
              "ignore_above": 512,"tag": {
              "ignore_above": 512,"created": {
              "type": "date"
            }
          }
        },"data": {
          "type": "text"
        },"context": {
          "properties": {
            "Trade": {
              "properties": {
                "id": {
                  "ignore_above": 64,"type": "keyword"
                }
              }
            },"Trader": {
              "properties": {
                "id": {
                  "ignore_above": 64,"type": "keyword"
                },"email": {
                  "ignore_above": 1024,"payment": {
              "properties": {
                "id": {
                  "ignore_above": 64,"err": {
              "properties": {
                "message": {
                  "type": "text"
                },"name": {
                  "ignore_above": 256,"stack": {
                  "type": "text"
                },"code": {
                  "ignore_above": 256,"file": {
                  "ignore_above": 256,"line": {
                  "type": "integer"
                },"cause": {
                  "properties": {
                    "message": {
                      "type": "text"
                    },"name": {
                      "ignore_above": 256,"type": "keyword"
                    },"stack": {
                      "type": "text"
                    },"code": {
                      "ignore_above": 256,"file": {
                      "ignore_above": 256,"line": {
                      "type": "integer"
                    },"cause": {
                      "properties": {
                        "message": {
                          "type": "text"
                        },"name": {
                          "ignore_above": 256,"type": "keyword"
                        },"stack": {
                          "type": "text"
                        },"code": {
                          "ignore_above": 256,"file": {
                          "ignore_above": 256,"line": {
                          "type": "integer"
                        }
                      }
                    }
                  }
                }
              }
            },"req": {
              "properties": {
                "id": {
                  "ignore_above": 64,"remoteAddress": {
                  "type": "ip"
                },"remotePort": {
                  "type": "integer"
                },"method": {
                  "ignore_above": 32,"path": {
                  "type": "text"
                },"body": {
                  "type": "text"
                },"bodyLength": {
                  "type": "integer"
                },"headers": {
                  "type": "text"
                }
              }
            },"res": {
              "properties": {
                "statusCode": {
                  "type": "short"
                },"headers": {
                  "type": "text"
                },"latency": {
                  "type": "integer"
                }
              }
            },"event": {
              "properties": {
                "eventName": {
                  "ignore_above": 256,"context": {
                  "type": "text"
                },"uuid": {
                  "ignore_above": 64,"time": {
                  "type": "long"
                },"attempts": {
                  "type": "short"
                }
              }
            },"task": {
              "properties": {
                "taskName": {
                  "ignore_above": 256,"attempts": {
                  "type": "short"
                },"origin": {
                  "ignore_above": 128,"type": "keyword"
                }
              }
            }
          }
        },"dlq": {
          "properties": {
            "eventFields": {
              "type": "text"
            },"reason": {
              "type": "text"
            }
          }
        },"tags": {
          "ignore_above": 1024,"type": {
          "ignore_above": 1024,"type": "keyword"
        }
      }
    }
  }
}

我想知道如何将其应用于elasticSearch7?

这是ElasticSearch错误

[o.e.a.a.i.m.p.TransportPutMappingAction] [0c85334cb2d41154383d0174502e13f2] Failed to put mappings on indices [[[__PATH__]]],type [logs]
java.lang.IllegalArgumentException: Rejecting mapping update to [logstash-2020.10.02] as the final mapping would have more than 1 type: [_doc,logs]

解决方法

@YLR给出的答案几乎是正确的,但是在他提供的映射中存在一些解析错误。

_all field在6.0中已弃用

_all可能不再为在6.0+版本中创建的索引启用,请使用自定义字段和映射copy_to参数

请参阅此Elasticsearch documentation,以了解更多有关此的信息。

在Elasticsearch 7.0.0或更高版本中创建的索引不再接受 默认映射。在6.x中创建的索引将继续像在Elasticsearch 6.x中一样运行。在7.0的API中不推荐使用类型, 破坏索引创建的更改,放置映射,获取映射,放置 模板,获取模板并获取字段映射API。

修改后的映射为:

{
  "index_patterns": [
    "logstash-*"
  ],"settings": {
    "index": {
      "mapping": {
        "total_fields": {
          "limit": "50000"
        }
      },"refresh_interval": "5s"
    }
  },"mappings": {
    "properties": {
      "@timestamp": {
        "type": "date"
      },"name": {
        "ignore_above": 64,"type": "keyword"
      },"logger": {
        "ignore_above": 64,"hostname": {
        "ignore_above": 256,"pid": {
        "type": "integer"
      },"level": {
        "type": "short"
      },"v": {
        "type": "short"
      },"env": {
        "ignore_above": 64,"service": {
        "ignore_above": 256,"message": {
        "type": "text"
      },"module": {
        "type": "keyword"
      },"subModule": {
        "type": "keyword"
      },"docker": {
        "properties": {
          "container_id": {
            "ignore_above": 512,"type": "keyword"
          },"container_name": {
            "ignore_above": 512,"image_id": {
            "ignore_above": 512,"image_name": {
            "ignore_above": 512,"command": {
            "ignore_above": 512,"tag": {
            "ignore_above": 512,"created": {
            "type": "date"
          }
        }
      },"data": {
        "type": "text"
      },"context": {
        "properties": {
          "trade": {
            "properties": {
              "id": {
                "ignore_above": 64,"type": "keyword"
              }
            }
          },"trader": {
            "properties": {
              "id": {
                "ignore_above": 64,"type": "keyword"
              },"email": {
                "ignore_above": 1024,"payment": {
            "properties": {
              "id": {
                "ignore_above": 64,"err": {
            "properties": {
              "message": {
                "type": "text"
              },"name": {
                "ignore_above": 256,"stack": {
                "type": "text"
              },"code": {
                "ignore_above": 256,"file": {
                "ignore_above": 256,"line": {
                "type": "integer"
              },"cause": {
                "properties": {
                  "message": {
                    "type": "text"
                  },"name": {
                    "ignore_above": 256,"type": "keyword"
                  },"stack": {
                    "type": "text"
                  },"code": {
                    "ignore_above": 256,"file": {
                    "ignore_above": 256,"line": {
                    "type": "integer"
                  },"cause": {
                    "properties": {
                      "message": {
                        "type": "text"
                      },"name": {
                        "ignore_above": 256,"type": "keyword"
                      },"stack": {
                        "type": "text"
                      },"code": {
                        "ignore_above": 256,"file": {
                        "ignore_above": 256,"line": {
                        "type": "integer"
                      }
                    }
                  }
                }
              }
            }
          },"req": {
            "properties": {
              "id": {
                "ignore_above": 64,"remoteAddress": {
                "type": "ip"
              },"remotePort": {
                "type": "integer"
              },"method": {
                "ignore_above": 32,"path": {
                "type": "text"
              },"body": {
                "type": "text"
              },"bodyLength": {
                "type": "integer"
              },"headers": {
                "type": "text"
              }
            }
          },"res": {
            "properties": {
              "statusCode": {
                "type": "short"
              },"headers": {
                "type": "text"
              },"latency": {
                "type": "integer"
              }
            }
          },"event": {
            "properties": {
              "eventName": {
                "ignore_above": 256,"context": {
                "type": "text"
              },"uuid": {
                "ignore_above": 64,"time": {
                "type": "long"
              },"attempts": {
                "type": "short"
              }
            }
          },"task": {
            "properties": {
              "taskName": {
                "ignore_above": 256,"attempts": {
                "type": "short"
              },"origin": {
                "ignore_above": 128,"type": "keyword"
              }
            }
          }
        }
      },"dlq": {
        "properties": {
          "eventFields": {
            "type": "text"
          },"reason": {
            "type": "text"
          }
        }
      },"tags": {
        "ignore_above": 1024,"type": {
        "ignore_above": 1024,"type": "keyword"
      }
    }
  }
}
,

我找到了答案!

Logstash使用 logs 类型将日志发送到ElasticSearch。将 default 替换为日志可解决此问题。但是,要在版本7中应用映射,您需要使用PUT /_template/template_1?include_type_name=true

,

您必须更新v7中不受支持的某些字段。

此请求是一个示例,其中包含“不支持删除/更新”字段:

PUT _index_template/template_1 
{
 "index_patterns": [
    "logstash-*"
  ],"template": {

  "settings": {
    "index": {
      "mapping": {
        "total_fields": {
          "limit": "50000"
        }
      },"mappings": {

      "properties": {
        "@timestamp": {
          "type": "date"
        },"name": {
          "ignore_above": 64,"type": "keyword"
        },"logger": {
          "ignore_above": 64,"hostname": {
          "ignore_above": 256,"pid": {
          "type": "integer"
        },"level": {
          "type": "short"
        },"v": {
          "type": "short"
        },"env": {
          "ignore_above": 64,"service": {
          "ignore_above": 256,"message": {
          "type": "text"
        },"module": {
          "type": "keyword"
        },"subModule": {
          "type": "keyword"
        },"docker": {
          "properties": {
            "container_id": {
              "ignore_above": 512,"type": "keyword"
            },"container_name": {
              "ignore_above": 512,"image_id": {
              "ignore_above": 512,"image_name": {
              "ignore_above": 512,"command": {
              "ignore_above": 512,"tag": {
              "ignore_above": 512,"created": {
              "type": "date"
            }
          }
        },"data": {
          "type": "text"
        },"context": {
          "properties": {
            "trade": {
              "properties": {
                "id": {
                  "ignore_above": 64,"type": "keyword"
                }
              }
            },"trader": {
              "properties": {
                "id": {
                  "ignore_above": 64,"type": "keyword"
                },"email": {
                  "ignore_above": 1024,"payment": {
              "properties": {
                "id": {
                  "ignore_above": 64,"err": {
              "properties": {
                "message": {
                  "type": "text"
                },"name": {
                  "ignore_above": 256,"stack": {
                  "type": "text"
                },"code": {
                  "ignore_above": 256,"file": {
                  "ignore_above": 256,"line": {
                  "type": "integer"
                },"cause": {
                  "properties": {
                    "message": {
                      "type": "text"
                    },"name": {
                      "ignore_above": 256,"type": "keyword"
                    },"stack": {
                      "type": "text"
                    },"code": {
                      "ignore_above": 256,"file": {
                      "ignore_above": 256,"line": {
                      "type": "integer"
                    },"cause": {
                      "properties": {
                        "message": {
                          "type": "text"
                        },"name": {
                          "ignore_above": 256,"type": "keyword"
                        },"stack": {
                          "type": "text"
                        },"code": {
                          "ignore_above": 256,"file": {
                          "ignore_above": 256,"line": {
                          "type": "integer"
                        }
                      }
                    }
                  }
                }
              }
            },"req": {
              "properties": {
                "id": {
                  "ignore_above": 64,"remoteAddress": {
                  "type": "ip"
                },"remotePort": {
                  "type": "integer"
                },"method": {
                  "ignore_above": 32,"path": {
                  "type": "text"
                },"body": {
                  "type": "text"
                },"bodyLength": {
                  "type": "integer"
                },"headers": {
                  "type": "text"
                }
              }
            },"res": {
              "properties": {
                "statusCode": {
                  "type": "short"
                },"headers": {
                  "type": "text"
                },"latency": {
                  "type": "integer"
                }
              }
            },"event": {
              "properties": {
                "eventName": {
                  "ignore_above": 256,"context": {
                  "type": "text"
                },"uuid": {
                  "ignore_above": 64,"time": {
                  "type": "long"
                },"attempts": {
                  "type": "short"
                }
              }
            },"task": {
              "properties": {
                "taskName": {
                  "ignore_above": 256,"attempts": {
                  "type": "short"
                },"origin": {
                  "ignore_above": 128,"type": "keyword"
                }
              }
            }
          }
        },"dlq": {
          "properties": {
            "eventFields": {
              "type": "text"
            },"reason": {
              "type": "text"
            }
          }
        },"tags": {
          "ignore_above": 1024,"type": {
          "ignore_above": 1024,"type": "keyword"
        }
      }
  }
    }
}
}