首页 文章

对具有某个日期范围的索引进行弹性搜索查询

提问于
浏览
2

我有以下情况:

我在弹性搜索中有以下索引 .

  • index-2016.04.10

  • index-2016.04.11

  • index-2016.04.12

  • index-2016.04.15

  • index-2016.04.16

  • index-2016.04.18

现在假设,我想在日期之间的弹性搜索中搜索一些数据 - 2016.04.11到2016.04.16 . 我的问题是:

  • 我们有没有办法运行单个查询并定义一些过滤器参数,以便搜索只发生在这两个日期之间的索引中?

  • 如果没有,那么我们如何优化搜索查询如果我们需要搜索某些索引范围内的数据?

  • Java实现 .

请帮忙..

1 回答

  • 0

    我看到两个选择 .

    您在搜索时指定索引

    GET /index-2016.04.10,index-2016.04.11,index-2016.04.12/_search?ignore_unavailable=true
    {
        "query": {
            yourquery
        }
    }
    

    或者在查询中过滤(但这种方法可能很慢,并且取决于索引的数量可能会抛出分片异常,因为您将查询与模式匹配的所有索引)

    GET /index-*/_search
    {
        "query": {
            "terms" : {
                "_index" : ["index1", "index2"]
            }
        }
    }
    

    我假设你将像过去7天,14天,30天一样索引过去的数据:所以在这种情况下,我肯定会采用第一种方法,在你的应用程序中进行索引名称计算

    更新1:为防止非现有指标出错,您可以设置标志ignore_unavailable

    更新2:嗯,我需要在过去搜索其中一个解决方案,可能需要进行一次聚合工作 .

    在ES有reindex api

    POST _reindex
    {
      "source": {
        "index": ["twitter", "blog"]
      },
      "dest": {
        "index": "all_together"
      }
    }
    

    您的每日索引最多可达7天 . 然后在星期一0:0,您将数据汇总到每周索引 .

    您每周最多可以有5个索引 . 这个月的最后一天再次重新索引到月度索引 .

    在查询中,您通过提供要搜索和查询过滤器的索引来组合多种方法 .

相关问题