ElasticSearch + Kibana
Kibana 运维 ElasticSearch
与之对应的Java Api
基础使用
Insert
创建索引库, 并设定 分片数量 和 副本数量
// 格式: PUT /索引库名称
PUT /xinmeng
{"settings": {# 设定分片数量"number_of_shards": 3,# 设定副本数量"number_of_replicas": 3}
}
给指定的索引库创建映射
// 给指定索引库的映射树添加映射字段
PUT /xinmeng/_mapping
{"properties":{"color": {"type": "keyword"}}
}
Delete
删除指定的索引库(普通删除)
// 格式: DELETE /索引库名称
DELETE /xinmeng
Search
查看指定索引库的映射树
// 格式: GET /索引库名称/_mapping
GET /xinmeng/_mapping
Close / Open 索引库
// 格式: POST /索引库名称/_close
POST /xinmeng/_close
// 格式: POST /索引库名称/_close
POST /xinmeng/_open
文档相关操作
Insert
添加文档, 指定文档id
/* 新增索引库数据:
POST /索引库名称/文档名称
{"字段名称": "字段值","字段名称": "字段值","字段名称": 字段值(数字不需要双引号)
}
*/
// 若创建文档时, 不指定文档id, 则自动生成文档id, 以保证文档的唯一性
POST /xinmeng/_doc/7
{"name": "XinMeng","age": 11,"sex": "gril"
}
Search
查询指定索引库指定文档id数据
// 格式: GET /索引库名称/文档名称/文档id
GET /xinmeng/_doc/3
查询指定索引库所有数据(普通查询)
// 格式: GET /索引库名称/_search
GET /xinmeng/_search
条件查询
/* 格式
GET /索引库名/_search
{"query":{"查询类型":{"查询条件":"查询条件值"}}
}
*/
Update
修改指定文档id的字段值
// ElasticSearch 对于修改字段值, 是以覆盖方式修改, 不可以单独修改某一字段的值
POST /xinmeng/_doc/7
{"name": "MengXin","age": 9,"sex": "gril"
}
Delete
// 格式: DELETE /索引库名称/文档名称/文档id
DELETE /xinmeng/_doc/3
Create Maping
创建指定的索引, 并创建映射树
// 创建hotel索引库, 并创建映射树
PUT /hotel
{"mappings": {"properties": {"id": {"type": "keyword"},"name": {"type": "text","analyzer": "ik_max_word","copy_to": "all"},"address": {"type": "text","analyzer": "ik_max_word"},"price": {"type": "integer"},"score": {"type": "integer"},"brand": {"type": "text","analyzer": "ik_max_word","copy_to": "all"},"city": {"type": "keyword"},"starName": {"type": "keyword"},"business": {"type": "keyword","copy_to": "all"},"location": {"type": "geo_point"},"pic": {"type": "keyword","index": false}, "isAD": {"type": "boolean"},"all": {"type": "text","analyzer": "ik_max_word"}}}
}
条件检索
全文检索
查询全部
GET /hotel/_search
{"query": {"match_all": {}},"size": 1000
}
单字段查询
GET /hotel/_search
{"query": {"match": {"name": "如家"}},"size": 1000
}
多字段查询
GET /hotel/_search
{"query": {"multi_match": {"query": "如家","fields": ["name", "brand"]}},"size": 1000
}
精准查询 (不会对查询条件分词)
Term (精确值查询)
GET /hotel/_search
{"query": {"term": {"name": {"value": "如家"}}}
}
Range (范围查询)
// gte: 大于等于
// lte: 小于等于
GET /hotel/_search
{"query": {"range": {"price": {"gte": 99,"lte": 399}}}
}
地理位置查询
圆形
GET /hotel/_search
{"query": {"geo_distance": {"location": "31.21, 121.5","distance": "15km"}}
}
矩形
GET /hotel/_search
{"query": {"geo_bounding_box": {"location": {"top_left":{"lat": "31.1","lon": "121.5"},"bottom_right": {"lat": "30.9","lon": "121.7"}}}}
}
组合条件查询
查询全国的酒店名称为七天 或 上海的所有酒店, 价格范围大于等于99, 小于等于199, 而且查询的地址位置是31,21, 121.5, 范围半径20km
GET /hotel/_search
{"query": {"bool": {"must_not": [{"term": {"name": {"value": "七天"}}}],"must": [{"range": {"price": {"gte": 99,"lte": 199}}}],"filter": {"geo_distance": {"distance": "20km","location": {"lat": 31.21,"lon": 121.5}}},"should": [{"term": {"city": {"value": "上海"}}}]}}
}
- must:必须匹配每个子查询,类似“与” (and),must的条件参与算法的
- should:选择性匹配子查询,类似“或”(or)
- must_not:必须不匹配,不参与算分,类似“非” (not)
- filter:效果和must一样的,都是and。必须匹配,filter的条件不参与算分
搜索时,参与打分的字段越多,查询的性能也越差。因此这种多条件查询时,建议:
- 搜索框的关键字搜索,是全文检索查询,使用must查询,参与算分
- 其它过滤条件,采用filter查询。不参与算分
算分查询
需求: 查询如家酒店, 对于深圳的如家进行+10分
GET /hotel/_search
{"query": {"function_score": {"query": {"match": {"all": "如家"}},"functions": [{"filter": {"term": {"city": "深圳"}},"weight": 10}],"boost_mode": "sum"}},"size": 30
}
function score 查询中包含四部分内容:
- 原始查询条件:query部分,基于这个条件搜索文档,并且基于BM25算法给文档打分,原始算分(query score)
- 过滤条件:filter部分,符合该条件的文档才会重新算分
- 算分函数:符合filter条件的文档要根据这个函数做运算,得到的函数算分(function score),有四种函数
- weight:函数结果是常量
- field_value_factor:以文档中的某个字段值作为函数结果
- random_score:以随机数作为函数结果
- script_score:自定义算分函数算法
- 运算模式:算分函数的结果、原始查询的相关性算分,两者之间的运算方式,包括:
- multiply:相乘
- replace:用function score替换query score
- 其它,例如:sum、avg、max、min
排序查询
查找离设定经纬度坐标最近的如家酒店
GET /hotel/_search
{"query": {"match": {"all": "如家"}},"sort": [{"_geo_distance": {"location": "39.76,116.33","order": "asc","unit": "km"}}],"from": 0,"size": 7
}# 或
GET /hotel/_search
{"query": {"match": {"all": "如家"}},"sort": [{"_geo_distance": {"location": {"lat": 39.76,"lon": 116.33},"order": "asc","unit": "km"}}]
}
高亮显示
查询如家酒店, 并高亮显示为粉色
GET /hotel/_search
{"query": {"match": {"all": "如家"}},"highlight": {"fields": {"name": {"require_field_match": "false"}},"pre_tags": "<font color='pink'>","post_tags": "</font>"}
}
聚合查询
Bucket (桶聚合)
聚合查询: 桶聚合, 查询全国每个城市的酒店数量
GET /hotel/_search
{"size": 0,"aggs": {"cityAgg": {"terms": {"field": "city","order": {"_count": "asc"}, "size": 7}}}
}
查询上海的酒店,按照酒店品牌统计每一个品牌的酒店数量。 比如: 如家酒店
GET /hotel/_search
{"query": {"term": {"city": {"value": "上海"}}},"size": 0,"aggs": {"brandAggs": {"terms": {"field": "brand","size": 100,"order": {"_count": "asc"}}}}
}
度量聚合
统计每个品牌酒店的用户评分的min、max、avg等值
# 需求:统计酒店的用户评分的平均分GET hotel/_search
{"size": 0,"aggs": {"avgAggs": {"avg": {"field": "score"}}}
}
酒店的最高分
GET hotel/_search
{"size": 0,"aggs": {"maxAggs": {"max": {"field": "score"}}}
}
酒店的最高分
GET hotel/_search
{"size": 0,"aggs": {"minAggs": {"min": {"field": "score"}}}
}
stats 求出最大值、最小值、平均值…
GET hotel/_search
{"size": 0,"aggs": {"statsAggs": {"stats": {"field": "score"}}}
}
在聚合的之前加入限制条件 query
统计北京的酒店的品牌多少家?(限制条件用在桶聚合)
GET hotel/_search
{"query": {"term": {"city": {"value": "北京"}}},"size": 0, "aggs": {"brandAgg": {"terms": {"field": "brand","size": 30}}}
}
统计上海的酒店的用户评分的平均分?(限制条件用在度量聚合)
GET hotel/_search
{"query": {"term": {"city": {"value": "上海"}}},"size": 0,"aggs": {"scoreAvg": {"avg": {"field": "score"}}}
}
管道聚合(pipline聚合)一个聚合的结果作为另一个聚合的条件
需求:统计上海的酒店的每个品牌的平均分?
- 默认排序(根据第一个聚合的总数倒序显示)
GET hotel/_search
{"query": {"term": {"city": {"value": "上海"}}},"size": 0,"aggs": {"brandAggs": {"terms": {"field": "brand","size": 100,"order": {"avgAggs": "desc"}},"aggs": {"avgAggs": {"avg": {"field": "score"}}}}}
}
自动补全查询
GET hotel/_search
{"suggest": {"hotelSuggestion": {"text": "北", // 查询内容"completion":{"field":"suggestion", //自动补全字段, 对应JavaBean中定义的自动补全属性"skip_duplicates":true,"size":10}}}
}
自定义分词器
// analyzer: 默认情况下,构建和搜索索引库时都使用该分词器,但如果存在search_analyzer属性后,只在构建时使用
// search_analyzer:只用在搜索索引库时
PUT /test
{"settings": {"analysis": {"analyzer": { "my_analyzer": { "tokenizer": "ik_smart","filter": "py"}},"filter": {"py": { "type": "pinyin","keep_full_pinyin": false,"keep_joined_full_pinyin": true,"keep_original": true,"limit_first_letter_length": 16,"remove_duplicated_term": true,"none_chinese_pinyin_tokenize": false}}}},"mappings": {"properties": {"name":{"type": "text","analyzer": "my_analyzer","search_analyzer": "ik_max_word"}}}
}
自定义分词器官方地址(GitHub)
- 可选参数
– keep_first_letter启用此选项时,默认值:true, 例如:> 刘德华ldh
– keep_separate_first_letter启用此选项时,将分别保留首字母,默认值:false
– limit_first_letter_length设置first_letter结果的最大长度,默认值:16
– keep_full_pinyin当启用此选项时,例如:> [,,],默认值:true刘德华liudehua
– keep_joined_full_pinyin当启用此选项时,例如:> [],默认值:false刘德华liudehua
– keep_none_chinese在结果中保留非中文字母或数字,默认值:true
– keep_none_chinese_together将非中文字母放在一起,默认值:true
– keep_none_chinese_in_first_letter在第一个字母中保留非中文字母
– keep_none_chinese_in_joined_full_pinyin将非中文字母保留在连接的完整拼音中
– none_chinese_pinyin_tokenize如果非中文字母是拼音,则将其拆分为单独的拼音术语,默认值:true
– keep_original启用此选项时,也会保留原始输入,默认值:false, 使用此属性时, 因该设置为true, 要保留原始值
– lowercase小写非中文字母,默认值:true
– trim_whitespace默认值:true
– remove_duplicated_term启用此选项时,将删除重复的术语以保存索引,默认值:false
– ignore_pinyin_offset6.0之后,偏移量受到严格约束,不允许重叠标记,使用此参数,重叠标记将允许忽略偏移量,请注意,所有与位置相关的查询或突出显示都会变得不正确,您应该使用多个字段并指定不同的设置,用于不同的查询目的。如果您需要偏移量,请将其设置为 false。默认值:true。
整合示例
DSL
PUT /hotel
{"settings": {"analysis": {"analyzer": {"text_anlyzer": {"tokenizer": "ik_max_word","filter": "py"}},"filter": {"py": {"type": "pinyin","keep_full_pinyin": false,"keep_joined_full_pinyin": true,"keep_original": true,"limit_first_letter_length": 16,"remove_duplicated_term": true,"none_chinese_pinyin_tokenize": false}}}},"mappings": {"properties": {"id":{"type": "keyword"},"name":{"type": "text","analyzer": "text_anlyzer","search_analyzer": "ik_max_word","copy_to": "all"},"address":{"type": "keyword","index": false},"price":{"type": "integer"},"score":{"type": "integer"},"brand":{"type": "keyword","copy_to": "all"},"city":{"type": "keyword"},"starName":{"type": "keyword"},"business":{"type": "keyword","copy_to": "all"},"location":{"type": "geo_point"},"pic":{"type": "keyword","index": false},"all":{"type": "text","analyzer": "text_anlyzer","search_analyzer": "ik_max_word"},"suggestion":{"type": "completion","analyzer": "text_anlyzer","search_analyzer": "ik_max_word"}}}
}
Java Bean
@Data
@NoArgsConstructor
public class HotelDoc {private Long id;private String name;private String address;private Integer price;private Integer score;private String brand;private String city;private String starName;private String business;private String pic;private String all;private String location;private Boolean isAD;private Object distance;//距离值private List<String> suggestion;//用于自动补全字段public HotelDoc(Hotel hotel) {this.id = hotel.getId();this.name = hotel.getName();this.address = hotel.getAddress();this.price = hotel.getPrice();this.score = hotel.getScore();this.brand = hotel.getBrand();this.city = hotel.getCity();this.starName = hotel.getStarName();this.business = hotel.getBusiness();this.pic = hotel.getPic();this.isAD = hotel.getIsAD();this.location = hotel.getLatitude() + ", " + hotel.getLongitude();//填充suggestion字段: brand city businesssuggestion = new ArrayList<>();suggestion.add(hotel.getBrand());suggestion.add(hotel.getCity());suggestion.add(hotel.getBusiness());}
}
ElasticSearch + Kibana相关推荐
- Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统
Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统 原文:Elasticsearch,Kibana,Logstash,NLog实现ASP. ...
- Logstash+Redis+Elasticsearch+Kibana+Nginx搭建日志分析系统
为什么80%的码农都做不了架构师?>>> 前言: 随着实时分析技术的发展及成本的降低,用户已经不仅仅满足于离线分析.目前我们服务的用户包括微博.微盘.云存储.弹性计算平台等十多 ...
- 安装logstash,elasticsearch,kibana三件套
原文地址:http://www.cnblogs.com/yjf512/p/4194012.html logstash,elasticsearch,kibana三件套 elk是指logstash,ela ...
- Helm部署ElasticSearch Kibana 7 集群
一.简介 Elasticsearch 是一个分布式的搜索和分析引擎,可以用于全文检索.结构化检索和分析,并能将这三者结合起来.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便,轻松扩 ...
- 【Linux环境部署】最新版 elasticsearch + kibana(7.15.0)安装、配置、启动(多个问题处理 + kibana仪表盘使用)
本文的安装文件是 2021.09.23 最新发布的[elasticsearch-7.15.0-linux-x86_64.tar.gz]和[kibana-7.15.0-linux-x86_64.tar. ...
- ELK学习3_使用redis+logstash+elasticsearch+kibana快速搭建日志平台
日志的分析和监控在系统开发中占非常重要的地位,系统越复杂,日志的分析和监控就越重要,常见的需求有: 根据关键字查询日志详情 监控系统的运行状况 统计分析,比如接口的调用次数.执行时间.成功率等 异常数 ...
- 【最新】docker 安装elasticsearch + kibana步骤【第二篇_kibana】
本文主要讲解Docker 安装 kibana并设置中文语言 [如果有需要安装elasticsearch 的朋友请移步博主第一篇文章] 话不多说! 第一步:docker 下载kibana docker ...
- 企业日志分析ELK(Logstash+Elasticsearch+Kibana)介绍及搭建
目录 一.ELK概述 1.ELK日志分析系统 2.ELK中日志处理步骤 二.Elasticsearch介绍 1.Elasticsearch的基础核心概念 2.分片和副本 三.LogStash概述 1. ...
- Logging with ElasticSearch, Kibana, ASP.NET Core and Docker
" 好久不见,前两周经历了人生第一次"伪牛市",基金和股市大起大落,更加坚信"你永远赚不到超出你认知范围之外的钱,除非靠着运气",老韭菜诚不欺我也. ...
- 【Elasticsearch】基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化
1.概述 转载:基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化 1.需求 有一批特定用途(文末揭晓)的 IP 地址. 想通过地图形式可视化展示 IP 地址对应的经纬 ...
最新文章
- 【原创】Github团队协作之Pull请求
- 如何同时安装Office2003和Office2007!
- 每日一题(32)—— 联合体大小
- cloudstack java api_CloudStack API编程指引
- (笔试题)滑动窗口的最大值
- ios sdk 穿山甲_GitHub - ArthurKnight/flutter_ad_pangolin_plugin: iOS flutter 穿山甲插件
- 10分钟搞懂商业模式画布:9张分析图、6张模板
- 信息论与编码冯桂周林著答案_信息论与编码技术+(冯桂+林其伟+陈东华+著)+清华大学出版社+课后答案.pdf...
- 无人驾驶全家桶:机场“人货场”的改造之路
- C++实现各种进制转换
- java拷贝远程服务器上文件,java拷贝远程服务器上文件
- 想学游戏建模要从哪里开始?,外包私活怎么接?
- Vue导出页面为pdf
- IDEA误删文件恢复
- 煤炭价格预测:基于matlab的时间序列分析(主要流程+完整代码)
- 教师职称评定论文发表【新规定】老师必看
- JDK安装后 没有tools.jar 和dt.jar包的解决办法
- 2021年全国职业院校技能大赛网络搭建与应用赛项——国赛组播题
- 系统优化软件 AVG PC Tuneup 2011 多国语言(含中文)版 + 有效激活密钥
- 跑步app保活_android APP保活机制