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相关推荐

  1. Spring Task定时任务的配置和使用详解

    spring中使用定时任务 1.基于xml配置文件使用定时任务 首先配置spring开启定时任务 <beans xmlns="http://www.springframework.or ...

  2. java spring bean配置文件_Spring基于xml文件配置Bean过程详解

    这篇文章主要介绍了spring基于xml文件配置Bean过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 通过全类名来配置: class:be ...

  3. 第十二章 Spring Cloud Config 统一配置中心详解

    目录 一.配置问题分析及解决方案 1.问题分析 2.解决方案 二.Spring Cloud Config 介绍 1.Spring Cloud Config特性 2.Spring Cloud Confi ...

  4. spring cloud config将配置存储在数据库中

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! Spring Cloud Config Server最常见是将配置文件放在本地或者远程Git仓库, ...

  5. spring cloud config将配置存储在数据库中 1

    转载请标明出处: https://blog.csdn.net/forezp/... 本文出自方志朋的博客 Spring Cloud Config Server最常见是将配置文件放在本地或者远程Git仓 ...

  6. Spring Cloud Config的配置中心获取不到最新配置信息的问题

    本篇源于Spring Cloud Config的一个问题,但这个问题并非所有人都会遇到.如果您遇到了,那必须得看看这篇,如果没有遇到您也应该看看,防患于未然! 问题描述 之前有朋友提出Spring C ...

  7. spring cloud Eureka 之配置信息

    转载来源:http://blog.51cto.com/881206524/2117014 spring cloud Eureka 之配置信息 Eureka instance 一个服务,如:订单系统,会 ...

  8. 微服务 分布式配置中心Apollo详解

    微服务 分布式配置中心Apollo详解 1. 配置中心概述 1.1 配置中心简介 1.2 配置中心特点 1.3 配置中心对比 2. Apollo概述 2.1 Apollo简介 2.2 Apollo特点 ...

  9. IDEA的安装、配置与使用详解

    IDEA的安装.配置与使用详解 目录结构 IDEA的安装.配置与使用详解 一.IDEA介绍 1. Jet Brains公司介绍 2. IDEA介绍 3. IDEA的主要功能介绍 4. IDEA的主要优 ...

最新文章

  1. 彻底理解Spring IOC和DI
  2. [导入]一再的变故,终于决定何去何从.
  3. Nodejs,Npm,React安装教程
  4. mysql 查询效率测试,mysql innode和myisam引擎查询性能比较测试
  5. c语言api文档_初学 C 语言没有项目练手?这 20 个小项目拿走不谢
  6. 国外程序员访谈:学无止境
  7. SQL Server:CASE WHEN OREN ELSE END =不支持OR
  8. LeetCode 392 判断子序列
  9. 【浙江大学PAT真题练习乙级】1003 我要通过!(20分) 真题解析
  10. 标准工时分析软件VIOOVI,适配现代化工业的人工智能软件
  11. matlab单服务排队模型,MATLAB模拟银行单服务台排队模型
  12. 图片飞出去的特效怎么做?3分钟AE制作教程
  13. java 分布式系统架构_什么是分布式系统!以及分布式系统架构的优缺点
  14. 【软件相关】LabView使用总结
  15. solidworks 2016 crack
  16. Java对AutoCad二次开发
  17. poj 1260 dp
  18. 非洲Affrike单词
  19. 常用软件密码破解完全指南[转]
  20. python 发送outlook邮件(html)格式需要避的坑

热门文章

  1. 手机支持linux,看看你的手机是否支持Ubuntu Touch?
  2. CSDN高校俱乐部招募啦,你还在等什么?
  3. c语言——PTA——计算存款利息
  4. Cocos2dx如何在visualStudio开发环境搭建及项目搭建,新手小白,请多多关照!!!
  5. 高逼格财务报表模板!无代码自动套用,免费教程来了
  6. 特殊人工智能英语教育
  7. linux云计算(linux系统)
  8. Java容器的常用组件
  9. 【乘风伯乐奖】寻找百位乘风者伯乐,邀请新博主入驻即可获奖
  10. element ui背景图_vue项目elementUi照片墙图片预览