【问题标题】:Elasticsearch - count per index for one queryElasticsearch - 一个查询的每个索引计数
【发布时间】:2020-07-24 12:12:50
【问题描述】:

在一个 Elasticsearch 集群中,我有大约 30 个结构相同的索引。

我需要找出哪些索引会为我的查询返回至少 1 个结果。

结果本身并不重要。我将根据索引的名称做出业务逻辑决策,该索引至少包含 1 个满足搜索条件的文档。

根据输入,搜索可能会返回从 0 到 ~10 000 000 的所有索引命中。搜索将使用不同的输入执行约 50 000 次。

我看到以下解决方案:

  1. 使用带有滚动功能的搜索 API 并查看所有结果以找出它们来自哪个索引。 这是目前实施的,我正在寻找更快的解决方案。
  2. 使用计数 API 对每个索引进行计数。这将导致更多的请求。 这会更快吗?
  3. 是否有其他可能性/API 可用?

【问题讨论】:

  • 这可能会对您有所帮助:stackoverflow.com/questions/28472008/…
  • 并尝试使用_search?size=0 而不是search_type=count
  • @AlwaysSunny 感谢您的链接。之前找不到。
  • 欢迎先生。没问题。

标签: elasticsearch elasticsearch-dsl elasticsearch-query


【解决方案1】:

我会在 _index 元数据字段上使用 terms 存储桶聚合 (https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html)。然后,我会知道哪个索引的点击次数超过 1。

例如,

{
  "query": { your_query },
  "aggs": {
    "group_by_index": {
      "terms": {
        "field": "_index",
        "size": "30"
      }
    }
  }
}

【讨论】:

  • 我只需要添加我查询的索引的大小。否则我确实错过了一些索引。
【解决方案2】:

我会使用提到的 @glenacota 之类的 aggs。此外,您可以在多个索引或 alias 指向所有 30 个索引(如

)上运行它
GET my_index_1, another_index_*/_search?size=0

不过,考虑到您正在查看大量索引、它们的文档数和请求数,我还建议您对查询进行分析,看看它对您的集群的影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 2015-08-03
    • 2021-10-13
    • 1970-01-01
    • 2017-05-02
    • 2018-09-08
    相关资源
    最近更新 更多