【问题标题】:Elasticsearch: Aggregate results of queryElasticsearch:聚合查询结果
【发布时间】:2014-10-22 15:44:39
【问题描述】:

我有一个包含产品的弹性搜索索引,我可以查询不同的搜索词。每个产品都包含一个字段shop_id 来引用它所属的商店。现在我尝试显示所有持有我查询产品的商店的列表。 (按商店过滤) 就我阅读类似问题而言,我必须使用聚合。最后我构建了这个查询:

curl -XGET 'http://localhost:9200/searchindex/_search?search_type=count&pretty=true' -d '{
  "query" : {
      "match" : {
          "_all" : "playstation"
      }
  },
  "aggregations": {
    "shops_count": {
      "terms": {
        "field": "shop_id"
      }
    }
  }
}'

这应该搜索playstation 并根据shop_id 聚合结果。可悲的是它只返回

数据太大,数据将大于 [8534150348] 的限制 字节]。

我还尝试了只返回 2 个结果的查询。 该索引包含超过 90,000,000 种产品。

【问题讨论】:

    标签: elasticsearch aggregation elasticsearch-aggregation


    【解决方案1】:

    我建议这是过滤聚合的工作。

    http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filter-aggregation.html

    注意:我不知道您索引中的产品映射,所以如果下面的过滤器不起作用,请尝试http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-filters.html 中的另一个过滤器

    {
        "aggs" : {
            "in_stock_playstation" : {
                "filter" : { "term" : { "change_me_to_field_for_product" : "playstation" } } },
                "aggs" : {
                    "shop_count" : { "terms" : { "field" : "shop_id" } }
                }
            }
        }
    }
    

    【讨论】:

    • 感谢您的建议。这也会导致内存错误。我怀疑 elasticsearch 在应用过滤器之前会尝试执行聚合。即使查询只返回 2 个结果,它也会失败。
    • 其实就是先过滤聚合过滤,再聚合(注意“aggs”的嵌套)。也许这可能会有所帮助:stackoverflow.com/questions/25367420/…
    猜你喜欢
    • 2018-12-11
    • 2021-07-04
    • 1970-01-01
    • 2016-08-14
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多