ES(elasticsearch)

文章目录

介绍

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,它能够快速地存储、搜索和分析大量的数据。Elasticsearch 常用于全文搜索、结构化搜索、日志分析、实时应用监控等场景。

在springboot项目集成ES

操作步骤

1.创建boot项目

引入入Web(Spring Web)NoSQl(Spring Data Elasticsearch(Access+Driver))
2.引入依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.6.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version> <!-- 确认版本 -->
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

3.编写配置类

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ElasticSearchConfig {

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

4.启动ES,编写测试类
创建索引

 @Autowired
    @Qualifier("restHighLevelClient")
    private RestHighLevelClient client;

    /**
     * 创建索引
     */
    @Test
    void testCreateIndex() throws IOException {
        CreateIndexRequest request = new CreateIndexRequest("zyy_index");
        CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
        // 查看是否创建成功
        boolean acknowledged = createIndexResponse.isAcknowledged();
        System.out.println(acknowledged);
        client.close();
    }

查询索引

@Test
    void testGetIndex() throws IOException {
        GetIndexRequest request = new GetIndexRequest("zyy_index");
        // 索引是否存在
        boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
        System.out.println(exists);
        client.close();
    }

删除索引

@Test
    void testDeleteIndex() throws IOException {
        DeleteIndexRequest request = new DeleteIndexRequest("zyy_index");
        AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
        // 是否删除成功
        boolean acknowledged = delete.isAcknowledged();
        System.out.println(acknowledged);
        client.close();
    }

文档的添加

@Test
    void testAddDoc() throws IOException {
        User user = new User("zyy", 18);

        IndexRequest indexRequest = new IndexRequest("zyy_index");
        //类似PUT /zyy_index/_doc/1
        indexRequest.id("1");
        indexRequest.timeout(TimeValue.timeValueMillis(1000));
        indexRequest.source(JSON.toJSONString(user), XContentType.JSON);

        IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);
        // 返回状态CREATED
        System.out.println(indexResponse.status());
        //IndexResponse[index=zyy_index,type=_doc,id=1,version=1,result=created,seqNo=0,primaryTerm=1,shards={"total":2,"successful":1,"failed":0}]
        System.out.println(indexResponse);

    }

文档信息的获取

@Test
    void testGetDoc() throws IOException {
        // 类似GET /zyy_index/_doc/1
        GetRequest request = new GetRequest("zyy_index", "1");

        GetResponse response = client.get(request, RequestOptions.DEFAULT);
        System.out.println(response.getSourceAsString());
    }

文档的获取,并判断其是否存在

@Test
    void testDocIsExits() throws IOException {
        // 类似GET /zyy_index/_doc/1
        GetRequest request = new GetRequest("zyy_index", "1");
        // 不获取返回的 _source的上下文了
        request.fetchSourceContext(new FetchSourceContext(false));
        request.storedFields("_none_");

        boolean exists = client.exists(request, RequestOptions.DEFAULT);
        System.out.println(exists);
    }

文档的更新

@Test
    void testUpdateDoc() throws IOException {
        User user = new User("zyy", 19);

        UpdateRequest request = new UpdateRequest("zyy_index", "1");
        request.doc(JSON.toJSONString(user), XContentType.JSON);

        UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
        System.out.println(response.status());
        System.out.println(response);
    }

文档的删除

 @Test
    void testDeleteDoc() throws IOException {
        DeleteRequest request = new DeleteRequest("zyy_index", "1");
        DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
        System.out.println(response.status());
        System.out.println(response);
    }

文档的查询

@Test
    void testSearch() throws IOException {
        //精确查询
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "zyy");
        TermQueryBuilder termQueryBuilder1 = QueryBuilders.termQuery("_index", "zyy_index");
        //匹配查询
//		MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name", "zyy");
        //构建查询条件
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.query(termQueryBuilder);
        sourceBuilder.query(termQueryBuilder1);
        //设置高亮
		sourceBuilder.highlighter(new HighlightBuilder());
        //设置分页
//		sourceBuilder.from(0);
//		sourceBuilder.size(10);
        //请求对象
        SearchRequest request = new SearchRequest();
        request.source(sourceBuilder);

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

        //查看返回
        SearchHits hits = response.getHits();
        System.out.println(JSON.toJSONString(hits));
        System.out.println("========================");
        for (SearchHit hit : hits.getHits()) {
            System.out.println(hit.getSourceAsMap());
        }
        System.out.println("========================");
    }

批量添加数据

@Test
    void testBulk() throws IOException {
        List<User> userList = new ArrayList<>();
        userList.add(new User("zyy1", 1));
        userList.add(new User("zyy2", 2));
        userList.add(new User("zyy3", 3));
        userList.add(new User("zyy4", 4));
        userList.add(new User("zyy5", 5));
        userList.add(new User("zyy6", 6));

        BulkRequest request = new BulkRequest();
        request.timeout("10s");
        for (int i = 0; i < userList.size(); i++) {
            User user = userList.get(i);

            IndexRequest indexRequest = new IndexRequest("zyy_index");
            indexRequest.id("" + i);
            indexRequest.source(JSON.toJSONString(user), XContentType.JSON);

            request.add(indexRequest);
        }

        BulkResponse responses = client.bulk(request, RequestOptions.DEFAULT);
        System.out.println(responses.status());

    }
相关推荐
Java 第一深情1 小时前
分布式全文检索引擎ElasticSearch-基本概念介绍
分布式·elasticsearch·全文检索
智慧化智能化数字化方案1 小时前
2023 数据资产管理实践白皮书(6.0版)+解读
大数据
helloworld工程师2 小时前
Dubbo的负载均衡及高性能RPC调用
java·大数据·人工智能
千瓜2 小时前
2024年特别报告,「十大生活方式」研究数据报告
大数据·数据挖掘·数据分析·业界资讯·新媒体
idealzouhu2 小时前
【Elasticsearch 中间件】Elasticsearch 入门案例详细教程
elasticsearch·中间件·jenkins
high20112 小时前
【Hadoop】-- hadoop3.x default port
大数据·hadoop·分布式
ueanaIU潇潇子2 小时前
Windows安装elasticsearch、Kibana以及IK分词器
大数据·elasticsearch·搜索引擎·kibana·ik分词器
说私域3 小时前
电商信任构建与创新模式:基于 2+1 链动模式与 S2B2C 商城小程序的分析
大数据·人工智能·微信小程序·小程序
奥顺3 小时前
从零开始:PHP基础教程系列-第3篇:控制结构:条件语句与循环
大数据·mysql·开源·php