一、概述
1.1 DB ~ ES
1.2 安装准备
JDK1.8 以上
ElasticSearch下载地址:ElasticSearch下载地址
elasticsearch-head下载地址:elasticsearch-head
kibana下载地址:kibana下载地址
以上版本要一致
二、Win安装ES使用
解压即可
注意事项
2.1 jvm.options
2.2 启动
bin 下的 elasticsearch.bat 双击即可
2.3 访问
127.0.0.1:9200
三、win安装可视化插件 Head
下载地址:elasticsearch-head
3.1 安装好node.js环境
安装依赖
cnpm install npm run start
访问:127.0.0.1:9100
访问不了…
3.2 解决跨域问题
elasticsearch.yml
// 添加 http.cors.enabled: true http.cors.allow-origin: "*"
3.3 重新启动elasticsearch
四、安装可视化平台 Kibana
4.1 简介
ELK是Elasticsearch. Logstash. Kibana三大开源框架首字母大写简称。市面上也被成为Elastic Stack。其中Elasticsearch是- 一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。像类似百度、谷歌这种大数据全文搜索引擎的场景都可以使用Elasticsearch作为底层支持框架,可见Elasticsearch提供的搜索能力确实强大,市面上很多时候我们简称Elasticsearch为es.
Logstash是ELK的中央数据流引擎,用于从不同日标(文件/数据存储/MQ )收集的不同格式数据,经过过滤后支持输出到不同目的
地(文件/MQ/redis/elasticsearch/kafka等)。Kibana可以将elasticsearch的数据通过友好的页面展示出来 ,提供实时分析的功
能。
市面上很多开发只要提到ELK能够一致说出它是一 个日志分析架构技术栈总称 ,但实际上ELK不仅仅适用于日志分析,它还可以支持其它任何数据分析和收集的场景,日志分析和收集只是更具有代表性。并非唯一性。
4.2 win下载安装kibana
kibana下载地址:kibana下载地址
启动
bin 下的 kibana.bat 双击使用
访问:
127.0.0.1:5601
4.3 修改汉化Kinana
i18n.locale: "zh-CN"
4.4 重新启动Kibana即可
五、安装IK分词器插件
5.1 下载
IK分词器插件:IK分词器插件
5.2 集成到ES
打开ES的plugins的目录,进行解压
重启ES
5.3 kibana测试
5.4 REST操作
5.4.1 PUT创建索引
// put /索引名/类型名/文档ID {请求体} PUT /test1/type1/1 { "name": "古力娜扎", "age":26 } // 索引字段类型设置 PUT /test2 { "mappings":{ "properties":{ "name":{ "type":"text" }, "age":{ "type":"long" } } } }
5.4.2 GET获取索引信息
GET test2
5.4.3 POST修改数据
//1. 直接put 相同的ID 版本号增加 //2. update UPDATE /test1/type1/1/_update { "doc"{ "name": "古力娜扎", "age":30 } }
5.4.4 DELETE删除索引
DELETE test1
六、SpringBoot集成ES
6.1 添加依赖
<dependency> <groupId>org.elasticsearch.client</groupId> <artificatId>elasticsearch-rest-high-level-client</artificatId> <version>7.6.2</version> </dependency>
6.2 代码测试
ElasticSearchConfig.java
public class ElasticSearchConfig{ @Bean public RestHighLevelClient restHighLevelClient (){ RestHighLevelClient client = new RestHighLevelClient( RestClient.builder( new HttpHost("localhost",9200,"http"))); return client; } }
增删改查-----测试类
@Autowired private RestHighLevelClient client; // 1.创建索引 void testCreateIndex(){ CreateIndexRequest request = new CreateIndexRequest("test_index"); CreateIndexResponse response = client.indices().creatre(request,RequestOptions.DEFAULT); System.out.println(response); // 2.获取索引信息 void testGetIndex(){ GetIndexRequest request = new GetIndexRequest("test_index"); boolean b = client.indicies.exists(request,RequestOptions.DEFAULT); System.out.println(b); } // 3. 删除索引 void testDeleteIndex(){ DeleteIndexRequest request = new DeleteIndexRequest("test_index"); AcknowledgeResponse delete = client.indicies.delete(request,RequestOptions.DEFAULT); System.out.println(delete.isAcknowledge()); } }
6.3 文档创建【增删改查】
创建实体类
@Component @AllArgsConstrator @NoArgsConstrator public class User{ private String name; private int age; }
测试类
// 4.添加文档 void testAddDoc(){ User user = new User("古力娜扎",26); IndexRequest request = new IndexRequest("test_index"); // 规则 put /test_index/_doc/1 request.id("1"); request.timeout(TimeValue.timeValueSeconds(1)); request.tomeout("1s"); request.source(JSON.toJSONString(user),XContentType.JSON); // 发送 IndexResponse response = client.index(request,RequestOptions.DEFAULT); System.out.println(response.toString()); System.out.println(response.status()); } // 5.获取文档 void testGetDoc(){ GetRequest request = new GetRequest("test_index","1"); request.fetchSourceContext(new FetchSourceContext(false)); request.storeFields("_none_"); // 是否存在??? boolean b = client.exists(request,RequestOptions.DEFAULT); System.out.println(b); // 获取 GetResponse response = client.get(request,RequestOptions.DEFAULT); System.out.println(response.getSourceAsString()); System.out.println(response); } // 6. 更新文档 void testUpdateDoc(){ UpdateRequest updateRequest = new UpdateRequest("test_index",1); updateRequest.timeout("1s"); User user = new User("迪丽热巴",28); updateRequest.doc(JSON.toJSONString(user),XContentType.JSON); UpdateResponse response = client.update(request,RequestOptions.DEFAULT); System.out.println(response); System.out.println(response.status()); } // 7.删除文档 void testDeleteDoc(){ DeleteRequest request = new DeleteRequest("test_index",1); updateRequest.timeout("1s"); DeleteResponse response = client.delete(request,RequestOptions.DEFAULT); System.out.println(response); System.out.println(response.status()); } // 8.批量插入数据 void testBulkRequest(){ BulkRequest bulkRequest = new BulkRequest(); bulkRequest.timeout("15s"); ArrayList<User> userList = new ArrayList<>(); userList.add(new User("古力娜扎1号",26)); userList.add(new User("古力娜扎2号",27)); userList.add(new User("古力娜扎3号",28)); userList.add(new User("古力娜扎4号",29)); userList.add(new User("古力娜扎5号",30)); userList.add(new User("古力娜扎6号",31)); userList.add(new User("古力娜扎7号",32)); for(int i = 0;i<=userList.size();i++){ bulkRequest.add( new IndexRequest("test.index"). id(""+(i+1)). source(JSON.toJSONString(userList.get(i)),XContentType.JSON)); } // 批量插入 BulkResponse response = client.bulk(bulkRequest,RequestOptions.DEFAULT); System.out.println(bulkRequest.hasFailures()); } // 9.条件搜索 void testSearch(){ SearchRequest searchRequest = new SearchRequest("test_index"); // 构造条件 SearchSourceBuilder builder = new SearchSourceBuilder(); // 精确匹配 //TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name","古力娜扎"); // 匹配全部 matchAllQuery(); builder.query(termQueryBuilder); // 分页 builder.from(); builder.size(); builder.timeout("60s"); searchRequest.source(builder); SearchResponse response = client.search(searchRequest,RequestOptions.DEFAULT); System.out.println(JSON.toJSONString(response.getHits())); //遍历出来 for(SearchHit docFields : searchRequest.getHits().getHits()){ System.out.println(docFields.getSourceAsMap()); } }