本地docker搭建ES环境,Spring boot集成ES

816 阅读3分钟

学习初衷

目前Elaticsearch作为分布式全文检索引擎,很多公司使用频率还是比较高的,我目前的所在公司虽然总体数据量不算太大,但是一些项目也用到了ES,我目前所负责的项目还未使用到ES,为了避免如果使用的ES我们快速的集成,并且遇到问题能快速的解决,所以提前去学习下ES,从基本的搭建到集成到项目中开始,本文属于我的一个技术学习笔记。

Docker容器部署ES

这边就不介绍Elaticsearch的一些基本信息了,有兴趣的小伙伴可以去官网看看技术分档Welcome to Elastic Docs | Elastic 介绍的都是很全面,这里分享下本地环境如何部署和使用ES。

Pull

docker环境下执行:

//下载 7.9.3版本
docker pull elasticsearch:7.9.3

2A81A638-A691-47C7-95D5-DC2BB826148B.png

Run

这里目前就不部署集群的ES了,执行下面命令运行ES:

docker run --name elasticsearch -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 elasticsearch:7.9.3

-name :返回指定容器名,-e:es环境边框-p :映射指定端口号 -d:后台运行并且返回容器id

docker ps 查看容器es启动状态

3FB0A8DC-412C-4915-86E9-3A299B88DBA3.png

访问

浏览器访问http://localhost:9200/ 返回Elaticsearch具体信息

BBD1304C-E8A6-409E-97CC-76A1BD962A2C.png

ES可视化工具

Elasticsearch几种客户端Elasticsearch-Head、cerebro、kinaba、Dejavu、ElasticHD,Elastic 有一套完整的产品线,ELK(Elasticsearch、Logstash、Kibana),这边就用Kibana做可使用化工具了。

因为我的ES使用的版本是7.x版本,所以我Kibana也配合使用 7.x

//下载kibana 7.x版本
docker pull kibana:7.0.1
//启动kibana 关联elasticsearch 这种方式不用修改 kibana.yml 
docker run --name kibana --link=elasticsearch:elasticsearch -p 5601:5601 -d kibana:7.0.1

访问localhost:5601 ,跳转页面

C93DE5A9-78D6-40F5-9734-BD37F6DE5F01.png

Management目录下可以看到多了两个 .kibana_task_manager和.kibana_1索引

1AF64103-AD90-4BBF-8EEE-CF65844A0334.png

创建Elasticsearch索引

首先为什么创建es索引,好比mysql数据库要先建立库,才能进行查询,而es的查询是根据索引查询。

因为ES是resultful请求,所以需要put、get等请求完成索引的创建,将索引写入ES。

首先先用put /test2建立一个索引的字段映射,put/ test2/_doc/1 将数据写入,get test2/_doc/1获取数据,

FF07915A-0421-483C-BAAB-CC33054CAF68.png

Spring boot 集成 Elasticsearch

引入es依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

配置EsConfig

@Configuration
public class EsConfig {

    @Value("${es.host}")
    private String host;
    @Value("${es.port}")
    private String port;
    @Value("${es.type}")
    private String type;

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

操作es,建立索引、插入数据、修改、查询

@PostMapping("/operationEs")
public void operationEs() throws IOException {

    log.info("Es操作开始~~~~~~~~~~·");
    // IndexRequest
    IndexRequest indexRequest = new IndexRequest("test2");
    EsUser user = new EsUser();
    user.setName("Lxlxxx");
    user.setAge(22);
    user.setFavourite("coding");
    String source = JSONObject.toJSONString(user);
    indexRequest.id("2").type("_doc").source(source, XContentType.JSON);
    // 操作ES
    IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);

    log.info("Es返回结果"+ JSON.toJSONString(indexResponse));

}

@PostMapping("/updateEs")
public void updateEs() throws IOException {
    UpdateRequest updateRequest = new UpdateRequest("test2", "_doc","2");
    EsUser user = new EsUser();
    user.setName("Lxlxxx-1");
    user.setAge(29);
    user.setFavourite("travel");
    updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);
    // 操作ES
    restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);

}

    @PostMapping("/searchEs")
    public void searchEs() throws IOException {

        //构建SearchRequest查询对象,用于发送请求
        SearchRequest searchRequest =new SearchRequest();
        searchRequest.indices("test2");

        //构建SearchSourceBuilder对象,接收检索参数
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();


        //构建QueryBuilder对象,根据字段求匹配,相当于查询条件
        QueryBuilder queryBuilder = QueryBuilders.matchQuery("name","Lxlxxx");
        //查询全部数据
//        QueryBuilder allQueryBuilder = QueryBuilders.matchAllQuery();
        searchSourceBuilder.query(queryBuilder);

        //查询,并返回结果
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        log.info("Es查询结果"+JSON.toJSONString(searchResponse));

    }

查看插入的es数据

Put后索引的数据

C644876B-6A61-4E6E-9523-5C7110B1C631.png

Update后的索引数据

C300F0FD-C129-4ADA-B0EA-BE5778232332.png

Search索引数据,主要存放在sourceAsString中 B16084C9-ADC8-437A-B876-53CB27D33752.png

总结

简单的介绍了下,Elaticsearch集成Kibana,并且实现了索引的添加,通过调用Elaticsearch的API实现对数据的插入、修改、查询,一些对Elaticsearch入门的学习,后续还将整合logstash,将日志加入到Elasticsearch,更加方便日志的检索。