Elasticsearch 列表索引按名称排序

Posted

技术标签:

【中文标题】Elasticsearch 列表索引按名称排序【英文标题】:Elasticsearch list indices sorted by name 【发布时间】:2014-09-17 14:43:28 【问题描述】:

以下查询的结果如何按索引名排序?

curl "localhost:9200/_aliases?pretty"

【问题讨论】:

不能自己排序吗?我不认为它存在。 @ErBnAcharya 结果没有要指定的字段名。 @ErBnAcharya 这是怎么做到的? 你试过curl localhost:9200/_cat/aliases | sort吗?我意识到这是一种完全不同的格式,但它可能是你真正想要的 我建议使用sort,正如@Alcanzar 所说。试试curl localhost:9200/_cat/indices | sort -nk2 【参考方案1】:

你可以使用s=is=index通过s(排序)搜索参数要求ES对结果进行排序

curl "localhost:9200/_cat/indices?pretty&s=i"
curl "localhost:9200/_cat/aliases?pretty&s=index"

要查看列的标题,请添加“&v”:

curl "localhost:9200/_cat/indices?pretty&v&s=index"`.

你可以在cat/indices documentation找到一些解释

【讨论】:

你是什么意思? curl 只是做一个 http 请求,你可以在浏览器中使用它,也可以在任何语言的任何 http 客户端上使用它 我无法通过 ES 5.2+ 上的邮递员让这些工作。我收到 400 响应“illegal_argument_exception,请求 [/_aliases/] 包含无法识别的参数:[s]” 您也可以更改排序顺序:/_cat/indices?v&s=docs.count:desc【参考方案2】:

Elasticsearch 5x 的最佳方式是这样的:

GET _cat/aliases?v&s=index:desc&h=alias,index

会给你:

alias                                     index
app-logs-alias                            app-logs-2017-12-31
backend-logs-read                         backend-logs-2017-12-31

s = 排序,v = 各种额外细节,h = 要包含的标题,

【讨论】:

加一手反向排序 这个答案以非常简洁的方式讲述了如此多的功能。【参考方案3】:

我认为最好的方法是通过控制台。像这样的:

$ curl --silent 'http://path.to.cluster:9200/_cat/indices' | cut -d ' ' -f2 | sort

【讨论】:

啊,很好。我将其稍微更改为:curl --silent 'http://path.to.cluster:9200/_cat/aliases' | cut -d ' ' -f1 | sort 我不得不更改剪辑以使用 -f3 而不是 -f2 您可以对sort 使用-n(numeric sort) 选项和-k(key) 选项,而不是使用cut。例如,curl 'localhost:9200/_cat/indices' | sort -nk 3 如何使用上述方案降序排序? 我不得不使用awk,因为分隔每列的空格对我来说不是固定的:$ curl --silent 'http://path.to.cluster:9200/_cat/indices' | awk ' print $3 ' | sort【参考方案4】:

这是一个老问题,但现在 2020 年最好的方法是:

使用 kibana :

GET _cat/indices/?pretty&s=store.size:desc

卷曲:

http://localhost:9200/_cat/indices/?pretty&s=store.size:desc

Desc 在末尾用于按 desc 排序

【讨论】:

【参考方案5】:

只需使用这个 get 请求,它就会显示带有列名的所有索引。

http://localhost:9200/_cat/indices/?pretty&v

此外,不仅可以按名称,您还可以使用 s=column_name 的 get 参数按所需的任何参数对其进行排序。

例如;按你可以做的大小排序:

http://localhost:9200/_cat/indices/?pretty&s=store.size

名字也一样:

http://localhost:9200/_cat/indices/?pretty&s=index

【讨论】:

【参考方案6】:

我认为 elasticsearch api 不存在。

elasticsearch 的响应可以是


   "index1": 
      "aliases": 
   

这是一个从响应中获取索引的伪代码

如果 aliasresponse 是来自 elasticsearch 的响应,那么

indexlist=[]
for (key in aliasresponse) 
    indexlist.add(key)


sort(indexlist)

对于排序,您可以找到库或自定义方法。

希望这会有所帮助。

【讨论】:

啊,我有兴趣看看是否有 api 替代品。除了简单的重新索引,例如 copy myindex testindex (github.com/elasticsearch/elasticsearch/issues/1077 closed?),似乎还有一些意想不到的遗漏。

以上是关于Elasticsearch 列表索引按名称排序的主要内容,如果未能解决你的问题,请参考以下文章

Pythonic 按字段名称对命名元组列表进行排序的方法

如何在Elasticsearch中过滤或查询索引名称列表?

如果状态为真,则 Elasticsearch bool 查询按日期排序

在索引 501 处获取的对象有一个乱序的部分名称“应用物理学杂志”。对象必须按部分名称排序'

使用 Linq 按名称频率对列表进行排序

使用下拉列表按名称排序