ES数据库入门(elasticsearch上手指南)-2021.3.26
ES数据库
文章目录
- ES数据库
- 一、入门
- 1.索引
- 2.搜索
- - 检索文档(id匹配)
- - 轻量搜索(Query-string 搜索)
- - 使用查询表达式搜索
- - 更复杂的搜索(添加过滤)
- - 全文搜索
- - 短语搜索
- - 高亮搜索
- - 分析(聚合功能aggregation)
一、入门
1.索引
索引:名词时,类似于传统数据库中的数据库概念;
动词类似于插入这一概念。
eg:
对于员工目录,我们将做如下操作:
- 每个员工索引一个文档,文档包含该员工的所有信息。
- 每个文档都将是
employee
类型 。 - 该类型位于 索引
megacorp
内。 - 该索引保存在我们的 Elasticsearch 集群中。
操作如下:
PUT /megacorp/employee/1 -- 这里包含了索引名称、类型名词、特定雇员id
{"first_name" : "John","last_name" : "Smith","age" : 25,"about" : "I love to go rock climbing","interests": [ "sports", "music" ]
} -- 这里为具体内容
注意,路径 /megacorp/employee/1
包含了三部分的信息:
megacorp
索引名称
employee
类型名称
1
特定雇员的ID
请求体 —— JSON 文档 —— 包含了这位员工的所有详细信息,他的名字叫 John Smith ,今年 25 岁,喜欢攀岩。
2.搜索
- 检索文档(id匹配)
执行 一个 HTTP GET
请求并指定文档的地址——索引库、类型和ID。 使用这三个信息可以返回原始的 JSON 文档
GET /megacorp/employee/1
返回结果包含了文档的一些元数据,以及 _source
属性,内容是 John Smith 雇员的原始 JSON 文档:
{"_index" : "megacorp","_type" : "employee","_id" : "1","_version" : 1,"found" : true,"_source" : { "first_name" : "John","last_name" : "Smith","age" : 25,"about" : "I love to go rock climbing","interests": [ "sports", "music" ]}
}
_source里面是原json文档
将 HTTP 命令由 PUT
改为 GET
可以用来检索文档,同样的,可以使用 DELETE
命令来删除文档,以及使用 HEAD
指令来检查文档是否存在。如果想更新已存在的文档,只需再次 PUT
。
- 轻量搜索(Query-string 搜索)
a.查询所有雇员信息(返回结果包括了所有三个文档,放在数组 hits
中。一个搜索默认返回十条结果。)
GET /megacorp/employee/_search
b.带初步的筛选
GET /megacorp/employee/_search?q=last_name:Smith
仍然在请求路径中使用 _search
端点,并将查询本身赋值给参数 q=
。返回结果给出了所有的 Smith:
- 使用查询表达式搜索
领域特定语言 (DSL), 使用 JSON 构造了一个请求。我们可以像这样重写之前的查询所有名为 Smith 的搜索 :
GET /megacorp/employee/_search
{"query" : {"match" : {"last_name" : "Smith"}}
}
请求使用 JSON 构造,并使用了一个 match
查询(属于查询类型之一,后面将继续介绍)。
- 更复杂的搜索(添加过滤)
同样搜索姓氏为 Smith 的员工,但这次我们只需要年龄大于 30 的。查询需要稍作调整,使用过滤器 filter ,它支持高效地执行一个结构化查询。
GET /megacorp/employee/_search
{"query" : {"bool": {"must": {"match" : {"last_name" : "smith" }},"filter": {"range" : {"age" : { "gt" : 30 } }}}}
}
a. 这部分与我们之前使用的 match
查询 一样。
b. 这部分是一个 range
过滤器 , 它能找到年龄大于 30 的文档,其中 gt
表示_大于_(great than)。
现在结果只返回了一名员工,叫 Jane Smith,32 岁。
- 全文搜索
全文搜索,搜索下所有喜欢攀岩(rock climbing)的员工
GET /megacorp/employee/_search
{"query" : {"match" : {"about" : "rock climbing"}}
}
使用match
查询在about
属性上搜索 “rock climbing” 。
这是一个很好的案例,阐明了 Elasticsearch 如何 在 全文属性上搜索并返回相关性最强的结果。Elasticsearch中的 相关性 概念非常重要,也是完全区别于传统关系型数据库的一个概念,数据库中的一条记录要么匹配要么不匹配。
- 短语搜索
想要精确匹配一系列单词或者_短语_ ,以短语 “rock climbing” 的形式进行匹配。
GET /megacorp/employee/_search
{"query" : {"match_phrase" : {"about" : "rock climbing"}}
}
毫无悬念,返回结果仅有 John Smith 的文档。
- 高亮搜索
在每个搜索结果中 高亮 部分文本片段,以便让用户知道为何该文档符合查询条件。在 Elasticsearch 中检索出高亮片段也很容易。
再次执行前面的查询,并增加一个新的 highlight
参数:
GET /megacorp/employee/_search
{"query" : {"match_phrase" : {"about" : "rock climbing"}},"highlight": {"fields" : {"about" : {}}}
}
当执行该查询时,返回结果与之前一样,与此同时结果中还多了一个叫做 highlight
的部分。这个部分包含了 about
属性匹配的文本片段,并以 HTML 标签 <em></em>
封装:
- 分析(聚合功能aggregation)
聚合与 SQL 中的 GROUP BY
类似但更强大。
挖掘出员工中最受欢迎的兴趣爱好:
GET /megacorp/employee/_search
{"aggs": {"all_interests": {"terms": { "field": "interests" }}}
}
返回
两位员工对音乐感兴趣,一位对林业感兴趣,一位对运动感兴趣。
叫 Smith 的员工中最受欢迎的兴趣爱好,可以直接构造一个组合查询:
GET /megacorp/employee/_search
{"query": {"match": {"last_name": "smith"}},"aggs": {"all_interests": {"terms": {"field": "interests"}}}
}
聚合还支持分级汇总 。比如,查询特定兴趣爱好员工的平均年龄:
GET /megacorp/employee/_search
{"aggs" : {"all_interests" : {"terms" : { "field" : "interests" },"aggs" : {"avg_age" : {"avg" : { "field" : "age" }}}}}
}
参考:
参考文档1
ES数据库入门(elasticsearch上手指南)-2021.3.26相关推荐
- linux es数据库 head,elasticsearch安装es-sql插件
说明:本示例是在CentOs Linux7.4上运行,安装的es版本为6.8.0,对应es-sql版本6.8.0,es-head版本5.0.0,需要安装JDK 下载es安装包 wget https:/ ...
- python连接es数据库_Python Elasticsearch API操作ES集群
环境Centos 7.4 Python 2.7 Pip 2.7 MySQL-python 1.2.5 Elasticsearc 6.3.1 Elasitcsearch6.3.2 知识点调用Python ...
- linux es数据库 head,Elasticsearch 5.3.x 使用 Head 插件
0.前言 时光荏苒,ES转眼间就从2.X跳到了5.X... 忆往昔峥嵘岁月,奈何ES社区太活跃,版本跳的比房价还快啊... 话说回来,需要部署一套Elasticsearch 5.2.1 即本月最新推出 ...
- Elasticsearch(ES)入门,这一篇就够了
实时搜索引擎Elasticsearch Elasticsearch(简称ES)是一个基于Apache Lucene(TM)的开源搜索引擎,无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进 ...
- 搜索引擎之ElasticSearch(es)入门学习、ELK 和 beats
好记星不如烂笔头,这里记录平时工作中用到的东西,不喜可以留言. 一.ElasticSearch为啥要用 ElasticSearch简称es是一个ElasticSearch是一个分布式,高性能.高可用. ...
- Android原生UI开发框架 《Jetpack Compose入门到精通》最全上手指南
前言 在去年的Google/IO大会上,亮相了一个全新的 Android 原生 UI 开发框架-Jetpack Compose, 与苹果的SwiftIUI一样,Jetpack Compose是一个声明 ...
- docker删除es数据_木杉入门Elasticsearch(4):安装ES
木杉入门 本系列的目标是在本地搭建一个Elasticsearch的服务集群,通过在阿里云服务器搭建FRP通道对外提供服务,为小规模应用提供一种高性价比的解决思路. 系列内容: 木杉入门Elastics ...
- 【elasticsearch】ES数据库重建索引 -- Reindex(数据迁移)
1.应用背景: 1.当你的数据量过大,而你的索引最初创建的分片数量不足,导致数据入库较慢的情况,此时需要扩大分片的数量,此时可以尝试使用Reindex. 2.当数据的mapping需要修改,但是大量的 ...
- MySQL数据同步到ES集群(MySQL数据库与ElasticSearch全文检索的同步)
简介:MySQL数据库与ElasticSearch全文检索的同步,通过binlog的设置对MySQL数据库操作的日志进行记录,利用Python模块对日志进行操作,再利用kafka的生产者消费者模式进行 ...
最新文章
- arm02gnu/linux,2.1. 支持的硬件 - Debian GNU/Linux 安装手册(PPC架构)
- 上传文件 微信小程序input_快速上手微信小程序UI框架
- 秒表项目_【速看】2021年陕西中考体育怎么考?中考体育项目及考试评分标准最全整理来了!...
- createjs中shape的属性regX和regY
- 利用Python把四张图片按照顺序拼接起来
- java实现编辑距离算法(levenshtein distance),计算字符串或者是文本之间的相似度【附代码】
- java sbyte_Java Byte parseByte()方法
- python sphinx_Python Sphinx使用实例及问题解决
- 计算机无论采用何种方式接入网络,自考计算机网络实用技术考核知识点之Internet的结构及其接入方式...
- CTO职场解惑指南系列(二)春节篇
- onenote快捷键_onenote快捷键的高效用法
- java 短信备份宝_Android实战教程第八篇之短信备份
- 关于matlab影像处理imhist直方图均衡化问题
- SQL注入语句(详细)
- 小米2s刷原生安卓_小米2/2s/2a刷android4.4教程(附2/2s/2a安卓4.4卡刷包下载)
- Python计算离散序列的自相关函数
- Unity全新的版本发布计划(2018)【转自游戏蛮牛】
- Docker服务以及容器如何设置自动启动
- 关于Anaconda(Miniconda)虚拟环境中的包的问题pkgs
- 第1章 微处理器、微型计算机、微型计算机系统的区别