赞
踩
public void indexData() throws IOException { IndexRequest indexRequest = new IndexRequest("users"); indexRequest.id("1"); //数据的id // indexRequest.source("userName","zhangsan","age",18,"gender","男"); User user = new User(); user.setUserName("zhangsan"); user.setAge(18); user.setGender("男"); String jsonString = JSON.toJSONString(user); indexRequest.source(jsonString, XContentType.JSON); //要保存的内容 //执行操作 IndexResponse index = client.index(indexRequest, GulimallElasticSearchConfig.COMMON_OPTIONS); //提取有用的响应数据 System.out.println(index); } @Getter @Setter class User { private String userName; private String gender; private Integer age; }
@Test
public void getData() throws IOException {
GetRequest request = new GetRequest("users", "1");
// request.fetchSourceContext(FetchSourceContext.DO_NOT_FETCH_SOURCE);
GetResponse getResponse = client.get(request,GulimallElasticSearchConfig.COMMON_OPTIONS);
if (getResponse.isExists()){
System.out.println(getResponse.getSource());
}
}
public void delData() throws IOException {
DeleteRequest request = new DeleteRequest("users", "1");
// request.fetchSourceContext(FetchSourceContext.DO_NOT_FETCH_SOURCE);
request.timeout(TimeValue.timeValueSeconds(2));
DeleteResponse delete = client.delete(request,GulimallElasticSearchConfig.COMMON_OPTIONS);
if (delete.getResult() == DocWriteResponse.Result.DELETED) {
System.out.println(delete.status());
}
}
public void searchData() throws IOException { //1. 创建检索请求 SearchRequest searchRequest = new SearchRequest(); //1.1)指定索引 searchRequest.indices("bank"); //1.2)构造检索条件 SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.query(QueryBuilders.matchQuery("address", "Mill")); //1.2.1)按照年龄分布进行聚合 TermsAggregationBuilder ageAgg = AggregationBuilders.terms("ageAgg").field("age").size(10); sourceBuilder.aggregation(ageAgg); //1.2.2)计算平均年龄 AvgAggregationBuilder ageAvg = AggregationBuilders.avg("ageAvg").field("age"); sourceBuilder.aggregation(ageAvg); //1.2.3)计算平均薪资 AvgAggregationBuilder balanceAvg = AggregationBuilders.avg("balanceAvg").field("balance"); sourceBuilder.aggregation(balanceAvg); System.out.println("检索条件:" + sourceBuilder); searchRequest.source(sourceBuilder); //2. 执行检索 SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); System.out.println("检索结果:" + searchResponse); //3. 将检索结果封装为Bean SearchHits hits = searchResponse.getHits(); SearchHit[] searchHits = hits.getHits(); for (SearchHit searchHit : searchHits) { String sourceAsString = searchHit.getSourceAsString(); Account account = JSON.parseObject(sourceAsString, Account.class); System.out.println(account); } //4. 获取聚合信息 Aggregations aggregations = searchResponse.getAggregations(); Terms ageAgg1 = aggregations.get("ageAgg"); for (Terms.Bucket bucket : ageAgg1.getBuckets()) { String keyAsString = bucket.getKeyAsString(); System.out.println("年龄:" + keyAsString + " ==> " + bucket.getDocCount()); } Avg ageAvg1 = aggregations.get("ageAvg"); System.out.println("平均年龄:" + ageAvg1.getValue()); Avg balanceAvg1 = aggregations.get("balanceAvg"); System.out.println("平均薪资:" + balanceAvg1.getValue()); }
public List<Product> queryEsList(@RequestBody SearchDto dto) throws IOException { //QueryBuilder queryBuilder = QueryBuilders.termQuery("name", dto.getName()); //QueryBuilder queryBuilder = QueryBuilders.rangeQuery("price").gt(0).lte(9000); //QueryBuilder queryBuilder = QueryBuilders.matchQuery("name", dto.getName()); QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("手机", "name", "lv"); return getProducts(queryBuilder); } private List<Product> getProducts(QueryBuilder queryBuilder) throws IOException { // 1.query 精准查询 查询会计算文档得分 并根据得分返回 // 2. filter query 过滤查询 用来在大量数据查询中筛选出本地查询相关数据 不会计算得分 会对结果进行缓存 SearchRequest request = new SearchRequest("product"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); //高亮处理 HighlightBuilder highlightBuilder = new HighlightBuilder(); highlightBuilder.requireFieldMatch(false).field("name").field("price").postTags("<a>").preTags("</a>"); //指定返回字段 String[] include = {"name", "price", "type"}; searchSourceBuilder .query(queryBuilder) .from(0) .size(10) .fetchSource(include, new String[]{"createTime"}) //排序 .sort("price", SortOrder.DESC) //指定过滤条件 .postFilter(QueryBuilders.matchQuery("name","手机")) .highlighter(highlightBuilder); request.source(searchSourceBuilder); SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT); List<Map<String, Object>> mapList = Lists.newArrayListWithCapacity(response.getHits().getHits().length); Arrays.stream(response.getHits().getHits()).forEach(his -> mapList.add(his.getSourceAsMap())); List<Product> userList = new ArrayList<>(); if (!CollectionUtils.isEmpty(mapList)) { userList = JSONArray.parseArray(JSON.toJSONString(mapList), Product.class); } SearchHit[] hits = response.getHits().getHits(); for (SearchHit hit : hits) { System.out.println(hit.getSourceAsString()); Map<String, HighlightField> highlightFields = hit.getHighlightFields(); if (highlightFields.containsKey("name")) { System.out.println(highlightFields.get("name").fragments()[0]); } } return userList; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。