ElasticSearch-Java API 操作

本文详细介绍了如何在Elasticsearch中进行环境配置、依赖引入,包括创建、查看、删除索引,以及文档的增删改查操作。此外,涵盖了分页查询、排序、过滤、组合查询、范围查询、模糊查询、高亮查询和聚合分析等高级功能。
摘要由CSDN通过智能技术生成

环境准备

引入依赖

<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);
// 添加文档数据,数据格式为JSON
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");
/*
    本次查询允许的最大编辑距离,默认不开启模糊查询,相当于fuzziness=0。
    可以是数字(0、1、2)代表固定的最大编辑距离
 */
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);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值