查找没有别名的elasticsearch索引

时间:2017-03-30 09:09:21

标签: elasticsearch

我有一个弹性搜索集群,我需要调查其索引。具体来说,我想找到所有没有别名的索引。

这甚至可能吗?如果是这样,怎么样?

(对此问题使用sense表示法。)

我知道即使别名字段为空,我也可以使用别名获取所有索引:

GET _aliases

而且我知道我可以获得所有具有别名的索引:

GET /*/_alias/*

但是我可以获得所有索引而没有别名吗?

显然,我可以获取所有索引,然后使用awk之类的工具或其他任何工具为我做,但我天真的猜测是,弹性搜索一次完成所有这些工作是最有效的

2 个答案:

答案 0 :(得分:2)

简短回答:没有简单的api可以找出哪些索引没有链接到别名。

答案很长:你可以试试' _cluster / state'端点是这样的:

GET _cluster/state?filter_path=metadata.indices.test.aliases

其中 test 是索引的名称。它给出了以下结果:

{
  "metadata": {
    "indices": {
      "test": {
        "aliases": []
      }
    }
  }
}

现在,如果我尝试使用实际链接的索引:

GET _cluster/state?filter_path=metadata.indices.test_with_alias.aliases

我得到以下结果:

{
  "metadata": {
    "indices": {
      "test_with_alias": {
        "aliases": [
          "new_alias"
        ]
      }
    }
  }
}

这不是最漂亮的方式,但它可能:)

希望这有帮助!

答案 1 :(得分:0)

此shell脚本将为您提供帮助

#!/bin/bash
ES="https://localhost:9316"
INDICES=`curl -XGET ${ES}/_cat/indices -s --insecure | awk '{print $3}'`
META=`curl -XGET "${ES}/_cluster/state?filter_path=metadata.indices.*.aliases" -s --insecure`
echo ${#META}
for INDEX in $INDICES
do
  if [[ ${INDEX} != \.* ]]
  then
    RES=`jq ".metadata.indices.${INDEX}.aliases" <<< ${META}`
    if [[ ${#RES} == 2 ]]
    then
      RES="NOALIAS"
    fi
    echo ${INDEX} $RES
  fi
done