文章目录

  • ElasticSearch 基本使用
    • 一、简介
    • 二、参考文档
    • 三、ES核心概念
      • 核心概念
      • 数据类型
    • 四、REST APIS
      • 索引API
      • 文档API
      • 查询文档API
    • 五、SQL REST API

ElasticSearch 基本使用

系统环境

ElasticSearch:elasticsearch:7.14.1

kibana:7.14.1

服务器:Ubuntu 16.04.6 LTS

一、简介

Elasticsearch 是一个分布式的、开源的搜索分析引擎,支持各种数据类型,包括文本、数字、地理、结构化、非结构化

Elastic Search基于lucene,封装了许多lucene底层功能,提供了分布式的服务、简单易用的restful API接口和许多语言的客户端

Elasticsearch 简称ES, 经常与Logstash 和Kibana 一起使用,江湖人称ELK.

  • 这E 自然指的就是Elasticsearch,简称ES, 具有分布式存储,搜索和分析的功能
  • L 指的就是Logstash,分布式日志收集框架
  • K 指的就是Kibana,可视化分析框架

二、参考文档

docker部署es

REST APIS 参考文档

Java REST Client 参考文档

三、ES核心概念

核心概念

  • 集群(Cluster):包含一个或多个启动着es实例的机器群。通常一台机器起一个es实例。默认集群名是“elasticsearch”,同一网络,同一集群名下的es实例会自动组成集群

  • 节点(Node):一个es实例即为一个节点

  • 索引(Index):即拥有相似文档的集合

  • 类型(Type):每个索引里都可以有一个或多个type,type是index中的一个逻辑数据分类,一个type下的document,都有相同的field。7.x版本正式被去除

  • 文档(Document):es中的最小数据单元。一个document就像数据库中的一条记录。通常以json格式显示。多个document存储于一个索引(Index)中

  • 映射(Mapping):定义索引中的字段的名称,定义字段的数据类型,比如字符串、数字、布尔

数据类型

  • 简单数据类型

    • 字符串:text:会分词,不支持聚合。keyword:不会分词,将全部内容作为一个词条,支持聚合
    • 数值
    • 布尔:boolean
    • 二进制:binary
    • 范围类型:integer_range, float_range, long_range, double_range, date_range
    • 日期:date
  • 复杂数据类型
    • 数组:[ ] Nested: nested (for arrays of JSON objects 数组类型的JSON对象)
    • 对象:{ } Object: object(for single JSON objects 单个JSON对象)

四、REST APIS

索引API

# 创建索引
PUT /my_index_000001# 添加映射
PUT /my_index_000001/_mapping
{"properties":{"name":{"type":"text"},"age":{"type":"integer"}}
}# 更新映射   更新映射也就是只添加字段
PUT /my_index_000001/_mapping
{"properties": {"name":{"type":"text"},"picture_url": {"type": "keyword","ignore_above": 500}}
}# 查询所有索引
GET _cat/indices# 查看一个索引
GET /my_index_000001# 删除索引
DELETE /my_index_000001# 创建索引并添加映射
PUT /my_index_000002
{"mappings": {"properties": {"name": {"type": "text"},"age": {"type": "integer"},"birthday":{"type": "date","format": "yyyy‐MM‐dd HH:mm:ss||yyyy‐MM‐dd"}}}
}# 创建多个索引,并添加映射
PUT /my_index_000002,my_index_000003
{"mappings": {"properties": {"name": {"type": "text"},"age": {"type": "integer"},"birthday":{"type": "date","format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"}}}
}

文档API

# 创建索引,并添加映射
# 下边的设置允许birthday字段存储年月日时分秒、年月日及毫秒三种格式
PUT /my_index_000005
{"mappings": {"properties": {"name": {"type": "text"},"age": {"type": "integer"},"birthday":{"type": "date","format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"}}}
}# 插入一条数据 这里的1是文档id,没有指定id自动生成id
POST /my_index_000005/_doc/1
{"name": "test1","age": 16,"birthday": "2015-01-01"
}
# 插入一条数据
POST /my_index_000005/_doc/2
{"name": "test1","age": 16,"birthday": "1420070400001"
}
# 插入一条数据
POST /my_index_000005/_doc/3
{"name": "test1","age": 16,"birthday": "2015-01-01 13:14:59"
}# 查询这个索引中的所有文档
GET /my_index_000005/_search
# 根据id查询文档
GET /my_index_000005/_doc/1# 删除文档
DELETE my_index_000005/_doc/1# 修改文档
PUT my_index_000005/_doc/2
{"name":"李四","age": 18,"birthday": "1420070400001"
}

查询文档API

query基本匹配查询关键字说明

关键字 说明
match_all 查询简单的 匹配所有文档。在没有指定查询方式时,它是默认的查询
match 用于全文搜索或者精确查询,如果在一个精确值的字段上使用它, 例如数字、日期、布尔或者一个 not_analyzed 字符串字段,那么它将会精确匹配给定的值
range 查询找出那些落在指定区间内的数字或者时间 gt 大于;gte 大于等于;lt 小于;lte 小于等于
term 被用于精确值 匹配
terms terms 查询和 term 查询一样,但它允许你指定多值进行匹配
exists 查找那些指定字段中有值的文档
missing 查找那些指定字段中无值的文档
must 多组合查询 必须匹配这些条件才能被包含进来
must_not 多组合查询 必须不匹配这些条件才能被包含进来
should 多组合查询 如果满足这些语句中的任意语句,将增加 _score ,否则,无任何影响。它们主要用于修正每个文档的相关性得分
filter 多组合查询 这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档

环境准备

# 创建索引
PUT xc_course
# 添加映射
PUT /xc_course/_mapping
{"properties": {"description": {"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart"},"name": {"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart"},"pic":{"type":"text","index":false},"price": {"type": "float"},"studymodel": {"type": "keyword"},"timestamp": {"type": "date","format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"}  }
}POST /xc_course/_doc/1
{"name": "Bootstrap开发",
"description": "Bootstrap是由Twitter推出的一个前台页面开发框架,是一个非常流行的开发框架,此框架集成了多种页面效果。此开发框架包含了大量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长页面开发的程序人员)轻松的实现一个不受浏览器限制的精美界面效果。",
"studymodel": "201002",
"price":38.6,
"timestamp":"2018-04-25 19:11:35",
"pic":"group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg"
}POST /xc_course/_doc/2
{"name": "java编程基础",
"description": "java语言是世界第一编程语言,在软件开发领域使用人数最多。",
"studymodel": "201001",
"price":68.6,
"timestamp":"2018-03-25 19:11:35",
"pic":"group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg"
}POST /xc_course/_doc/3
{"name": "spring开发基础",
"description": "spring 在java领域非常流行,java程序员都在用。",
"studymodel": "201001",
"price":88.6,
"timestamp":"2018-02-24 19:11:35",
"pic":"group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg"
}

只查询一条studymodel为201001的数据

POST /xc_course/_search
{"query": {"match": {"studymodel": "201001"}},"size": 1
}

只查询前20条studymodel为201001的数据并以price降序排列

POST /xc_course/_search
{"query": {"match": {"studymodel": "201001"}},"size": 20,"sort": [{"price": {"order": "desc"}}]
}

只查询前20条price大于50小于90的数据并以price降序排列

POST /xc_course/_search
{"query": {"range": {"price": {"gte": 50,"lte": 90}}},"size": 20,"sort": [{"price": {"order": "desc"}}]
}

只查询前20条timestamp为下面具体值的数据并以price降序排列

POST /xc_course/_search
{"query": {"terms": {"timestamp": ["2018-02-24 19:11:35","2018-03-25 19:11:35"]}},"size": 20,"sort": [{"price": {"order": "desc"}}]
}

五、SQL REST API

POST /_sql
{"query": """SELECT * FROM "xc_course" where studymodel = 201001 ORDER BY price DESC LIMIT 5"""
}POST /_sql
{"query": """SELECT * FROM "ks-logstash-log*"""","fetch_size":5
}

使用ES查询DSL进行过滤

POST /_sql
{"query": "SELECT * FROM xc_course ORDER BY price DESC","filter":{"range": {"price": {"gte": 50,"lte": 90}}},"fetch_size":5
}POST /_sql
{"query": "SELECT * FROM xc_course ORDER BY price DESC","filter":{"terms": {"studymodel": ["201001"]}},"fetch_size":5
}

异步运行sql搜索

POST /_sql
{"query": """SELECT * FROM "ks-logstash-log*"""","fetch_size":20,"wait_for_completion_timeout": "1s"
}
  • 值为is_partialtrue表示搜索结果不完整
  • is_runningtrue表示搜索仍在后台运行
  • 一个id用于搜索

ElasticSearch 基本使用相关推荐

  1. Elasticsearch学习之路(一)

    一.前序 1.1正向索引和倒排索引 ** 正向索引通常用于数据库中,在搜索引擎领域使用的最多的就是倒排索引 ** 通过例子表示: 我爱编程, 我爱编程,我是小码农 1.1.1 正向索引 假设我们使用m ...

  2. 2021年大数据ELK(二十五):添加Elasticsearch数据源

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 添加Elasticsearch数据源 一.Kibana索引模式 添加Elast ...

  3. 2021年大数据ELK(十九):使用FileBeat采集Kafka日志到Elasticsearch

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 使用FileBeat采集Kafka日志到Elasticsearch 一.需求分 ...

  4. 2021年大数据ELK(十七):Elasticsearch SQL 订单统计分析案例

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 订单统计分析案例 一.案例介绍 二.创建索引 三.导入测试数据 四.统计不同支 ...

  5. 2021年大数据ELK(十六):Elasticsearch SQL(职位查询案例)

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 职位查询案例 一.查询职位索引库中的一条数据 二.将SQL转换为DSL 三.职 ...

  6. 2021年大数据ELK(十五):Elasticsearch SQL简单介绍

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Elasticsearch SQL简单介绍 一.SQL与Elasticsear ...

  7. 2021年大数据ELK(十三):Elasticsearch编程(添加职位数据)

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Elasticsearch编程 一.添加职位数据 1.初始化客户端连接 2.实 ...

  8. 2021年大数据ELK(十二):Elasticsearch编程(环境准备)

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Elasticsearch编程 一.环境准备 1.准备IDEA项目结构 2.准 ...

  9. 2021年大数据ELK(十一):Elasticsearch架构原理

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Elasticsearch架构原理 一.Elasticsearch的节点类型 ...

  10. 2021年大数据ELK(八):Elasticsearch安装IK分词器插件

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 安装IK分词器 一.下载Elasticsearch IK分词器 ...

最新文章

  1. 首次使用计算机鼠标键盘不能用,解决方案:如何解决无法使用计算机鼠标和键盘的问题?如果启动后无法使用鼠标和键盘该怎么办?...
  2. java 并发_Java并发编程中断机制 so easy
  3. 生成三角网算法java,一种低效但逻辑简单清晰的Delaunay三角网生成算法
  4. 孙正义再造“阿里巴巴”
  5. bzoj 2957 楼房重建 分块
  6. FGUI手势案例代码
  7. android gps测速算法,GPS定位与测速算法研究
  8. GCC编译器原理(一)------GCC 工具:addr2line、ar、as、c++filt和elfedit
  9. 美国交通信号配时实践经验
  10. Ruby电子书教程、经典脚本合集
  11. java ireport 打印_ireport客户端打印
  12. Ps怎么快速抠图白色背景?教你两招轻松搞定!
  13. oracle mrp/rfs进程,挑战dataguard(3)——dataguard相关进程(RFS,LNSn,MRP,LSP)和参数配置...
  14. 无符号格式化输出的区别%d,%u?
  15. 【学习笔记--FMCW基础知识】
  16. 面试常问VueX是什么?
  17. 论文阅读:GMAN: A Graph Multi-Attention Network for Traffic Prediction
  18. java fock join 列子
  19. excel拆分合并技巧:将工作表合并成总表的方法
  20. 道路车辆 盲区监测(bsd)系统性能要求及试验方法_让你的爱车“多一双眼睛”——BSD盲点监测系统...

热门文章

  1. Scale up and Scale out
  2. jquery esay ui学习
  3. Python画图使用新罗马体
  4. 2000年趋势网络软件竞赛 (初赛题目)
  5. Redis学习笔记【04】 - 字符串
  6. 【文字版】面试大厂,面试官竟然出了一道初中数学题?
  7. css设置背景图片等比例铺满整个页面
  8. java this 多线程_Java多线程编程的常见陷阱
  9. 字符串算法 金策_GitHub - xjrjyy/shareOI: 算法竞赛课件分享
  10. photoclip 图片旋转_PhotoClip移动端、pc端上传头像裁剪