且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

elasticsearch 多次聚合

更新时间:2022-10-04 12:41:50

curl -XGET 'http://localhost:9200/alias-product/product/_search?pretty' -d '{

"size" : 0,

  "query" : {

    "function_score" : {

      "query" : {

        "filtered" : {

          "filter" : {

            "bool" : {

              "should" : [ {

                "match" : {

                  "_all" : {

                    "query" : "电子",

                    "type" : "boolean",

                    "operator" : "AND"

                  }

                }

              }, {

                "match" : {

                  "company_name" : {

                    "query" : "电子",

                    "type" : "boolean",

                    "operator" : "AND"

                  }

                }

              }, {

                "match" : {

                  "title" : {

                    "query" : "电子",

                    "type" : "boolean",

                    "operator" : "AND"

                  }

                }

              } ],

              "minimum_should_match" : "1"

            }

          }

        }

      },

      "functions" : [ {

        "filter" : {

          "match" : {

            "_all" : {

              "query" : "电子",

              "type" : "boolean",

              "operator" : "AND"

            }

          }

        },

        "weight" : 2.0

      }, {

        "filter" : {

          "match" : {

            "company_name" : {

              "query" : "电子",

              "type" : "boolean",

              "operator" : "AND"

            }

          }

        },

        "weight" : 8.0

      }, {

        "filter" : {

          "match" : {

            "title" : {

              "query" : "电子",

              "type" : "boolean",

              "operator" : "AND"

            }

          }

        },

        "weight" : 4.0

      }, {

        "filter" : {

          "range" : {

            "seling_auction_cnt" : {

              "from" : 0,

              "to" : null,

              "include_lower" : false,

              "include_upper" : true

            }

          }

        },

        "weight" : 1.0

      }, {

        "field_value_factor" : {

          "field" : "company_score",

          "factor" : 1.0E-6

        }

      } ],

      "score_mode" : "sum"

    }

  },


  

  "aggs" : {

     "agg" : {

      "terms" : {

        "field" : "member_id",

        "size" : 0,

        "order" : {

          "top_hit" : "desc"

        }

      },

      "aggregations" : {

        "top_hit" : {

          "max" : {

            "script" : {

              "inline" : "_score"

            }

          }

        }

      }

    },

    "agg1" : {

        "scripted_metric": { 

        "init_script": "_agg[\"prd\"] = []", 

        "map_script": "if(doc[\"cat2_id\"].value) {_agg.prd.add(doc[\"cat2_id\"].value.toString())}", 

        "combine_script": "combined = [:]; for (tmp in _agg.prd) { if(!combined[tmp]) { combined[tmp] = 1 } }; return combined",

        "reduce_script": "reduced = []; for (a in _aggs) { for (entry in a) {  reduced.add(entry.key);  } }; return reduced"

      }

    },

"agg2" : {

        "scripted_metric": { 

        "init_script": "_agg[\"prd\"] = []", 

        "map_script": "if(doc[\"cat2_id\"].value) {_agg.prd.add(doc[\"cat2_id\"].value.toString())}", 

        "combine_script": "combined = [:]; for (tmp in _agg.prd) { if(!combined[tmp]) { combined[tmp] = 1 } }; return combined",

         "reduce_script": "reduced = [:]; for (a in _aggs) {  for (entry in a) { word = entry.key; if (!reduced[word] ) { reduced[word] = entry.value; }  } }; return reduced"

      }

    }

  }

}'


本文转自whk66668888 51CTO博客,原文链接:http://blog.51cto.com/12597095/1908017