package main import ( "github.com/tidwall/sjson" "gopkg.in/olivere/elastic.v5" ) const json = `{"name":{"first":"Janet","last":"Prichard"},"age":47}` const param1 = `{ "query": { "bool": { "must": [ ] } }, "aggs": { "brand_id": { "terms": { "field": "brand_id", "size": 1000 } }, "attrs": { "nested": { "path": "attrs" }, "aggs": { "attr_name": { "terms": { "field": "attrs.attr_name", "size": 5000 }, "aggs": { "attr_value": { "terms": { "field": "attrs.attr_value", "size": 5000 } } } } } } }, "sort": { "sort": { "order": "desc" } }, "from": 0, "size": 0 }` func main() { query := elastic.NewBoolQuery() query1 := elastic.NewBoolQuery() query2 := elastic.NewBoolQuery() query1.Must(elastic.NewTermQuery("class_id2",111)) query1.Should(elastic.NewTermQuery("brand_id","108")) query1.Should(elastic.NewTermQuery("brand_id","107")) query2.Should(elastic.NewNestedQuery("attrs",elastic.NewBoolQuery().Must(elastic.NewTermQuery("attrs.attr_name","nin"),elastic.NewTermQuery("attrs.attr_value","nni")))) query2.Should(elastic.NewNestedQuery("attrs",elastic.NewBoolQuery().Must(elastic.NewTermQuery("attrs.attr_name","3333"),elastic.NewTermQuery("attrs.attr_value","333")))) source := elastic.NewSearchSource() source.Aggregation("brand_id",elastic.NewTermsAggregation().Field("brand_id").Size(1000)) source.Aggregation("attrs",elastic.NewNestedAggregation().Path("attrs"). SubAggregation("attr_name",elastic.NewTermsAggregation().Field("attrs.attr_name").Size(5000). SubAggregation("attr_value",elastic.NewTermsAggregation().Field("attrs.attr_value").Size(5000)))) source.FetchSourceContext(elastic.NewFetchSourceContext(true).Include("goods_id", "stock")) //显示字段 source.Size(1) query.Must(query1) query.Must(query2) source.Query(query) searchRequest := elastic.NewSearchRequest().Source(source) queryString, _ := searchRequest.Body() print(queryString) return value, _ := sjson.Set(param1, "query.bool.must.-1", map[string]interface{}{"hello":"world"}) value, _ = sjson.Set(value, "query.bool.must.-1", map[string]interface{}{"hellosss":"world"}) println(value) }