elasticsearch 弹性搜索多重聚合,elasticsearch,elasticsearch" /> elasticsearch 弹性搜索多重聚合,elasticsearch,elasticsearch" />

elasticsearch 弹性搜索多重聚合

elasticsearch 弹性搜索多重聚合,elasticsearch,elasticsearch,我有两个弹性搜索查询 获取特定日期的交易信息 获取所有日期的交易信息 如何将这两个要求组合成一个查询?我正在努力为这两个相似的需求编写一个单一的查询。请帮我解决这个问题。多谢各位 { "query": { "filtered": { "query": { "match": { "payment_type": "paypal" } }, "filter": { "range": {

我有两个弹性搜索查询

  • 获取特定日期的交易信息
  • 获取所有日期的交易信息
  • 如何将这两个要求组合成一个查询?我正在努力为这两个相似的需求编写一个单一的查询。请帮我解决这个问题。多谢各位

    {
      "query": {
        "filtered": {
          "query": {
            "match": {
              "payment_type": "paypal"
            }
          },
          "filter": {
            "range": {
              "transaction_date": {
                "from": "2014-11-10",
                "to": "2014-11-10"
              }
            }
          }
        }
      },
      "aggs": {
        "daily_price_sum": {
          "sum": {
            "field": "price"
          }
        },
        "daily_post_sum": {
          "sum": {
            "field": "purchased_post_count"
          }
        }
      }
    }
    
    
    {
      "size": 0, 
      "query": {
        "match": {
          "payment_type": "paypal"
        }
      },
      "aggs": {
        "daily_price_sum": {
          "sum": {
            "field": "price"
          }
        },
        "daily_post_sum": {
          "sum": {
            "field": "purchased_post_count"
          }
        }
      }
    }
    

    如果您使用的ES版本低于1.4.0,则可以使用。查询内容如下:

    {
       "size": 0,
       "query": {
          "match": {
             "payment_type": "paypal"
          }
       },
       "aggs": {
          "daily_price_sum": {
             "sum": {
                "field": "price"
             }
          },
          "daily_post_sum": {
             "sum": {
                "field": "purchased_post_count"
             }
          },
          "one_day_aggs": {
             "filter": {
                "range": {
                   "transaction_date": {
                      "from": "2014-11-10",
                      "to": "2014-11-10"
                   }
                }
             },
             "aggs": {
                "daily_price_sum": {
                   "sum": {
                      "field": "price"
                   }
                },
                "daily_post_sum": {
                   "sum": {
                      "field": "purchased_post_count"
                   }
                }
             }
          }
       }
    }
    
    {
       "size": 0,
       "query": {
          "match": {
             "payment_type": "paypal"
          }
       },
       "aggs": {
          "transactions": {
             "filters": {
                "filters": {
                   "one_day": {
                      "range": {
                         "transaction_date": {
                            "from": "2014-11-10",
                            "to": "2014-11-10"
                         }
                      }
                   },
                   "all_days": {
                      "match_all": {}
                   }
                }
             },
             "aggs": {
                "daily_price_sum": {
                   "sum": {
                      "field": "price"
                   }
                },
                "daily_post_sum": {
                   "avg": {
                      "field": "purchased_post_count"
                   }
                }
             }
          }
       }
    }
    
    但是如果您使用的是ES 1.4.0,那么您可以使用使查询更加紧凑。查询内容如下:

    {
       "size": 0,
       "query": {
          "match": {
             "payment_type": "paypal"
          }
       },
       "aggs": {
          "daily_price_sum": {
             "sum": {
                "field": "price"
             }
          },
          "daily_post_sum": {
             "sum": {
                "field": "purchased_post_count"
             }
          },
          "one_day_aggs": {
             "filter": {
                "range": {
                   "transaction_date": {
                      "from": "2014-11-10",
                      "to": "2014-11-10"
                   }
                }
             },
             "aggs": {
                "daily_price_sum": {
                   "sum": {
                      "field": "price"
                   }
                },
                "daily_post_sum": {
                   "sum": {
                      "field": "purchased_post_count"
                   }
                }
             }
          }
       }
    }
    
    {
       "size": 0,
       "query": {
          "match": {
             "payment_type": "paypal"
          }
       },
       "aggs": {
          "transactions": {
             "filters": {
                "filters": {
                   "one_day": {
                      "range": {
                         "transaction_date": {
                            "from": "2014-11-10",
                            "to": "2014-11-10"
                         }
                      }
                   },
                   "all_days": {
                      "match_all": {}
                   }
                }
             },
             "aggs": {
                "daily_price_sum": {
                   "sum": {
                      "field": "price"
                   }
                },
                "daily_post_sum": {
                   "avg": {
                      "field": "purchased_post_count"
                   }
                }
             }
          }
       }
    }
    
    我还看到,您对查询命中率不感兴趣,只对聚合值感兴趣。在这种情况下,您可以通过使用ES 1.4.0中提供的聚合来提高这些聚合的性能。要利用此功能,请按链接中所述启用碎片查询缓存,并将以下参数添加到
    \u search
    操作中:
    search\u type=count

    谢谢@Mouzer第一次查询对我有用。非常感谢您的帮助和支持。我将检查Shard Query Cache.hi@bittusarkar:是否可以基于任何一个子agg在父聚合中添加“order”子句?例如,如果我想按每日邮政金额的平均值订购?我面临的问题是,我的结果由任何一个子agg汇总,而不是两个子agg汇总……谢谢!不知道多个过滤器的可能性。非常适合我的情况!