英文:
How to get/update aliases with go-elasticsearch?
问题
我正在使用go-elasticsearch
,我需要使用Aliases API中的操作:
- 使用
GET _alias/my-alias-name
获取别名的信息 - 使用
POST _aliases
将多个索引名称添加到别名中,以原子操作的方式
我找不到go-elasticsearch
客户端中这些API的表示方式,是否有其他方法可以使用该库向这些端点发出请求,或者我只需要为这些方法使用一个普通的HTTP客户端?
英文:
I'm using the go-elasticsearch
and I need to use the operations in the Aliases API:
GET _alias/my-alias-name
to get the information on an aliasPOST _aliases
to add multiple index names to an alias in an atomic operation
I can't find the representations of these APIs in the go-elasticsearch
client, is there any alternative way to make a request to these endpoints with the library, or I just need to use a plain HTTP client only for these methods?
答案1
得分: 1
终于找到了一种方法来实现,Aliases API位于Indices API内部:
GET _alias/my-alias-name
:我们可以使用GetAlias()
方法获取别名信息,构建如下请求:
res, err := s.client.Indices.GetAlias(
s.client.Indices.GetAlias.WithName("my-alias-name"),
s.client.Indices.GetAlias.WithContext(context.Background()),
)
if err != nil {
log.Fatal(err)
}
// ...解析响应
POST _aliases
:要在单个操作中添加或删除别名的索引,我们可以使用UpdateAliases()
:
type UpdateAliasRequest struct {
Actions []map[string]*UpdateAliasAction `json:"actions"`
}
// UpdateAliasAction表示Elasticsearch别名API中的操作。
type UpdateAliasAction struct {
Index string `json:"index"`
Alias string `json:"alias"`
}
updateActions := make([]map[string]*UpdateAliasAction, 0)
removeAction := make(map[string]*UpdateAliasAction)
removeAction["remove"] = &UpdateAliasAction{
Index: "old-index-00",
Alias: "my-alias-name",
}
updateActions = append(updateActions, removeAction)
addAction := make(map[string]*UpdateAliasAction)
addAction["add"] = &UpdateAliasAction{
Index: "new-index-00",
Alias: "my-alias-name",
}
updateActions = append(updateActions, addAction)
jsonBody, err := json.Marshal(&UpdateAliasRequest{
Actions: updateActions,
})
if err != nil {
log.Fatal(err)
}
// 发送API请求
res, err := s.client.Indices.UpdateAliases(
bytes.NewBuffer(jsonBody),
s.client.Indices.UpdateAliases.WithContext(context.Background()),
)
if err != nil {
log.Fatal(err)
}
// ...解析响应
英文:
Finally found a way to do it, the Aliases API is inside the Indices API:
GET _alias/my-alias-name
: we can get the alias information using theGetAlias()
method, building a request like this:
res, err := s.client.Indices.GetAlias(
s.client.Indices.GetAlias.WithName("my-alias-name"),
s.client.Indices.GetAlias.WithContext(context.Background()),
)
if err != nil {
log.Fatal(err)
}
// ...parse response
POST _aliases
to add or delete indices to aliases in an single operation we can useUpdateAliases()
:
type UpdateAliasRequest struct {
Actions []map[string]*UpdateAliasAction `json:"actions"`
}
// UpdateAliasAction represents an action in the Elasticsearch Aliases API.
type UpdateAliasAction struct {
Index string `json:"index"`
Alias string `json:"alias"`
}
updateActions := make([]map[string]*UpdateAliasAction, 0)
removeAction := make(map[string]*UpdateAliasAction)
removeAction["remove"] = &UpdateAliasAction{
Index: "old-index-00",
Alias: "my-alias-name",
}
updateActions = append(updateActions, removeAction)
addAction := make(map[string]*UpdateAliasAction)
addAction["add"] = &UpdateAliasAction{
Index: "new-index-00",
Alias: "my-alias-name",
}
updateActions = append(updateActions, addAction)
jsonBody, err := json.Marshal(&UpdateAliasRequest{
Actions: updateActions,
})
if err != nil {
log.Fatal(err)
}
// make API request
res, err := s.client.Indices.UpdateAliases(
bytes.NewBuffer(jsonBody),
s.client.Indices.UpdateAliases.WithContext(context.Background()),
)
if err != nil {
log.Fatal(err)
}
// ...parse response
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论