【发布时间】:2015-06-18 00:56:20
【问题描述】:
以下是 2015 年 1 月的指数示例,其他月份/年份的指数类似。索引是根据日期创建的,但不必每天都有索引。
abc-2015.01.01
abc-2015.01.04
abc-2015.01.14
abc-2015.01.28
abc-2015.01.31
我正在尝试查询一个时间范围内的所有现有索引,例如,2015年的所有索引,我们可以这样做
curl -XGET 'http://localhost:9200/abc-2015*/_aliases/'
但是查询从 2015 年 1 月 13 日到 2015 年 2 月 28 日怎么样?
我们可以做
curl -XGET 'http://localhost:9200/abc-2015-01*,abc-2015-02*/_aliases/'
但是,它也会返回 1 月和 2 月范围之外的指数。高效查询所有现有索引的最佳方法是什么?
【问题讨论】:
-
查询
abc-2015.01*,abc-2015.02*只会在1月份的范围外查询(基本上是2015.01.01到2015.01.12)。我不明白它是如何在 2 月份查询超出范围的。您的要求是搜索 2 月份的所有日期。您能澄清一下吗? -
@bsarkar,你是对的,只有 1 月不在响铃范围内,但 2 月没有。我以为我没有用 2 月的最后一天作为例子。对困惑感到抱歉。要求是查询用户给定时间范围内的所有现有索引,可以是任意的。
-
如果您可以控制您的文档结构,拥有一个以索引创建日期为值的日期时间字段可能会使您的工作更轻松。过滤字段值比过滤索引名称 IMO 更好。
-
@bsarkar,我们确实有一个用于时间范围查询的日期时间字段。由于交叉索引搜索可能很昂贵,在进入实际时间范围搜索之前,我们尝试在 url 中指定索引以提高性能。例如查询[Jan 1st, 2015~ Jan 31,2015]的时间范围,预计{localhost:9200/abc*/_search}比{localhost:9200/abc-2015.01*/_search}慢跨度>
-
它不会像你想象的那么贵。事实上,您可以使用两个选项中最好的 - 在请求的时间范围内使用范围过滤器进行过滤查询,并仅查询月份与请求的时间范围匹配的那些索引。在此示例中,您可以查询索引
abc-2015.01.*和abc-2015.02.*,过滤后的查询将具有从 2015-01-13 到 2015-02-28 的范围过滤器。
标签: elasticsearch elasticsearch-indices