1、Index API
public void indexData() throws IOException {
IndexRequest indexRequest = new IndexRequest("users");
indexRequest.id("1");
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;
}
2、GET API
@Test
public void getData() throws IOException {
GetRequest request = new GetRequest("users", "1");
GetResponse getResponse = client.get(request,GulimallElasticSearchConfig.COMMON_OPTIONS);
if (getResponse.isExists()){
System.out.println(getResponse.getSource());
}
}
3、DEL API
public void delData() throws IOException {
DeleteRequest request = new DeleteRequest("users", "1");
request.timeout(TimeValue.timeValueSeconds(2));
DeleteResponse delete = client.delete(request,GulimallElasticSearchConfig.COMMON_OPTIONS);
if (delete.getResult() == DocWriteResponse.Result.DELETED) {
System.out.println(delete.status());
}
}
4、复杂检索:在bank中搜索address中包含mill的所有人的年龄分布以及平均年龄,平均薪资
public void searchData() throws IOException {
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("bank");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchQuery("address", "Mill"));
TermsAggregationBuilder ageAgg = AggregationBuilders.terms("ageAgg").field("age").size(10);
sourceBuilder.aggregation(ageAgg);
AvgAggregationBuilder ageAvg = AggregationBuilders.avg("ageAvg").field("age");
sourceBuilder.aggregation(ageAvg);
AvgAggregationBuilder balanceAvg = AggregationBuilders.avg("balanceAvg").field("balance");
sourceBuilder.aggregation(balanceAvg);
System.out.println("检索条件:" + sourceBuilder);
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println("检索结果:" + searchResponse);
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);
}
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());
}
5 查询条件
public List<Product> queryEsList(@RequestBody SearchDto dto) throws IOException {
QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("手机", "name", "lv");
return getProducts(queryBuilder);
}
private List<Product> getProducts(QueryBuilder queryBuilder) throws IOException {
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;
}
开发文档