栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

初学 elasticSearch:索引以及文档的增删改查

初学 elasticSearch:索引以及文档的增删改查

在执行之前,需要先打开 elasticSearch
别忘了打开 elasticsearch - head

新建 springBoot 项目,引入 NoSql 中的 elasticSearch maven 依赖

首先,编写 config 类

@Configuration
public class ElasticSearchConfig {
    @Bean
    public RestHighLevelClient restHighLevelClient() {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("localhost", 9200, "http")));
        return client;
    }
}

然后,在 springBoot 的测试类中进行测试:

1、创建索引
//    测试索引的创建
    @Test
    void testCreateIndex() throws IOException {
//        1、创建索引的请求
        CreateIndexRequest request = new CreateIndexRequest("thx_index");
//        2、执行创建请求
        CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
        System.out.println(createIndexResponse);
    }


打开 9100 端口,能够看到索引,说明创建成功

2、测试索引是否存在
//    测试获取索引,只能判断是否存在
    @Test
    void testExist() throws IOException {
        GetIndexRequest request = new GetIndexRequest("thx_index");
        boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
        System.out.println(exists);
    }

返回结果 true 说明存在

3、删除索引
//    测试删除索引
    @Test
    void testDeleteIndex() throws IOException {
        DeleteIndexRequest request = new DeleteIndexRequest("thx_index");
        AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
        System.out.println(delete.isAcknowledged());
    }

9100 端口看不到索引,说明删除成功

4、添加文档(需要 user 实体类)

(如果不设置 id, 那么就是随机值)

 //    测试添加文档
    @Test
    void testAdddocument() throws IOException {
//        创建对象
        User user = new User("thx", 4);
//        创建请求
        IndexRequest request = new IndexRequest("thx_index");
        request.id("1");
        request.timeout(Timevalue.timevalueSeconds(10));
//        将数据放入请求
        request.source(JSON.toJSONString(user), XContentType.JSON);
//        客户端发送请求
        IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
        System.out.println(indexResponse.toString());
//        命令返回的状态
        System.out.println(indexResponse.status());
    }

点开数据浏览查看文档信息

5、测试文档是否存在
//    获取文档,判断是否存在
    @Test
    void testIsExists() throws IOException {
    // 这里有两个对象,第一个是索引,第二个是 id
        GetRequest getRequest = new GetRequest("thx_index", "1");
//        不获取返回的上下文,效率更高
        getRequest.fetchSourceContext(new FetchSourceContext(false));
        getRequest.storedFields("_none_");
        boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
        System.out.println(exists);
    }
6、获取文档的信息
 //    获取文档的信息
    @Test
    void testGetdocument() throws IOException {
    //   获取 id 是 1 的文档信息
        GetRequest getRequest = new GetRequest("thx_index", "1");
        GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
//        打印文档的内容
        System.out.println(getResponse.getSourceAsString());
        System.out.println(getResponse);
    }
7、 更新文档信息
 //    更新文档信息
    @Test
    void testUpdatedocument() throws IOException {
        UpdateRequest updateRequest = new UpdateRequest("thx_index", "1");
        updateRequest.timeout("10s");
        User user = new User("唐昊翔2", 12);
        updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);
        UpdateResponse updateResponse = client.update(updateRequest, RequestOptions.DEFAULT);
        System.out.println(updateResponse);
    }
8、删除文档
//    删除文档记录
    @Test
    void testDeletedocument() throws IOException {
        DeleteRequest request = new DeleteRequest("thx_index", "1");
        request.timeout("10s");
        DeleteResponse deleteResponse = client.delete(request, RequestOptions.DEFAULT);
        System.out.println(deleteResponse.status());
    }
9、批量插入文档
@Test
    void testBulkRequest() throws IOException {
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("10s");
        List list = new ArrayList<>();
        list.add(new User("thx", 1));
        list.add(new User("thx", 2));
        list.add(new User("thx", 3));
        list.add(new User("thx", 4));
        list.add(new User("thx", 5));
        list.add(new User("thx", 6));
        for (int i = 0; i < list.size(); i++) {
//            批量更新和删除在这里修改即可
            bulkRequest.add(
                    new IndexRequest("thx_index")
//                            不设置就是随机的 id
                            .id("" + (i + 1)).
                            source(JSON.toJSONString(list.get(i)), XContentType.JSON));
        }
        BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulkResponse.hasFailures());
    }

10、查询文档信息:
 //    查询是最重要的
    @Test
    void testSearchdocument() throws IOException {
        SearchRequest searchRequest = new SearchRequest("thx_index");
//        构建搜索的条件
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//        构建查询,查询条件,使用 QueryBuilders 工具来实现
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "thx");
//        查询所有
//        MatchAllQueryBuilder termQueryBuilder1 = QueryBuilders.matchAllQuery();
        sourceBuilder.query(termQueryBuilder);
//        sourceBuilder.from();
//        sourceBuilder.size();
        sourceBuilder.timeout(new Timevalue(60, TimeUnit.SECONDS));
//        构建搜索
        searchRequest.source(sourceBuilder);
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println(JSON.toJSONString(searchResponse.getHits()));
        System.out.println("====================");
        for (SearchHit documentFields : searchResponse.getHits().getHits()) {
            System.out.println(documentFields.getSourceAsMap());
        }
    }


看到文档内容,说明查询成功
完整代码:

package com.cnmb.thx;

import com.alibaba.fastjson.JSON;
import com.cnmb.thx.entity.User;
import net.minidev.json.JSONArray;
import org.apache.lucene.util.QueryBuilder;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkAction;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.unit.Timevalue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.MatchAllQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

@SpringBootTest
class ApplicationTests {

    
    @Resource
    private RestHighLevelClient client;

    //    测试索引的创建
    @Test
    void testCreateIndex() throws IOException {
//        1、创建索引的请求
        CreateIndexRequest request = new CreateIndexRequest("thx_index");
//        2、执行创建请求
        CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
        System.out.println(createIndexResponse);
    }

    //    测试获取索引,只能判断是否存在
    @Test
    void testExist() throws IOException {
        GetIndexRequest request = new GetIndexRequest("thx_index");
        boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
        System.out.println(exists);
    }

    //    测试删除索引
    @Test
    void testDeleteIndex() throws IOException {
        DeleteIndexRequest request = new DeleteIndexRequest("thx_index");
        AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
        System.out.println(delete.isAcknowledged());
    }

    //    测试添加文档
    @Test
    void testAdddocument() throws IOException {
//        创建对象
        User user = new User("thx", 4);
//        创建请求
        IndexRequest request = new IndexRequest("thx_index");
        request.id("1");
        request.timeout(Timevalue.timevalueSeconds(10));
//        将数据放入请求
        request.source(JSON.toJSONString(user), XContentType.JSON);
//        客户端发送请求
        IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
        System.out.println(indexResponse.toString());
//        命令返回的状态
        System.out.println(indexResponse.status());
    }

    //    获取文档,判断是否存在
    @Test
    void testIsExists() throws IOException {
        GetRequest getRequest = new GetRequest("thx_index", "1");
//        不获取返回的上下文,效率更高
        getRequest.fetchSourceContext(new FetchSourceContext(false));
        getRequest.storedFields("_none_");
        boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
        System.out.println(exists);
    }

    //    获取文档的信息
    @Test
    void testGetdocument() throws IOException {
        GetRequest getRequest = new GetRequest("thx_index", "1");
        GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
//        打印文档的内容
        System.out.println(getResponse.getSourceAsString());
        System.out.println(getResponse);
    }

    //    更新文档信息
    @Test
    void testUpdatedocument() throws IOException {
        UpdateRequest updateRequest = new UpdateRequest("thx_index", "1");
        updateRequest.timeout("10s");
        User user = new User("唐昊翔2", 12);
        updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);
        UpdateResponse updateResponse = client.update(updateRequest, RequestOptions.DEFAULT);
        System.out.println(updateResponse);
    }

    //    删除文档记录
    @Test
    void testDeletedocument() throws IOException {
        DeleteRequest request = new DeleteRequest("thx_index", "1");
        request.timeout("10s");
        DeleteResponse deleteResponse = client.delete(request, RequestOptions.DEFAULT);
        System.out.println(deleteResponse.status());
    }

    @Test
    void testBulkRequest() throws IOException {
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("10s");
        List list = new ArrayList<>();
        list.add(new User("thx", 1));
        list.add(new User("thx", 2));
        list.add(new User("thx", 3));
        list.add(new User("thx", 4));
        list.add(new User("thx", 5));
        list.add(new User("thx", 6));
        for (int i = 0; i < list.size(); i++) {
//            批量更新和删除在这里修改即可
            bulkRequest.add(
                    new IndexRequest("thx_index")
//                            不设置就是随机的 id
                            .id("" + (i + 1)).
                            source(JSON.toJSONString(list.get(i)), XContentType.JSON));
        }
        BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulkResponse.hasFailures());
    }

    //    查询是最重要的
    @Test
    void testSearchdocument() throws IOException {
        SearchRequest searchRequest = new SearchRequest("thx_index");
//        构建搜索的条件
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//        构建查询,查询条件,使用 QueryBuilders 工具来实现
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "thx");
//        查询所有
//        MatchAllQueryBuilder termQueryBuilder1 = QueryBuilders.matchAllQuery();
        sourceBuilder.query(termQueryBuilder);
//        sourceBuilder.from();
//        sourceBuilder.size();
        sourceBuilder.timeout(new Timevalue(60, TimeUnit.SECONDS));
//        构建搜索
        searchRequest.source(sourceBuilder);
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println(JSON.toJSONString(searchResponse.getHits()));
        System.out.println("====================");
        for (SearchHit documentFields : searchResponse.getHits().getHits()) {
            System.out.println(documentFields.getSourceAsMap());
        }
    }

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/302942.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号