ElasticSearch:按字段分组,术语“聚合”和“按最低价格聚合”

ElasticSearch:按字段分组,术语“聚合”和“按最低价格聚合”,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,考虑冠词和变量组之间的一对一关系 在ElasticSearch中,每个文章文档都有一个“variationGroup”字段 我使用术语聚合按文章文档的“variationGroup”字段对结果进行分组。 我使用TopHits子聚合来获取每个bucket的第一个文档 如何获得每个变体组的最低价格?如果我在术语聚合上使用最小子聚合,将对匹配查询的文档计算最低价格 我想得到所有文档的最低价格,这些文档可以分组在一个变体组中 例如,名为“星星T恤”的VariationGroup包含6篇文章。查询“red

考虑冠词和变量组之间的一对一关系

在ElasticSearch中,每个文章文档都有一个“variationGroup”字段

我使用术语聚合按文章文档的“variationGroup”字段对结果进行分组。
我使用TopHits子聚合来获取每个bucket的第一个文档

如何获得每个变体组的最低价格?如果我在术语聚合上使用最小子聚合,将对匹配查询的文档计算最低价格

我想得到所有文档的最低价格,这些文档可以分组在一个变体组中

例如,名为“星星T恤”的VariationGroup包含6篇文章。查询“red Tshirt”返回这6篇文章中的2篇。
我想获得6篇文章的最低价格,而不仅仅是与查询匹配的2篇文章的最低价格。

在同一个电话里有可能吗

以下是相应的json:

{
  "query": {
    "match": {
      "name": "red Tshirt"
    }
  },
  "size": 0,
  "aggs": {
    "variation_groups": {
      "terms": {
        "field": "variationGroup",
        "size": 0
      },
      "aggs": {
        "min_price": {
          "min": {
            "field": "price"
          }
        },
        "max_price": {
          "max": {
            "field": "price"
          }
        },
        "top_article": {
          "top_hits": {
            "size": 1
          }
        }
      }
    }
  }
}

是的,这是因为聚合只应用于匹配的文档。您希望使用而不是普通的查询,这样您的聚合将在所有文档上运行,然后在最后只返回
red Tshirt
文档

{
  "aggs": {
    "variation_groups": {
      "terms": {
        "field": "variationGroup",
        "size": 0
      },
      "aggs": {
        "min_price": {
          "min": {
            "field": "price"
          }
        },
        "max_price": {
          "max": {
            "field": "price"
          }
        },
        "top_article": {
          "top_hits": {
            "size": 1
          }
        }
      }
    }
  },
  "post_filter": {               <---- move your query in a post_filter
      "query": {
         "match": {
            "name": "red Tshirt"
         }
      }
  }   
}

这可能是一个很好的答案,但并不是我想要的,因为每个文章文档都将在variationGroup字段上分组。我从top_文章聚合中获得结果,这就是为什么我为主查询指定了
“size”:0
。top\u article aggregation必须仅返回
红色Tshirt
文档,而min\u price aggregation应返回variationGroup的min\u价格,而不管查询“red Tshirt”。我不认为我能在一次调用中做到这一点……好吧,我明白了,那么我要做的就是删除
post\u filter
,并将
top\u hits
包装在
filter
聚合中,这样聚合在所有文档上运行,但是对于
red Tshirt
,顶级点击只会返回,这对你有用吗?小错误:你应该在top_hits聚合中添加一个“name”,比如:
“aggs”:{“top”:{“top_hits”:{“size”:1}}}}}
。这项工作做得很好,但有点太长,这是合乎逻辑的,因为每一篇文章都必须在VariationGroup上进行最小价格聚合。哎呀,对不起,我弄错了,我已经修好了。“太长”是什么意思?
{
  "size": 0,
  "aggs": {
    "variation_groups": {
      "terms": {
        "field": "variationGroup",
        "size": 0
      },
      "aggs": {
        "min_price": {
          "min": {
            "field": "price"
          }
        },
        "max_price": {
          "max": {
            "field": "price"
          }
        },
        "top_article": {
          "filter": {
            "query": {
              "match": {
                "name": "red Tshirt"
              }
            }
          },
          "aggs": {
            "top_article": {
              "top_hits": {
                "size": 1
              }
            }
          }
        }
      }
    }
  }
}