20 WrapperQuery

实现方式理论基础

  • Wrapper Query 官网说明

https://www.elastic.co/guide/en/elasticsearch/reference/6.4/query-dsl-wrapper-query.html

This query is more useful in the context of the Java high-level REST client or transport client to also accept queries as json formatted string. In these cases queries can be specified as a json or yaml formatted string or as a query builder (which is a available in the Java high-level REST client).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
GET /_search

{

"query" : {

"wrapper": {

"query" : "eyJ0ZXJtIiA6IHsgInVzZXIiIDogIktpbWNoeSIgfX0=" // Base64 encoded string: {"term" : { "user" : "Kimchy" }}

}

}

}
  • 将DSL JSON语句 转成 map

https://blog.csdn.net/qq\_41370896/article/details/83658948

1
2
3
4
5
String dsl = "";

Map maps = (Map)JSON.parse(dsl);

maps.get("query");// dsl query string
  • Java 代码

https://blog.csdn.net/tcyzhyx/article/details/84566734

https://www.jianshu.com/p/216ca70d9e62

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
StringBuffer dsl = new StringBuffer();

dsl.append("{\"bool\": {");

dsl.append(" \"must\": [");

dsl.append(" {");

dsl.append(" \"term\": {");

dsl.append(" \"mdid.keyword\": {");

dsl.append(" \"value\": \"2fa9d41e1af460e0d47ce36ca8a98737\"");

dsl.append(" }");

dsl.append(" }");

dsl.append(" }");

dsl.append(" ]");

dsl.append(" }");

dsl.append("}");

WrapperQueryBuilder wqb = QueryBuilders.wrapperQuery(dsl.toString());

SearchResponse searchResponse = client.prepareSearch(basicsysCodeManager.getYjzxYjxxIndex())

.setTypes(basicsysCodeManager.getYjzxYjxxType()).setQuery(wqb).setSize(10).get();

SearchHit[] hits = searchResponse.getHits().getHits();

for(SearchHit hit : hits){

String content = hit.getSourceAsString();

System.out.println(content);

}
  • query + agg 应该怎么写

http://www.itkeyword.com/doc/1009692843717298639/wrapperquerybuilder-aggs-query-throwing-query-malformed-exception

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
"{\"query\":{\"match_all\": {}},\"aggs\":{\"avg1\":{\"avg\":{\"field\":\"age\"}}}}"

SearchSourceBuilder ssb = new SearchSourceBuilder();



// add the query part

String query ="{\"match_all\": {}}";

WrapperQueryBuilder wrapQB = new WrapperQueryBuilder(query);

ssb.query(wrapQB);



// add the aggregation part

AvgBuilder avgAgg = AggregationBuilders.avg("avg1").field("age");

ssb.aggregation(avgAgg);

实现示例