elasticsearch - ElasticSearch 过滤具有多个术语的别名
问题描述
我指的是文档 https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html#filtered 根据这个我们可以有一个过滤别名如下
POST /_aliases
{
"actions" : [
{
"add" : {
"index" : "test1",
"alias" : "alias2",
"filter" : { "term" : { "user" : "kimchy" } }
}
}
]
}
我有一个要求,我想使用别名来对多个用户的文档进行分组,如果我们创建具有多个过滤条件的别名,如下所示。
POST /_aliases
{
"actions" : [
{
"add" : {
"index" : "test1",
"alias" : "alias2",
"filter" : { "terms" : { "user" : ["kimchy","testuser1","testuser2" ]} }
}
}
]
}
我也可以在这样的别名上使用计数、delete_by_query、update_by_query 等操作吗?此类别名是否有任何限制
问候,
解决方案
如果您的别名指向多个索引,则您只能在创建别名时需要明确提及的一个特定索引上执行写入(插入、更新),如下所示。
POST /_aliases
{
"actions":[
{
"add":{
"index": "mysampleindex",
"alias": "myalias",
"is_write_index": true
}
},
{
"add":{
"index": "myothersampleindex",
"alias": "myalias"
}
}
]
}
根据这个LINK,
每个别名一次只能分配一个索引作为写入索引。如果没有指定写入索引并且有多个索引被别名引用,则不允许写入。
我也可以在这样的别名上使用
count
,delete_by_query
, 之类的操作吗?update_by_query
count
- 是的delete_by_query
- 是的,但与写入不同的是,这
is_write_index
不适用于删除,这意味着POST myalias/_delete_by_query { "query": { "match_all": {} }}
即使提到了上述属性,查询最终也会从所有索引中删除所有数据。 - 确保您不会意外删除别名指向的所有索引的更好方法是不使用别名。
- 是的,但与写入不同的是,这
update_by_query
- 上面已经提到了。
我有一个要求,我想使用别名来对多个用户的文档进行分组,如果我们创建具有多个过滤器术语的别名,如下所示是个好主意吗?
那么限制,你可以参考这个SOF 链接
至于好主意,老实说,它取决于抽象级别,即您打算如何为应用程序添加抽象层。设计是一个广泛的主题,它取决于许多因素,例如您打算如何创建别名,而不是在查询中添加过滤器。需要注意的一件重要事情是,如果您将索引暴露给外部消费者并希望限制他们或确保他们不会得到不需要的结果,那么这肯定是有意义的。
我可以想到下面的用例,我认为使用过滤查询的别名是有意义的。
- 主要指数 -
globalindex
- 别名 -
asia-pacific
,europe
,americas
,africa
您globalindex
将有一个名为的字段"region": "asia-pacific"
,您可以使用它来创建过滤器别名。但话又说回来,我并不是说这是最佳解决方案。我也可以创建多个索引。
希望能帮助到你!
推荐阅读
- scala - 有没有办法通过 Scala 的 breakOut 来保持排序?
- php - 未定义的属性:stdClass::$id 错误
- matlab - 是否可以在 Matlab 的 webread 中激活 gzip 支持?
- python - 如何从 Flask 中的单独模块登录
- azure - 缺少 Azure B2C 统计信息?
- xcode - Xcode Sever Bot 自动化 Git 拉取
- c - 不兼容的指针类型警告和更新函数中的现有数组
- ios - UIPasteboard 粘贴格式化 RTF
- python - 未显示的帖子列表 - django
- javascript - 如何让幻灯片指示器与当前幻灯片匹配?