考虑文章和变体组之间的一对多关系。

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

我使用术语汇总将文章文档的字段“variationGroup”按结果分组。
我使用TopHits子聚合来获取每个存储桶的第一个文档。

如何获得每个变体组的最低价格?如果我在术语“汇总”上使用“最小”子汇总,则将在与查询匹配的文档上计算最低价格。

我想获得所有可以归入变体组的文档的最低价格。

例如,名为“带有星星的T恤”的VariationGroup包含6条。查询“红色T恤”返回这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
          }
        }
      }
    }
  }
}

最佳答案

是的,这是因为汇总仅应用于匹配的文档。您想使用 post_filter 而不是普通查询,这样您的聚合将在所有文档上运行,然后最后只返回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"
         }
      }
  }
}

更新

根据您的评论,我会这样做:
{
  "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
              }
            }
          }
        }
      }
    }
  }
}

关于elasticsearch - ElasticSearch:按字段分组,按术语汇总和最小价格汇总,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33690723/

10-13 07:09