我正在尝试使用Olivere's elastic search client for the Go language版本7创建索引。
有一个示例如何在仓库的wiki page上实现该目标。我相信我会按照以下步骤操作:

client, err := elastic.NewClient()
if err != nil {
    // Handle error
    panic(err)
}

// Create a new index.
mapping := `{
    "settings":{
        "number_of_shards":1,
        "number_of_replicas":0
    },
    "mappings":{
        "properties":{
            "tags":{
                "type":"keyword"
            },
            "location":{
                "type":"geo_point"
            },
            "suggest_field":{
                "type":"completion",
                "payloads":true
            }
        }
    }
}`

ctx := context.Background()
createIndex, err := client.CreateIndex("twitter").BodyString(mapping).Do(ctx)
if err != nil {
    // Handle error
    panic(err)
}
if !createIndex.Acknowledged {
    // Not acknowledged
}

但是我得到一个错误:
Failed to parse mapping [properties]: Root mapping definition has unsupported parameters: [location : {type=geo_point}] [suggest_field : {payloads=true, type=completion}] [tags : {type=keyword}] [type=mapper_parsing_exception]

我知道mapping types have been removed in Elasticsearch V7,但是看不到它应该如何产生上述错误。

我也在相应的仓库中reported这个问题。

最佳答案

原因是
"payloads": true
正如该库的创建者在我的Github问题中指出in his answer一样。删除“有效载荷”后:true,它可以工作。他甚至用解决方案创建了一个gist

请注意,在 flex V6上运行时会收到类似的错误消息,但不小心将golang客户端用于V7。

07-27 13:42