当前位置: > > > > 如何通过 go-elasticsearch 包添加映射
如何通过 go-elasticsearch 包添加映射
来源:stackoverflow
2024-04-27 09:51:35
0浏览
收藏
“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《如何通过 go-elasticsearch 包添加映射》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!
问题内容
基本上,当我尝试将新文档插入到不存在的索引时,它会自动设置为动态映射。 但我遇到了一些问题,有时我想更改 ES 上字段的数据类型。
我想通过我的 go-lang 服务设置它,但看起来 go-elasticsearch 包不支持它?如果我错了请纠正我
正确答案
您可以使用
创建索引
client := gettypedclient()
// create index if not exists
index := "index_name"
if !isindexexists(getclient(), index) {
res, err := client.indices.create(getindexname(index)).do(context.background())
if err != nil {
...
}
}
并放置映射以及
// update mapping
memorymapping := types.newnestedproperty()
memorymapping.properties = map[string]types.property{
"total": types.newintegernumberproperty(),
"free": types.newintegernumberproperty(),
"used": types.newintegernumberproperty(),
}
uptimemapping := types.newnestedproperty()
uptimemapping.properties = map[string]types.property{
"app": types.newintegernumberproperty(),
"os": types.newintegernumberproperty(),
}
loadmapping := types.newnestedproperty()
loadmapping.properties = map[string]types.property{
"avg1": types.newfloatnumberproperty(),
"avg5": types.newfloatnumberproperty(),
"avg15": types.newfloatnumberproperty(),
}
res, err := client.indices.putmapping(index).
request(&putmapping.request{
properties: map[string]types.property{
"createdat": types.newdateproperty(),
"memory": memorymapping,
"uptime": uptimemapping,
"load": loadmapping,
},
}).
do(context.background())
if err != nil {
...
}
您可以使用 go-elasticsearch/esapi 创建索引及其映射
创建如下请求:
mapping := `{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"message": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
}
}`
// Index - pass index name
// Body - pass mapping, settings etc
indexReq := esapi.IndicesCreateRequest{
Index: "my-index",
Body: strings.NewReader(string(mapping)),
}
resp, err := indexReq.Do(ctx, elasticclient)
if err != nil {
// handle error
}
通过这种方式,您可以创建具有特定映射的新索引
今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注米云公众号,一起学习编程~
