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
| import com.alibaba.fastjson2.JSON; import com.clay.gulimall.search.config.ElasticSearchConfig; import lombok.extern.slf4j.Slf4j; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.Avg; import org.elasticsearch.search.aggregations.metrics.AvgAggregationBuilder; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest;
import java.util.Date;
@Slf4j @SpringBootTest public class ElasticSearchApiTest { @Autowired private RestHighLevelClient esClient;
@Test public void indexData() throws Exception { IndexRequest request = new IndexRequest("posts").id("1") .source("user", "Jim", "postDate", new Date(), "message", "trying out ElasticSearch"); IndexResponse indexResponse = esClient.index(request, ElasticSearchConfig.COMMON_OPTIONS); log.info(JSON.toJSONString(indexResponse)); }
@Test public void searchData() throws Exception { SearchRequest searchRequest = new SearchRequest(); searchRequest.indices("bank"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(QueryBuilders.matchQuery("address", "mill")); TermsAggregationBuilder ageAgg = AggregationBuilders.terms("group_by_age").field("age").size(100); searchSourceBuilder.aggregation(ageAgg); AvgAggregationBuilder avgBalance = AggregationBuilders.avg("avgBalance").field("balance"); searchSourceBuilder.aggregation(avgBalance); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = esClient.search(searchRequest, ElasticSearchConfig.COMMON_OPTIONS); SearchHits searchHits = searchResponse.getHits(); SearchHit[] hitArray = searchHits.getHits(); for (SearchHit hit : hitArray) { String recored = hit.getSourceAsString(); log.info("id: {}, data: {}", hit.getId(), recored); } Aggregations aggregations = searchResponse.getAggregations(); Terms terms = aggregations.get("group_by_age"); for (Terms.Bucket bucket : terms.getBuckets()) { log.info("age: {}, total: {}", bucket.getKeyAsString(), bucket.getDocCount()); } Avg avg = aggregations.get("avgBalance"); log.info("avg balance: {}", avg.getValue()); log.info("search params: {}\n", searchSourceBuilder.toString()); log.info("search result: {}\n", JSON.toJSONString(searchResponse)); } }
|