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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
| @RunWith(SpringRunner.class) @SpringBootTest public class GulimallSearchApplicationTests {
@Resource private RestHighLevelClient client;
@Data @AllArgsConstructor @NoArgsConstructor class User{ private String userName; private String gender; private Integer age; }
@Data @ToString @AllArgsConstructor @NoArgsConstructor static class Account{ private int account_number; private int balance; private String firstname; private String lastname; private int age; private String gender; private String address; private String employer; private String email; private String city; private String state; } /** * 更新保存二合一 * @throws IOException 网络操作必定需要处理异常 */ @Test public void contextLoads() throws IOException { IndexRequest indexRequest = new IndexRequest("users"); indexRequest.id("1"); //使用方法一 // indexRequest.source("userName","zhangsan","age",18,"gender","male"); //使用方法二 User user = new User("lqs", "male", 21); String jsonString = JSON.toJSONString(user); indexRequest.source(jsonString, XContentType.JSON);
//执行操作 IndexResponse index = client.index(indexRequest, GulimallElasticSearchConfig.COMMON_OPTIONS);
//提取响应数据 System.out.println(index); }
@Test public void testSearch() throws IOException { //1、创建检索请求 SearchRequest searchRequest = new SearchRequest(); //指定索引 searchRequest.indices("bank"); //指定DSL,检索条件 SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); searchRequest.source(sourceBuilder); //1、1构建检索条件 sourceBuilder.query(QueryBuilders.matchQuery("address","mill")); // System.out.println(sourceBuilder.toString()); // sourceBuilder.from(); // sourceBuilder.size(); //1、2按照年龄聚合 TermsAggregationBuilder ageAgg = AggregationBuilders.terms("ageAgg").field("age").size(10); sourceBuilder.aggregation(ageAgg); //1、3计算平均薪资 AvgAggregationBuilder balanceAvg = AggregationBuilders.avg("balanceAvg").field("balance"); // System.out.println("检索条件"+sourceBuilder.toString()); sourceBuilder.aggregation(balanceAvg);
//2、执行检索 SearchResponse response = client.search(searchRequest, GulimallElasticSearchConfig.COMMON_OPTIONS);
//3、结果分析 // System.out.println(response.toString()); Map map = JSON.parseObject(response.toString(), Map.class); //{"query":{"match":{"address":{"query":"mill","operator":"OR","prefix_length":0,"max_expansions":50,"fuzzy_transpositions":true,"lenient":false,"zero_terms_query":"NONE","auto_generate_synonyms_phrase_query":true,"boost":1.0}}}} //{"took":24,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":4,"relation":"eq"},"max_score":5.4032025,"hits":[{"_index":"bank","_type":"account","_id":"970","_score":5.4032025,"_source":{"account_number":970,"balance":19648,"firstname":"Forbes","lastname":"Wallace","age":28,"gender":"M","address":"990 Mill Road","employer":"Pheast","email":"forbeswallace@pheast.com","city":"Lopezo","state":"AK"}},{"_index":"bank","_type":"account","_id":"136","_score":5.4032025,"_source":{"account_number":136,"balance":45801,"firstname":"Winnie","lastname":"Holland","age":38,"gender":"M","address":"198 Mill Lane","employer":"Neteria","email":"winnieholland@neteria.com","city":"Urie","state":"IL"}},{"_index":"bank","_type":"account","_id":"345","_score":5.4032025,"_source":{"account_number":345,"balance":9812,"firstname":"Parker","lastname":"Hines","age":38,"gender":"M","address":"715 Mill Avenue","employer":"Baluba","email":"parkerhines@baluba.com","city":"Blackgum","state":"KY"}},{"_index":"bank","_type":"account","_id":"472","_score":5.4032025,"_source":{"account_number":472,"balance":25571,"firstname":"Lee","lastname":"Long","age":32,"gender":"F","address":"288 Mill Street","employer":"Comverges","email":"leelong@comverges.com","city":"Movico","state":"MT"}}]}} //3、1 获取所有查到的数据 SearchHits hits = response.getHits(); SearchHit[] searchHits = hits.getHits(); for (SearchHit hit : searchHits){ /*{ "_index" : "bank", "_type" : "account", "_id" : "970", "_score" : 5.4032025, "_source" : { "account_number" : 970, "balance" : 19648, "firstname" : "Forbes", "lastname" : "Wallace", "age" : 28, "gender" : "M", "address" : "990 Mill Road", "employer" : "Pheast", "email" : "forbeswallace@pheast.com", "city" : "Lopezo", "state" : "AK" } }*/ // System.out.println(hit.toString()); String str = hit.getSourceAsString(); Account account = JSON.parseObject(str, Account.class); // System.out.println("account: "+account); } //3、2 获取检索到的分析信息 Aggregations aggregations = response.getAggregations(); for(Aggregation aggregation : aggregations.asList()){ // System.out.println("当前聚合"+aggregation.getName()); }
Terms ageAgg1 = aggregations.get("ageAgg"); for (Terms.Bucket bucket : ageAgg1.getBuckets()){ String keyAsString = bucket.getKeyAsString(); System.out.println("年龄"+keyAsString); } Avg balanceAvg1 = aggregations.get("balanceAvg"); Aggregation balanceAvg2 = aggregations.get("balanceAvg"); } }
|