ElasticSearch 탈중정밀도 문제 해결 scripted_metric 다시 계산하기 스크립트 계산 고효율 문제 해결 (二)

7902 단어 Elasticsearch

ElasticSearch scripted_metric 다시 계산하기 스크립트 계산 고효율 문제 해결 (二)


11월 12일 문제 해결 기록 집계 후 정렬 문제 미해결


말이 많지 않으면 코드를 붙여라:init_script 정의 map_script 작업 판단 combine_script 작업 반환 레코드reduce_script가sum값을 되돌려줍니다
{
    "size": 0,
    "query": {
        "bool": {
            "must": [
                {
                    "range": {
                        "purchase_date": {
                            "from": "2019-08-12 00:00:00",
                            "to": "2019-08-18 23:59:59",
                            "include_lower": true,
                            "include_upper": true,
                            "format": "yyyy-MM-dd HH:mm:ss",
                            "boost": 1
                        }
                    }
                }
            ],
            "adjust_pure_negative": true,
            "boost": 1
        }
    },
    "aggregations": {
        "total_purchase_amount": {
            "sum": {
                "field": "total_purchase_amount",
                "format": "0.000"
            }
        },
        "purchase_quantity": {
            "sum": {
                "field": "purchase_quantity",
                "format": "0"
            }
        },
        "spu": {
          "scripted_metric": {
            "init_script": {
              "source": "params._agg.map= new HashMap()",
              "lang": "painless"
            },
            "map_script": {
              "source": "if(!params._agg.map.containsKey(doc['spu.keyword'].value)){params._agg.map.put(doc['spu.keyword'].value,1)}",
              "lang": "painless"
            },
            "combine_script": {
              "source": "return params._agg.map.keySet().size()",
              "lang": "painless"
            },
            "reduce_script": {
              "source": "double profit = 0; for (a in params._aggs) { profit += a } return profit",
              "lang": "painless"
            }
          }
        }
    }
}

좋은 웹페이지 즐겨찾기