学习初衷
目前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
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启动状态
访问
浏览器访问http://localhost:9200/ 返回Elaticsearch具体信息
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 ,跳转页面
Management目录下可以看到多了两个 .kibana_task_manager和.kibana_1索引
创建Elasticsearch索引
首先为什么创建es索引,好比mysql数据库要先建立库,才能进行查询,而es的查询是根据索引查询。
因为ES是resultful请求,所以需要put、get等请求完成索引的创建,将索引写入ES。
首先先用put /test2建立一个索引的字段映射,put/ test2/_doc/1 将数据写入,get test2/_doc/1获取数据,
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后索引的数据
Update后的索引数据
Search索引数据,主要存放在sourceAsString中
总结
简单的介绍了下,Elaticsearch集成Kibana,并且实现了索引的添加,通过调用Elaticsearch的API实现对数据的插入、修改、查询,一些对Elaticsearch入门的学习,后续还将整合logstash,将日志加入到Elasticsearch,更加方便日志的检索。