func createMapping()

in main.go [253:297]


func createMapping(cfg elasticsearchConfig) error {
	// Versions of Elasticsearch prior to 7.0.0 require type names.
	esVersion, err := getEsVersion(cfg.host, cfg.user, cfg.pass)
	if err != nil {
		return err
	}
	includeTypeName := esVersion.LT(semver.MustParse("7.0.0"))

	var body bytes.Buffer
	properties := map[string]interface{}{
		"properties":        esFieldProperties,
		"dynamic_templates": []interface{}{esExtraMetricsDynamicTemplate},
	}
	if includeTypeName {
		properties = map[string]interface{}{"_doc": properties}
	}
	if err := json.NewEncoder(&body).Encode(map[string]interface{}{"mappings": properties}); err != nil {
		return err
	}

	mappingURL := cfg.host + "/" + cfg.index
	req, err := http.NewRequest(http.MethodPut, mappingURL, &body)
	if err != nil {
		return err
	}
	if cfg.user != "" && cfg.pass != "" {
		req.SetBasicAuth(cfg.user, cfg.pass)
	}
	req.Header.Set("Content-Type", "application/json")
	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		return err
	}
	if err := handleResponse(resp); err != nil {
		esErr, ok := err.(*esError)
		if ok && esErr.Type == exceptionResourceAlreadyExists {
			if *verboseFlag {
				log.Printf("index %q already exists", cfg.index)
			}
			return nil
		}
		return err
	}
	return nil
}