java操作Elastic Search实现数据的处理

一、依赖导入

在操作Elastic Search首先需要导入依赖

<dependencies>
    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>7.8.0</version>
    </dependency>
    <!-- elasticsearch的客户端 -->
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>7.8.0</version>
    </dependency>
    <!-- elasticsearch依赖2.x的log4j -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.8.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.8.2</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.9</version>
    </dependency>
    <!-- junit单元测试 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>

 

二、创建Elastic Search客户端

public static void main(String[] args) throws Exception {

    // 创建ES客户端
    RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
    );

    // 关闭ES客户端
    esClient.close();
}

三、索引相关操作

1、创建索引

 public static void main(String[] args) throws Exception {

     // 创建ES客户端
     RestHighLevelClient esClient = new RestHighLevelClient(
         RestClient.builder(new HttpHost("localhost", 9200, "http"))
     );

     // 创建索引
     CreateIndexRequest request = new CreateIndexRequest("user");
     CreateIndexResponse createIndexResponse =
         esClient.indices().create(request, RequestOptions.DEFAULT);

     // 响应状态
     boolean acknowledged = createIndexResponse.isAcknowledged();
     System.out.println("索引操作 :" + acknowledged);

     esClient.close();
 }

 

2、删除索引

public static void main(String[] args) throws Exception {

    // 创建ES客户端
    RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
    );

    // 删除索引
    DeleteIndexRequest request = new DeleteIndexRequest("user");

    AcknowledgedResponse response = esClient.indices().delete(request, RequestOptions.DEFAULT);

    // 响应状态
    System.out.println(response.isAcknowledged());

    esClient.close();
}

3、查询索引

public static void main(String[] args) throws Exception {

    // 创建ES客户端
    RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
    );

    // 查询索引
    GetIndexRequest request = new GetIndexRequest("user");

    GetIndexResponse getIndexResponse =
        esClient.indices().get(request, RequestOptions.DEFAULT);

    // 响应状态
    System.out.println(getIndexResponse.getAliases());
    System.out.println(getIndexResponse.getMappings());
    System.out.println(getIndexResponse.getSettings());

    esClient.close();
}

四、数据相关操作

1、插入数据

//实体类
public class User {
        private String name;
        private String sex;
        private Integer age;

        public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
//main方法
public static void main(String[] args) throws Exception {

    RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
    );

    // 插入数据
    IndexRequest request = new IndexRequest();
    request.index("user").id("1001");

    User user = new User();
    user.setName("zhangsan");
    user.setAge(30);
    user.setSex("男");

    // 向ES插入数据,必须将数据转换位JSON格式
    ObjectMapper mapper = new ObjectMapper();
    String userJson = mapper.writeValueAsString(user);
    request.source(userJson, XContentType.JSON);

    IndexResponse response = esClient.index(request, RequestOptions.DEFAULT);

    System.out.println(response.getResult());

    esClient.close();
}

 

2、删除数据

public static void main(String[] args) throws Exception {
	
    //获取ES客户端
    RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
    );

	//指定删除对象
    DeleteRequest request = new DeleteRequest();
    request.index("user").id("1001");

    //删除数据
    DeleteResponse response = esClient.delete(request, RequestOptions.DEFAULT);
    System.out.println(response.toString());

    esClient.close();
}

3、获取数据

public static void main(String[] args) throws Exception {

    //获取ES对象
    RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
    );

    // 查询数据
    GetRequest request = new GetRequest();
    request.index("user").id("1001");
    GetResponse response = esClient.get(request, RequestOptions.DEFAULT);

    System.out.println(response.getSourceAsString());

    //关闭ES客户端
    esClient.close();
}

4、查询操作

public static void main(String[] args) throws Exception {

    RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
    );

    // 1. 查询索引的所有数据
    SearchRequest request = new SearchRequest();
    request.indices("user");

    // 构造查询条件
    SearchSourceBuilder builder = new SearchSourceBuilder();
    builder.query(QueryBuilders.matchAllQuery());

    request.source(builder);

    SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

    SearchHits hits = response.getHits();

    System.out.println(response.getTook());
    System.out.println(hits.getTotalHits());
    Iterator<SearchHit> iterator = hits.iterator();
    while (iterator.hasNext()) {
        SearchHit hit = iterator.next();
        System.out.println(hit.getSourceAsString());
    }

    esClient.close();
}

5、条件查询

public static void main(String[] args) throws Exception {

    RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
    );

    //1. 查询索引中全部的数据
    SearchRequest request = new SearchRequest();
    request.indices("user");

    request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));

    SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

    SearchHits hits = response.getHits();

    System.out.println(hits.getTotalHits());
    System.out.println(response.getTook());

    for ( SearchHit hit : hits ) {
        System.out.println(hit.getSourceAsString());
    }

    //2. 条件查询 : termQuery
    SearchRequest request = new SearchRequest();
    request.indices("user");

    request.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("age", 30)));
    SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

    SearchHits hits = response.getHits();

    System.out.println(hits.getTotalHits());
    System.out.println(response.getTook());

    for ( SearchHit hit : hits ) {
        System.out.println(hit.getSourceAsString());
    }

    //3. 分页查询
    SearchRequest request = new SearchRequest();
    request.indices("user");

    SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
    // (当前页码-1)*每页显示数据条数
    builder.from(2);
    builder.size(2);
    request.source(builder);
    SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

    SearchHits hits = response.getHits();

    System.out.println(hits.getTotalHits());
    System.out.println(response.getTook());

    for ( SearchHit hit : hits ) {
        System.out.println(hit.getSourceAsString());
    }

    // 4. 查询排序
    SearchRequest request = new SearchRequest();
    request.indices("user");

    SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
    //
    builder.sort("age", SortOrder.DESC);

    request.source(builder);
    SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

    SearchHits hits = response.getHits();

    System.out.println(hits.getTotalHits());
    System.out.println(response.getTook());

    for ( SearchHit hit : hits ) {
        System.out.println(hit.getSourceAsString());
    }

    // 5. 过滤字段
    SearchRequest request = new SearchRequest();
    request.indices("user");

    SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
    //
    String[] excludes = {"age"};
    String[] includes = {};
    builder.fetchSource(includes, excludes);

    request.source(builder);
    SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

    SearchHits hits = response.getHits();

    System.out.println(hits.getTotalHits());
    System.out.println(response.getTook());

    for ( SearchHit hit : hits ) {
        System.out.println(hit.getSourceAsString());
    }

    // 6. 组合查询
    SearchRequest request = new SearchRequest();
    request.indices("user");

    SearchSourceBuilder builder = new SearchSourceBuilder();
    BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

    //boolQueryBuilder.must(QueryBuilders.matchQuery("age", 30));
    //boolQueryBuilder.must(QueryBuilders.matchQuery("sex", "男"));
    //boolQueryBuilder.mustNot(QueryBuilders.matchQuery("sex", "男"));
    boolQueryBuilder.should(QueryBuilders.matchQuery("age", 30));
    boolQueryBuilder.should(QueryBuilders.matchQuery("age", 40));

    builder.query(boolQueryBuilder);

    request.source(builder);
    SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

    SearchHits hits = response.getHits();

    System.out.println(hits.getTotalHits());
    System.out.println(response.getTook());

    for ( SearchHit hit : hits ) {
        System.out.println(hit.getSourceAsString());
    }

    // 7. 范围查询
    SearchRequest request = new SearchRequest();
    request.indices("user");

    SearchSourceBuilder builder = new SearchSourceBuilder();
    RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("age");

    rangeQuery.gte(30);
    rangeQuery.lt(50);

    builder.query(rangeQuery);

    request.source(builder);
    SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

    SearchHits hits = response.getHits();

    System.out.println(hits.getTotalHits());
    System.out.println(response.getTook());

    for ( SearchHit hit : hits ) {
        System.out.println(hit.getSourceAsString());
    }

    //8. 模糊查询
    SearchRequest request = new SearchRequest();
    request.indices("user");

    SearchSourceBuilder builder = new SearchSourceBuilder();
    builder.query(QueryBuilders.fuzzyQuery("name", "wangwu").fuzziness(Fuzziness.TWO));

    request.source(builder);
    SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

    SearchHits hits = response.getHits();

    System.out.println(hits.getTotalHits());
    System.out.println(response.getTook());

    for ( SearchHit hit : hits ) {
        System.out.println(hit.getSourceAsString());
    }

    // 9. 高亮查询
    SearchRequest request = new SearchRequest();
    request.indices("user");

    SearchSourceBuilder builder = new SearchSourceBuilder();
    TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("name", "zhangsan");

    HighlightBuilder highlightBuilder = new HighlightBuilder();
    highlightBuilder.preTags("<font color='red'>");
    highlightBuilder.postTags("</font>");
    highlightBuilder.field("name");

    builder.highlighter(highlightBuilder);
    builder.query(termsQueryBuilder);

    request.source(builder);
    SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

    SearchHits hits = response.getHits();

    System.out.println(hits.getTotalHits());
    System.out.println(response.getTook());

    for ( SearchHit hit : hits ) {
        System.out.println(hit.getSourceAsString());
    }

    // 10. 聚合查询
    SearchRequest request = new SearchRequest();
    request.indices("user");

    SearchSourceBuilder builder = new SearchSourceBuilder();

    AggregationBuilder aggregationBuilder = AggregationBuilders.max("maxAge").field("age");
    builder.aggregation(aggregationBuilder);

    request.source(builder);
    SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

    SearchHits hits = response.getHits();

    System.out.println(hits.getTotalHits());
    System.out.println(response.getTook());

    for ( SearchHit hit : hits ) {
        System.out.println(hit.getSourceAsString());
    }

    // 11. 分组查询
    SearchRequest request = new SearchRequest();
    request.indices("user");

    SearchSourceBuilder builder = new SearchSourceBuilder();

    AggregationBuilder aggregationBuilder = AggregationBuilders.terms("ageGroup").field("age");
    builder.aggregation(aggregationBuilder);

    request.source(builder);
    SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

    SearchHits hits = response.getHits();

    System.out.println(hits.getTotalHits());
    System.out.println(response.getTook());

    for ( SearchHit hit : hits ) {
        System.out.println(hit.getSourceAsString());
    }

    //关闭ES客户端
    esClient.close();
}

6、更新数据

public static void main(String[] args) throws Exception {

    RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
    );

    // 查询索引
    GetIndexRequest request = new GetIndexRequest("user");

    GetIndexResponse getIndexResponse =
        esClient.indices().get(request, RequestOptions.DEFAULT);

    // 响应状态
    System.out.println(getIndexResponse.getAliases());
    System.out.println(getIndexResponse.getMappings());
    System.out.println(getIndexResponse.getSettings());

    esClient.close();
}

五、批处理

1、批量新增

public static void main(String[] args) throws Exception {

    RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
    );

    // 批量插入数据
    BulkRequest request = new BulkRequest();

    request.add(new IndexRequest().index("user").id("1001").source(XContentType.JSON, "name", "zhangsan", "age",30,"sex","男"));
    request.add(new IndexRequest().index("user").id("1002").source(XContentType.JSON, "name", "lisi", "age",30,"sex","女"));
    request.add(new IndexRequest().index("user").id("1003").source(XContentType.JSON, "name", "wangwu", "age",40,"sex","男"));
    request.add(new IndexRequest().index("user").id("1004").source(XContentType.JSON, "name", "wangwu1", "age",40,"sex","女"));
    request.add(new IndexRequest().index("user").id("1005").source(XContentType.JSON, "name", "wangwu2", "age",50,"sex","男"));
    request.add(new IndexRequest().index("user").id("1006").source(XContentType.JSON, "name", "wangwu3", "age",50,"sex","男"));
    request.add(new IndexRequest().index("user").id("1007").source(XContentType.JSON, "name", "wangwu44", "age",60,"sex","男"));
    request.add(new IndexRequest().index("user").id("1008").source(XContentType.JSON, "name", "wangwu555", "age",60,"sex","男"));
    request.add(new IndexRequest().index("user").id("1009").source(XContentType.JSON, "name", "wangwu66666", "age",60,"sex","男"));

    BulkResponse response = esClient.bulk(request, RequestOptions.DEFAULT);
    System.out.println(response.getTook());
    System.out.println(response.getItems());

    esClient.close();
}

 

2、批量删除

public static void main(String[] args) throws Exception {

    RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
    );

    // 批量删除数据
    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 = esClient.bulk(request, RequestOptions.DEFAULT);
    System.out.println(response.getTook());
    System.out.println(response.getItems());

    esClient.close();
}

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,可以使用Elasticsearch官方提供的Java API实现批量添加数据。以下是一个简单的示例代码: ``` import org.elasticsearch.action.bulk.BulkRequest; import org.elasticsearch.action.bulk.BulkResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.reindex.BulkByScrollResponse; import org.elasticsearch.index.reindex.DeleteByQueryRequest; import org.elasticsearch.index.reindex.DeleteByQueryResponse; import org.elasticsearch.index.reindex.UpdateByQueryRequest; import org.elasticsearch.index.reindex.UpdateByQueryResponse; import org.elasticsearch.script.Script; import org.elasticsearch.script.ScriptType; import org.elasticsearch.search.builder.SearchSourceBuilder; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; public class ElasticsearchBulkAddExample { private final RestHighLevelClient client; public ElasticsearchBulkAddExample(RestHighLevelClient client) { this.client = client; } public void bulkAdd() throws IOException { BulkRequest bulkRequest = new BulkRequest(); // 添加要批量添加的数据 List<Map<String, Object>> dataList = new ArrayList<>(); Map<String, Object> data1 = Map.of("title", "Java入门教程", "content", "Java基础语法、面向对象编程等"); Map<String, Object> data2 = Map.of("title", "Java高级编程", "content", "多线程、网络编程、JVM优化等"); dataList.add(data1); dataList.add(data2); // 将数据添加到BulkRequest中 for (Map<String, Object> data : dataList) { bulkRequest.add(client.prepareIndex("index_name", "doc_type").setSource(data, XContentType.JSON)); } // 执行批量添加操作 BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT); if (bulkResponse.hasFailures()) { // 处理失败情况 } else { // 处理成功情况 } } } ``` 在上面的示例代码中,我们首先创建一个BulkRequest对象,然后将要批量添加的数据添加到BulkRequest中。最后调用client.bulk()方法执行批量添加操作。注意,上面的代码中的index_name和doc_type需要替换为你实际使用的索引名和文档类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值