【问题标题】:ElasticSearch Filtered aliases with multiple termsElasticSearch 过滤具有多个术语的别名
【发布时间】:2018-11-06 15:36:47
【问题描述】:

我指的是文档 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" ]} }
            }
        }
    ]
}

我还可以对此类别名使用计数、删除按查询、更新按查询等操作吗? 此类别名是否有任何限制
问候,

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    如果您的别名 指向多个索引,则您只能在创建别名时需要明确提及的一个特定索引上执行 writes(insert, update)如下图。

    POST /_aliases
    {  
       "actions":[  
          {  
             "add":{  
                "index": "mysampleindex",
                "alias": "myalias",
                "is_write_index": true
             }
          },
          {  
             "add":{  
                "index": "myothersampleindex",
                "alias": "myalias"
             }
          }
       ]
    }
    

    据此LINK

    每个别名只能分配一个索引作为写索引 时间。如果没有指定写索引并且有多个索引 被别名引用,则不允许写入。

    我还可以对此类别名使用countdelete_by_queryupdate_by_query 等操作吗?

    • count - 是的

    • delete_by_query

      • 是的,但与写入不同,is_write_index 不适用于删除,这意味着查询 POST myalias/_delete_by_query { "query": { "match_all": {} }} 最终会删除所有索引中的所有数据,即使提到了上述属性。
      • 确保您不会意外删除别名指向的所有索引的更好方法是不使用别名。
    • update_by_query - 上面已经提到了。

    我有一个要求,我想使用别名来对多个用户的文档进行分组,如果我们创建具有多个过滤条件的别名,如下所示是个好主意吗?

    有限制的可以参考这个SOF link

    至于好主意,老实说,它取决于抽象级别,即您打算如何为应用程序添加抽象层。设计是一个广泛的主题,它取决于许多因素,例如您打算如何创建别名,而不是在查询中添加过滤器。需要注意的一件重要事情是,如果您将索引公开给外部消费者并希望限制他们或确保他们不会得到不需要的结果,那么这当然是有意义的。

    我可以想到下面的用例,我认为使用过滤查询的别名是有意义的。

    • 主索引 - globalindex
    • 别名 - asia-pacific, europe, americas, africa

    您的globalindex 将有一个名为"region": "asia-pacific" 的字段,您可以使用它来创建过滤器别名。但话又说回来,我并不是说这是最佳解决方案。我也可以创建多个索引。

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-13
      • 1970-01-01
      • 2018-04-26
      相关资源
      最近更新 更多