Spring cloud使用ELK配置与使用详解之elasticsearch
elasticsearch作为搜索引擎,用处之一就是快速处理日志查
一、简介
集群(Cluster):所有数据提供存储和检索的集合(服务器集合),根据明细来指定要加入哪个集群,默认“elasticsearch”
结点(Node):提供存储和检索的一台服务器
索引(Index):类似于数据库,是相关文档存储的地方。“建立一个文档”,“索引一个文档”表示把一个文档存储在某个索引中
类型(Type):文档的逻辑分类,类似于数据库的表
文档(Document):一条完整的记录,相当于数据库表中的一条记录
域(Fields):相当于表中的一个column
二、Logstash输出到Elasticsearch
output{ elasticsearch { hosts => ["192.168.12.122:9200"] index => "share_app_logs_index_%{+YYYY.MM.dd}"}
}
action = >"index",是一个文档建立的索引,删除创建等都根据该id进行处理
三、elasticsearch在java中的应用
1. TransportClient是java封装的对象,通过transport模块远程连接到elasticsearch集群,向集群节点发送请求
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>transport</artifactId><version>6.4.1</version>
</dependency>
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.11.1</version>
</dependency>
// on startup
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY) // @1.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.10"), 9300)) // @2.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.11"), 9300)); // on shutdownclient.close();
2. Java Rest Client详解
java Low Level REST Client:elasticsearch client 低级别客户端。它允许通过http请求与Elasticsearch集群进行通信。API本身不负责数据的编码解码,由用户去编码解码。它与所有的ElasticSearch版本兼容
Java High Level REST Client:Elasticsearch client官方高级客户端。基于低级客户端,它定义的API,已经对请求与响应数据包进行编码解码
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId><version>6.4.0</version>
</dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>6.4.0</version><type>pom</type>
</dependency>
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http"),new HttpHost("localhost", 9201, "http")));// close
client.close();
获取到client后就相当于 redis一样,可以put进去数据 也可以get到对应的数据
保存
Map<String, Object> source = new HashMap<String, Object>();
source.put("code", "11");
source.put("name", "yiyang");
source.put("info", "重组");
source.put("content", "是否可以成功);
source.put("my_title", "我的标题");
source.put("you_title", "你的标题");
source.put("isDelete", true);client.prepareIndex("index", "my_type").setId("1").setSource(source).get();
查询
GetResponse res = client.prepareGet("index", "my_type", "1").get();
res.getSource().get("content");
检索
QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("yiyang", "name", "content");
SearchResponse res = client.prepareSearch().setIndices("index").setTypes("my_type").setQuery(queryBuilder).get();res.getHits().getTotalHits(); //获取检索到文本个数
res.getHits().getAt(i).getSource().get("content"));获取其中一个的内容,可以遍历得到
public class QueryBuilderTest extends AbstractJunitTest {private static final String INDEX2 = "index";private static final String TYPE2 = "my_type";public String text = "yiyang";/*** 单个精确值查找(termQuery)*/@Testpublic void termQuery() {QueryBuilder queryBuilder = QueryBuilders.termQuery("code", "01");queryBuilder = QueryBuilders.termQuery("isDelete", true);queryBuilder = QueryBuilders.termQuery("my_title", "我的标题12323abcd");searchFunction(queryBuilder);}/*** 多个值精确查找(termsQuery)* * 一个查询相匹配的多个value*/@Testpublic void termsQuery() {QueryBuilder queryBuilder = QueryBuilders.termsQuery("code", "01", "03", "04");searchFunction(queryBuilder);}/*** 查询相匹配的文档在一个范围(rangeQuery)*/@Testpublic void rangeQuery() {QueryBuilder queryBuilder = QueryBuilders.rangeQuery("code") // 查询code字段.from("02").to("04").includeLower(true) // 包括下界.includeUpper(false);// 不包括上界searchFunction(queryBuilder);}/*** 查询相匹配的文档在一个范围(prefixQuery)*/@Testpublic void prefixQuery() {QueryBuilder queryBuilder = QueryBuilders.prefixQuery("my_title", "我的");searchFunction(queryBuilder);}/*** 通配符检索(wildcardQuery)* * 值使用用通配符,常用于模糊查询* * 匹配具有匹配通配符表达式( (not analyzed )的字段的文档。 支持的通配符: * *,它匹配任何字符序列(包括空字符序列)* ?,它匹配任何单个字符。* * 请注意,此查询可能很慢,因为它需要遍历多个术语。 为了防止非常慢的通配符查询,通配符不能以任何一个通配符*或?开头。*/@Testpublic void wildcardQuery() {QueryBuilder queryBuilder = QueryBuilders.wildcardQuery("my_title", "*6789*");queryBuilder = QueryBuilders.wildcardQuery("my_title", "*345");queryBuilder = QueryBuilders.wildcardQuery("name", "?闻");searchFunction(queryBuilder);}/*** 正则表达式检索(regexpQuery) 不需要^、$*/@Testpublic void regexpQuery() {QueryBuilder queryBuilder = QueryBuilders.regexpQuery("my_title", "我的.+f");searchFunction(queryBuilder);}/*** 使用模糊查询匹配文档查询(fuzzyQuery)*/@Testpublic void fuzzyQuery() {QueryBuilder queryBuilder = QueryBuilders.fuzzyQuery("name", "科技");searchFunction(queryBuilder);}/*** 类型检索(typeQuery)* * 查询该类型下的所有数据*/@Testpublic void typeQuery() {QueryBuilder queryBuilder = QueryBuilders.typeQuery(TYPE2);searchFunction(queryBuilder);}/*** Ids检索, 返回指定id的全部信息 (idsQuery)* * 在idsQuery(type)方法中,也可以指定具体的类型*/@Testpublic void idsQuery() {QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "4", "10");searchFunction(queryBuilder);}/************************************************************ 全文检索 ************************************************************//*** 单个匹配 (matchQuery)* * 感觉跟termQuery效果一样*/@Testpublic void matchQuery() {QueryBuilder queryBuilder = QueryBuilders.matchQuery("name", "科技");searchFunction(queryBuilder);}/*** 查询匹配所有文件 (matchAllQuery)*/@Testpublic void matchAllQuery() {QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();searchFunction(queryBuilder);}/*** 匹配多个字段, field可以使用通配符(multiMatchQuery)*/@Testpublic void multiMatchQuery() {QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("132445dfgdfg", "my_title", "name", "you_title");queryBuilder = QueryBuilders.multiMatchQuery("132445dfgdfg", "*title"); //字段使用通配符searchFunction(queryBuilder);}/*** 字符串检索(queryString)* * 一个使用查询解析器解析其内容的查询。* query_string查询提供了以简明的简写语法执行多匹配查询 multi_match queries ,布尔查询 bool queries ,提升得分 boosting ,模糊* 匹配 fuzzy matching ,通配符 wildcards ,正则表达式 regexp 和范围查询 range queries 的方式。* * 支持参数达10几种*/@Testpublic void queryString() {QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("*技术"); //通配符查询
// QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("我的.+f");searchFunction(queryBuilder);}/*** must 相当于and,就是都满足 * should 相当于or,满足一个或多个 * must_not 都不满足*/@Testpublic void testQueryBuilder2() {// "科技视频"分词的结果是"科技", "视频", "频"BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();// queryBuilder.must(QueryBuilders.wildcardQuery("name", "*科技*"));// queryBuilder.must(QueryBuilders.wildcardQuery("info", "*共*"));// queryBuilder.must(QueryBuilders.wildcardQuery("content", "*美丽*"));queryBuilder.should(QueryBuilders.wildcardQuery("name", "*科技*"));queryBuilder.should(QueryBuilders.wildcardQuery("info", "*共*"));queryBuilder.should(QueryBuilders.wildcardQuery("content", "*美丽*"));queryBuilder.minimumShouldMatch(2); // 最少匹配数// queryBuilder.mustNot(QueryBuilders.wildcardQuery("name", "*科技*"));// queryBuilder.mustNot(QueryBuilders.wildcardQuery("info", "*共*"));// queryBuilder.mustNot(QueryBuilders.wildcardQuery("content", "*美丽*"));searchFunction(queryBuilder);}/*** 查询遍历抽取* * 查询结果是根据分值排序(从大到小)* * @param queryBuilder*/private void searchFunction(QueryBuilder queryBuilder) {SearchRequestBuilder requestBuilder = client.prepareSearch().setIndices(INDEX2).setTypes(TYPE2).setScroll(new TimeValue(60000)).setQuery(queryBuilder);SearchResponse response = requestBuilder.setFrom(0).setSize(100).execute().actionGet();System.out.println("--------------查询结果:----------------------");for (SearchHit hit : response.getHits()) {System.out.println("分值:" + hit.getScore()); // 相关度Map<String, Object> map = hit.getSource();for (String sKey : map.keySet()) {System.out.println(sKey + ": " + map.get(sKey));}System.out.println("--------------");}System.out.println("-----------------------------------");}}
Spring cloud使用ELK配置与使用详解之elasticsearch相关推荐
- Spring Task定时任务的配置和使用详解
spring中使用定时任务 1.基于xml配置文件使用定时任务 首先配置spring开启定时任务 <beans xmlns="http://www.springframework.or ...
- java spring bean配置文件_Spring基于xml文件配置Bean过程详解
这篇文章主要介绍了spring基于xml文件配置Bean过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 通过全类名来配置: class:be ...
- 第十二章 Spring Cloud Config 统一配置中心详解
目录 一.配置问题分析及解决方案 1.问题分析 2.解决方案 二.Spring Cloud Config 介绍 1.Spring Cloud Config特性 2.Spring Cloud Confi ...
- spring cloud config将配置存储在数据库中
点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! Spring Cloud Config Server最常见是将配置文件放在本地或者远程Git仓库, ...
- spring cloud config将配置存储在数据库中 1
转载请标明出处: https://blog.csdn.net/forezp/... 本文出自方志朋的博客 Spring Cloud Config Server最常见是将配置文件放在本地或者远程Git仓 ...
- Spring Cloud Config的配置中心获取不到最新配置信息的问题
本篇源于Spring Cloud Config的一个问题,但这个问题并非所有人都会遇到.如果您遇到了,那必须得看看这篇,如果没有遇到您也应该看看,防患于未然! 问题描述 之前有朋友提出Spring C ...
- spring cloud Eureka 之配置信息
转载来源:http://blog.51cto.com/881206524/2117014 spring cloud Eureka 之配置信息 Eureka instance 一个服务,如:订单系统,会 ...
- 微服务 分布式配置中心Apollo详解
微服务 分布式配置中心Apollo详解 1. 配置中心概述 1.1 配置中心简介 1.2 配置中心特点 1.3 配置中心对比 2. Apollo概述 2.1 Apollo简介 2.2 Apollo特点 ...
- IDEA的安装、配置与使用详解
IDEA的安装.配置与使用详解 目录结构 IDEA的安装.配置与使用详解 一.IDEA介绍 1. Jet Brains公司介绍 2. IDEA介绍 3. IDEA的主要功能介绍 4. IDEA的主要优 ...
最新文章
- 彻底理解Spring IOC和DI
- [导入]一再的变故,终于决定何去何从.
- Nodejs,Npm,React安装教程
- mysql 查询效率测试,mysql innode和myisam引擎查询性能比较测试
- c语言api文档_初学 C 语言没有项目练手?这 20 个小项目拿走不谢
- 国外程序员访谈:学无止境
- SQL Server:CASE WHEN OREN ELSE END =不支持OR
- LeetCode 392 判断子序列
- 【浙江大学PAT真题练习乙级】1003 我要通过!(20分) 真题解析
- 标准工时分析软件VIOOVI,适配现代化工业的人工智能软件
- matlab单服务排队模型,MATLAB模拟银行单服务台排队模型
- 图片飞出去的特效怎么做?3分钟AE制作教程
- java 分布式系统架构_什么是分布式系统!以及分布式系统架构的优缺点
- 【软件相关】LabView使用总结
- solidworks 2016 crack
- Java对AutoCad二次开发
- poj 1260 dp
- 非洲Affrike单词
- 常用软件密码破解完全指南[转]
- python 发送outlook邮件(html)格式需要避的坑