我有一个弹性搜索集群,我需要调查其索引。具体来说,我想找到所有没有别名的索引。
这甚至可能吗?如果是这样,怎么样?
(对此问题使用sense
表示法。)
我知道即使别名字段为空,我也可以使用别名获取所有索引:
GET _aliases
而且我知道我可以获得所有具有别名的索引:
GET /*/_alias/*
但是我可以获得所有索引而没有别名吗?
显然,我可以获取所有索引,然后使用awk
之类的工具或其他任何工具为我做,但我天真的猜测是,弹性搜索一次完成所有这些工作是最有效的
答案 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