环境准备
引入依赖
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<exclusions>
<exclusion>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</exclusion>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
</dependency>
ES连接配置
@Configuration
public class EsConfig {
public static final RequestOptions COMMON_OPTIONS;
static {
RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
COMMON_OPTIONS = builder.build();
}
@Bean
public RestHighLevelClient esClient() {
return new RestHighLevelClient(
RestClient.builder(
new HttpHost("192.168.80.10", 9200, "http")));
}
}
索引操作
创建索引
CreateIndexRequest indexRequest = new CreateIndexRequest("user");
client.indices().create(indexRequest, EsConfig.COMMON_OPTIONS);
查看索引
GetIndexRequest indexRequest = new GetIndexRequest("user");
GetIndexResponse response = client.indices().get(indexRequest, EsConfig.COMMON_OPTIONS);
删除索引
DeleteIndexRequest indexRequest = new DeleteIndexRequest("user");
client.indices().delete(indexRequest, EsConfig.COMMON_OPTIONS);
文档操作
新增文档
IndexRequest request = new IndexRequest("user");
request.id("1001");
User user = new User();
user.setName("zhangsan");
user.setAge(30);
user.setSex("男");
ObjectMapper objectMapper = new ObjectMapper();
String asJson = objectMapper.writeValueAsString(user);
request.source(asJson, XContentType.JSON);
IndexResponse response = client.index(request, EsConfig.COMMON_OPTIONS);
修改文档
UpdateRequest request = new UpdateRequest();
request.index("user");
request.id("1001");
request.doc(XContentType.JSON, "sex", "女", "name", "张三");
UpdateResponse response = client.update(request, EsConfig.COMMON_OPTIONS);
查询文档
GetRequest request = new GetRequest().index("user").id("1001");
GetResponse response = client.get(request, EsConfig.COMMON_OPTIONS);
删除文档
DeleteRequest request = new DeleteRequest().index("user").id("1001");
DeleteResponse response = client.delete(request, EsConfig.COMMON_OPTIONS);
批量操作
批量新增
BulkRequest request = new BulkRequest();
request.add(new IndexRequest().index("user").id("1001").source(XContentType.JSON, "name", "lisi"));
request.add(new IndexRequest().index("user").id("1002").source(XContentType.JSON, "name", "wangwu"));
request.add(new IndexRequest().index("user").id("1003").source(XContentType.JSON, "name", "zhaoliu"));
BulkResponse response = client.bulk(request, EsConfig.COMMON_OPTIONS);
批量删除
BulkRequest request = new BulkRequest();
request.add(new DeleteRequest().index("user").id("1001"));
request.add(new DeleteRequest().index("user").id("1002"));
request.add(new DeleteRequest().index("user").id("1003"));
BulkResponse response = client.bulk(request, EsConfig.COMMON_OPTIONS);
查询操作
查询所有索引数据
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.matchAllQuery());
request.source(builder);
SearchResponse response = client.search(request, EsConfig.COMMON_OPTIONS);
查询条件为关键字
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.termQuery("age", 30));
SearchResponse response = client.search(request, EsConfig.COMMON_OPTIONS);
分页查询
SearchRequest request = new SearchRequest().indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
builder.from(0).size(2);
request.source(builder);
SearchResponse response = client.search(request, EsConfig.COMMON_OPTIONS);
数据排序
SearchRequest request = new SearchRequest().indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.matchAllQuery());
builder.sort("age", SortOrder.ASC);
request.source(builder);
SearchResponse response = client.search(request, EsConfig.COMMON_OPTIONS);
过滤字段
SearchRequest request = new SearchRequest().indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
String[] excludes = {};
String[] includes = {"name", "age"};
builder.fetchSource(includes, excludes);
request.source(builder);
SearchResponse response = client.search(request, EsConfig.COMMON_OPTIONS);
组合查询
SearchRequest request = new SearchRequest().indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must(QueryBuilders.matchQuery("age", 30));
boolQuery.mustNot(QueryBuilders.matchQuery("name", "lisi"));
boolQuery.should(QueryBuilders.matchQuery("sex", "男"));
builder.query(boolQuery);
request.source(builder);
SearchResponse response = client.search(request, EsConfig.COMMON_OPTIONS);
范围查询
SearchRequest request = new SearchRequest().indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
RangeQueryBuilder ageRangeQuery = QueryBuilders.rangeQuery("age");
ageRangeQuery.gte("30");
ageRangeQuery.lte("40");
builder.query(ageRangeQuery);
request.source(builder);
SearchResponse response = client.search(request, EsConfig.COMMON_OPTIONS);
模糊查询
SearchRequest request = new SearchRequest().indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
FuzzyQueryBuilder fuzzyQuery = QueryBuilders.fuzzyQuery("name", "zhangsa");
fuzzyQuery.fuzziness(Fuzziness.ONE);
builder.query(fuzzyQuery);
request.source(builder);
SearchResponse response = client.search(request, EsConfig.COMMON_OPTIONS);
高亮查询
SearchRequest request = new SearchRequest("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
TermQueryBuilder termQuery = QueryBuilders.termQuery("name", "zhangsan");
builder.query(termQuery);
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.preTags("<font color='red'>");
highlightBuilder.postTags("</font>");
highlightBuilder.field("name");
builder.highlighter(highlightBuilder);
request.source(builder);
SearchResponse response = client.search(request, EsConfig.COMMON_OPTIONS);
聚合查询
SearchRequest request = new SearchRequest("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.aggregation(AggregationBuilders.max("maxAge").field("age"));
request.source(builder);
SearchResponse response = client.search(request, EsConfig.COMMON_OPTIONS);
分组统计
SearchRequest request = new SearchRequest("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.aggregation(AggregationBuilders.terms("agGroup").field("age"));
request.source(builder);
SearchResponse response = client.search(request, EsConfig.COMMON_OPTIONS);