Elasticsearch
下载
下载地址:www.elastic.co/cn/download…
安装
windows安装:
- 解压
- 执行bin目录下的elasticsearch.bat
- 浏览器访问127.0.0.1:9200
简介
Elasticsearch(简称ES)是一个基于Apache Luncene开源的分布式,高扩展,近实时的搜索引擎,主要用于海量数据快速存储,实时检索,高效分析的场景.通过简单易用的RESTful API,隐藏Lucene的复杂性,让全文检索变的更简单.
功能:
- 分布式存储
- 分布式搜索
- 分布式分析
因为是分布式,可将海量数据分散到多台服务器上进行存储,检索和分析,只要是海量数据需要完成上面这三种操作的业务场景,一般都会考虑ES,比如维基百科,Stack Overflow,GitHub后台均有使用.
特点
ES为什么这么受欢迎,得益于相较于传统数据库所拥有的强大的功能:
- ES不是什么新技术,主要是将全文检索,数据分析以及分布式技术结合在一起,形成独一无二的ES
- 数据库的功能面对很多领域是不够用的,比如全文检索,同义词处理,相关度排名,复杂数据分析,海量数据近实时处理;ES作为传统数据库的一个补充,提供了数据库所不能提供的很多功能;
- 可以作为一个大型分布式集群(数百台服务器),处理PB级数据,服务大公司;也可以运行在单机上,服务小公司;
- 对用户而言,开箱即用,非常简单,作中小型的应用,分钟级部署,就可以作为生产环境的系统来使用了;
ES底层基于Lucene开发,针对Lucene的局限性,ES提供了RESTful API风格的接口,支持分布式,可水平扩展,同时它可以被多种编程语言调用.
ES除了进行全文检索,也支持聚合/排序.随着ES的功能越来越强大,其和传统数据库的边界越来越模糊.我们既可以把ES当做搜索引擎来使用,也可以将其作为传统关系数据库来使用.
小结
Elasticsearch是一个基于Lucene的开源搜索和分析引擎,有很好的性能,天生支持水平扩展.
ES功能丰富,易于使用,即可做搜索引擎,也可做传统数据库来使用,支持多种客户端语言接入.此外,ES拥有活跃的社区,背后还有一个强大的公司Elastic做支撑,功能不断地在丰富迭代.
入门-倒排索引
正排索引(传统)
| id | content |
|---|---|
| 1001 | my name id zhangsan |
| 1002 | my name is lisi |
倒排索引
| keyword | id |
|---|---|
| name | 1001,1002 |
| zhangsan | 1001 |
Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档.为了方便大家理解,我们将Elasticsearch里存储文档数据和关系型数据库Mysql存储数据的概念进行一个类比
ES里的Index可以看做是一个库,而Type相当于表,Documents则相当于表的行.这里Type的概念已经被逐渐弱化,Elasticsearch 6.x中,一个Index下已经只包含一个Type,Elasticsearch 7.x,type的概念已经被删除了
操作
入门-HTTP-索引-创建
对比关系型数据库,创建索引就等于创建数据库
向ES服务器发PUT请求:http://127.0.0.1:9200/shanghai
如果重复向ES服务器发PUT请求:http://127.0.0.1:9200/shanghai 添加索引,会返回错误信息:
入门-HTTP-索引-查询/删除
查看所有索引
向ES服务器发GET请求:http://127.0.0.1:9200/_cat/indices?v
这里请求路径中的_cat表示查看的意思,indices表示索引,所以整体的含义就是查看当前ES服务器中的所有索引,
| 表头 | 含义 |
|---|---|
| health | 当前服务器健康状态:green(集群完整)yellow(单点正常,集群不完整)red(单点不正常) |
| status | 索引打开,关闭状态 |
| index | 索引名 |
| uuid | 索引统一编号 |
| pri | 主分片数量 |
| rep | 副本数量 |
| docs.count | 可用文档数量 |
| docs.deleted | 文档删除状态(逻辑删除) |
| store.size | 主分片和副分片整体占空间大小 |
| pri.store.size | 主分片占空间大小 |
查看单个索引
向ES服务器发GET请求:http://127.0.0.1:9200/shanghai
| 属性 | 含义 |
|---|---|
| shanghai | 索引名 |
| aliases | 索引库的所有别名 |
| mappings | 映射类型(分为静态映射和动态映射) |
| creation_date | 创建时间 |
| number_of_replicas | 索引库的副本数量 |
| number_of_shards | 索引库的分片数量 |
| provided_name | 索引库名称 |
| uuid | 索引的uuid信息 |
| _tier_preference | 索引分配的数据层 |
删除索引
向ES服务器发DELETE请求:http://127.0.0.1:9200/shanghai
入门-HTTP-文档-创建(POST & PUT)
假设索引已经创建好了,接下来我们来创建文档,这里的文档可以类比为关系型数据库中的表数据,添加的数据格式为JSON格式
向ES服务器发POST请求:http://127.0.0.1:9200/shanghai/_doc 请求体JSON内容为
{
"id": 1,
"title": "《三毛历险记》:结局你还记得吗?网友:剧情太真实不适合儿童!",
"date": "2018年11月8日",
"content": "他的儿子则是另一个小乞丐,但是三毛也凭着自己的善良与真诚打动了吴老板,所以我老板就将三毛说没意思。而这时的三毛,就不会再流落街头了,也获得了一个能够遮风挡雨的地方,也获得了...",
"source": "衣食住行全都管"
}
注意:此处发送的请求方式必须为POST,不能是PUT,否则会发生错误.
{
"_index": "shanghai", //索引
"_type": "_doc", //类型,文档
"_id": "pruxoocBkeKdrOC11-hA", //唯一标识,随机生成
"_version": 1, //版本
"result": "created", //结果,这里的create表示创建成功
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
上面的数据创建后,由于没有指定数据的唯一性标识(ID),默认情况下,ES服务器会随机生成一个.
如果想自定义唯一标识,需要在创建时指定:ip+port+/索引名+/_doc/ID,请求体JSON内容
如果增加数据时明确数据主键,那么请求方式也可以为PUT
入门-HTTP-查询-主键查询 & 全查询
主键查询
查看文档时,需要指明文档的唯一标识,类似于Mysql中数据的主键查询
向ES服务器发GET请求:http://127.0.0.1:9200/shanghai/_doc/1
查找不存在的内容,向ES服务器发GET请求:http://127.0.0.1:9200/shanghai/_doc/101
全查询
查看索引下所有的数据,向ES服务器发GET请求:http://127.0.0.1:9200/shanghai/_search
{
"took": 435,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 7,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "shanghai",
"_type": "_doc",
"_id": "pruxoocBkeKdrOC11-hA",
"_score": 1,
"_source": {
"id": 1,
"title": "《三毛历险记》:结局你还记得吗?网友:剧情太真实不适合儿童!",
"date": "2018年11月8日",
"content": "他的儿子则是另一个小乞丐,但是三毛也凭着自己的善良与真诚打动了吴老板,所以我老板就将三毛说没意思。而这时的三毛,就不会再流落街头了,也获得了一个能够遮风挡雨的地方,也获得了...",
"source": "衣食住行全都管"
}
},
{
"_index": "shanghai",
"_type": "_doc",
"_id": "1",
"_score": 1,
"_source": {
"title": "《三毛历险记》故事梗概",
"date": "2010年11月4日",
"content": "老妖婆发现三毛逃跑,十分生气,命令自己的部下要把三毛追回来。被追得狼狈不堪的三毛遇到了一个热心的飞机驾驶员小高,在好心的小高的帮助下,三毛摆脱了老妖婆的追击,走上了回家的路。 在...",
"source": "央视网"
}
},
{
"_index": "shanghai",
"_type": "_doc",
"_id": "2",
"_score": 1,
"_source": {
"title": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何",
"date": "2020年11月2日",
"content": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何2020 11/02 09:00 阿双和你一起看动画企鹅号 分享 00:00 / 00:00 浏览器不支持该音视频 你可以 刷新 试试 70011103-a566e49e3c6819ebc63f1fc73d52543b 重新请求视频信息...",
"source": "腾讯网"
}
},
{
"_index": "shanghai",
"_type": "_doc",
"_id": "3",
"_score": 1,
"_source": {
"title": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何",
"date": "2020年11月2日",
"content": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何2020 11/02 09:00 阿双和你一起看动画企鹅号 分享 00:00 / 00:00 浏览器不支持该音视频 你可以 刷新 试试 70011103-a566e49e3c6819ebc63f1fc73d52543b 重新请求视频信息...",
"source": "腾讯网"
}
},
{
"_index": "shanghai",
"_type": "_doc",
"_id": "4",
"_score": 1,
"_source": {
"title": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何",
"date": "2020年11月2日",
"content": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何2020 11/02 09:00 阿双和你一起看动画企鹅号 分享 00:00 / 00:00 浏览器不支持该音视频 你可以 刷新 试试 70011103-a566e49e3c6819ebc63f1fc73d52543b 重新请求视频信息...",
"source": "腾讯网"
}
},
{
"_index": "shanghai",
"_type": "_doc",
"_id": "5",
"_score": 1,
"_source": {
"title": "《三毛历险记》:结局你还记得吗?网友:剧情太真实不适合儿童!",
"date": "2018年11月8日",
"content": "他的儿子则是另一个小乞丐,但是三毛也凭着自己的善良与真诚打动了吴老板,所以我老板就将三毛说没意思。而这时的三毛,就不会再流落街头了,也获得了一个能够遮风挡雨的地方,也获得了...",
"source": "衣食住行全都管"
}
},
{
"_index": "shanghai",
"_type": "_doc",
"_id": "6",
"_score": 1,
"_source": {
"title": "《三毛历险记》:结局你还记得吗?网友:剧情太真实不适合儿童!",
"date": "2023年11月8日",
"content": "他的儿子则是另一个小乞丐,但是三毛也凭着自己的善良与真诚打动了吴老板,所以我老板就将三毛说没意思。而这时的三毛,就不会再流落街头了,也获得了一个能够遮风挡雨的地方,也获得了...",
"source": "衣食住行全都管"
}
}
]
}
}
入门-HTTP-全量修改 & 局部修改 & 删除
全量修改
和新增文档一样,输入相同的URL地址请求,如果请求体变化,会将原有的数据内容覆盖
向ES服务器发POST或PUT请求:http://127.0.0.1:9200/shanghai/_doc/1 修改date为2099年11月8日,source为新浪网
请求体:
{
"title": "《三毛历险记》:结局你还记得吗?网友:剧情太真实不适合儿童!",
"date": "2099年11月8日",
"content": "他的儿子则是另一个小乞丐,但是三毛也凭着自己的善良与真诚打动了吴老板,所以我老板就将三毛说没意思。而这时的三毛,就不会再流落街头了,也获得了一个能够遮风挡雨的地方,也获得了...",
"source": "新浪网"
}
响应结果:
{
"_index": "shanghai",
"_type": "_doc",
"_id": "1",
"_version": 2,
"result": "updated", //updated表示数据被更新
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 8,
"_primary_term": 1
}
局部修改
修改数据时,也可以只修改某一条数据的局部信息
向ES服务器发POST请求:http://127.0.0.1:9200/shanghai/_update/1
请求体JSON内容为:
{
"doc": {
"date": "2999年11月8日",
"source": "百度网"
}
}
响应结果:
{
"_index": "shanghai",
"_type": "_doc",
"_id": "1",
"_version": 4,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 10,
"_primary_term": 1
}
删除
删除一个文档不会立即从磁盘上移出,它只是被标记成已删除(逻辑删除)
向ES服务器发DELETE请求:http://127.0.0.1:9200/shanghai/_doc/1
响应结果:
{
"_index": "shanghai",
"_type": "_doc",
"_id": "pruxoocBkeKdrOC11-hA",
"_version": 2,
"result": "deleted", //删除成功
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 15,
"_primary_term": 1
}
入门-HTTP-条件查询 & 分页查询 & 排序查询
条件查询(GET/POST /shanghai/_search?q=字段名:条件 URL带参数的方式查询)
向ES服务器发GET/POST请求:http://127.0.0.1:9200/shanghai/_search?q=source:腾讯
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 3,
"relation": "eq"
},
"max_score": 2.292241,
"hits": [
{
"_index": "shanghai",
"_type": "_doc",
"_id": "2",
"_score": 2.292241,
"_source": {
"title": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何",
"date": "2020年11月2日",
"content": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何2020 11/02 09:00 阿双和你一起看动画企鹅号 分享 00:00 / 00:00 浏览器不支持该音视频 你可以 刷新 试试 70011103-a566e49e3c6819ebc63f1fc73d52543b 重新请求视频信息...",
"source": "腾讯网"
}
},
{
"_index": "shanghai",
"_type": "_doc",
"_id": "3",
"_score": 2.292241,
"_source": {
"title": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何",
"date": "2020年11月2日",
"content": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何2020 11/02 09:00 阿双和你一起看动画企鹅号 分享 00:00 / 00:00 浏览器不支持该音视频 你可以 刷新 试试 70011103-a566e49e3c6819ebc63f1fc73d52543b 重新请求视频信息...",
"source": "腾讯网"
}
},
{
"_index": "shanghai",
"_type": "_doc",
"_id": "4",
"_score": 2.292241,
"_source": {
"title": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何",
"date": "2020年11月2日",
"content": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何2020 11/02 09:00 阿双和你一起看动画企鹅号 分享 00:00 / 00:00 浏览器不支持该音视频 你可以 刷新 试试 70011103-a566e49e3c6819ebc63f1fc73d52543b 重新请求视频信息...",
"source": "腾讯网"
}
}
]
}
}
条件查询(GET/POST /shanghai/_search 附带JSON请求体)
防止URL请求中文乱码采用附带JSON请求体方式查询
向ES服务器发GET/POST请求:http://127.0.0.1:9200/shanghai/_search
JSON请求体:source为腾讯
{
"query": {
"match": {
"source": "腾讯"
}
}
}
响应结果:
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 3,
"relation": "eq"
},
"max_score": 2.292241,
"hits": [
{
"_index": "shanghai",
"_type": "_doc",
"_id": "2",
"_score": 2.292241,
"_source": {
"title": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何",
"date": "2020年11月2日",
"content": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何2020 11/02 09:00 阿双和你一起看动画企鹅号 分享 00:00 / 00:00 浏览器不支持该音视频 你可以 刷新 试试 70011103-a566e49e3c6819ebc63f1fc73d52543b 重新请求视频信息...",
"source": "腾讯网"
}
},
{
"_index": "shanghai",
"_type": "_doc",
"_id": "3",
"_score": 2.292241,
"_source": {
"title": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何",
"date": "2020年11月2日",
"content": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何2020 11/02 09:00 阿双和你一起看动画企鹅号 分享 00:00 / 00:00 浏览器不支持该音视频 你可以 刷新 试试 70011103-a566e49e3c6819ebc63f1fc73d52543b 重新请求视频信息...",
"source": "腾讯网"
}
},
{
"_index": "shanghai",
"_type": "_doc",
"_id": "4",
"_score": 2.292241,
"_source": {
"title": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何",
"date": "2020年11月2日",
"content": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何2020 11/02 09:00 阿双和你一起看动画企鹅号 分享 00:00 / 00:00 浏览器不支持该音视频 你可以 刷新 试试 70011103-a566e49e3c6819ebc63f1fc73d52543b 重新请求视频信息...",
"source": "腾讯网"
}
}
]
}
查询索引下所有的文档(GET/POST /索引名/_search 附带JSON请求体)
向ES服务器发GET/POST请求:http://127.0.0.1:9200/shanghai/_search
JSON请求体:查询所有文档
{
"query": {
"match_all": {}
}
}
响应结果:
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 6,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "shanghai",
"_type": "_doc",
"_id": "2",
"_score": 1,
"_source": {
"title": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何",
"date": "2020年11月2日",
"content": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何2020 11/02 09:00 阿双和你一起看动画企鹅号 分享 00:00 / 00:00 浏览器不支持该音视频 你可以 刷新 试试 70011103-a566e49e3c6819ebc63f1fc73d52543b 重新请求视频信息...",
"source": "腾讯网"
}
},
{
"_index": "shanghai",
"_type": "_doc",
"_id": "3",
"_score": 1,
"_source": {
"title": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何",
"date": "2020年11月2日",
"content": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何2020 11/02 09:00 阿双和你一起看动画企鹅号 分享 00:00 / 00:00 浏览器不支持该音视频 你可以 刷新 试试 70011103-a566e49e3c6819ebc63f1fc73d52543b 重新请求视频信息...",
"source": "腾讯网"
}
},
{
"_index": "shanghai",
"_type": "_doc",
"_id": "4",
"_score": 1,
"_source": {
"title": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何",
"date": "2020年11月2日",
"content": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何2020 11/02 09:00 阿双和你一起看动画企鹅号 分享 00:00 / 00:00 浏览器不支持该音视频 你可以 刷新 试试 70011103-a566e49e3c6819ebc63f1fc73d52543b 重新请求视频信息...",
"source": "腾讯网"
}
},
{
"_index": "shanghai",
"_type": "_doc",
"_id": "5",
"_score": 1,
"_source": {
"title": "《三毛历险记》:结局你还记得吗?网友:剧情太真实不适合儿童!",
"date": "2018年11月8日",
"content": "他的儿子则是另一个小乞丐,但是三毛也凭着自己的善良与真诚打动了吴老板,所以我老板就将三毛说没意思。而这时的三毛,就不会再流落街头了,也获得了一个能够遮风挡雨的地方,也获得了...",
"source": "衣食住行全都管"
}
},
{
"_index": "shanghai",
"_type": "_doc",
"_id": "6",
"_score": 1,
"_source": {
"title": "《三毛历险记》:结局你还记得吗?网友:剧情太真实不适合儿童!",
"date": "2023年11月8日",
"content": "他的儿子则是另一个小乞丐,但是三毛也凭着自己的善良与真诚打动了吴老板,所以我老板就将三毛说没意思。而这时的三毛,就不会再流落街头了,也获得了一个能够遮风挡雨的地方,也获得了...",
"source": "衣食住行全都管"
}
},
{
"_index": "shanghai",
"_type": "_doc",
"_id": "1",
"_score": 1,
"_source": {
"title": "《三毛历险记》:结局你还记得吗?网友:剧情太真实不适合儿童!",
"date": "2999年11月8日",
"content": "他的儿子则是另一个小乞丐,但是三毛也凭着自己的善良与真诚打动了吴老板,所以我老板就将三毛说没意思。而这时的三毛,就不会再流落街头了,也获得了一个能够遮风挡雨的地方,也获得了...",
"source": "百度网"
}
}
]
}
}
查询指定字段(GET/POST /shanghai/_search 附带JSON请求体)
向ES服务器发GET/POST请求:http://127.0.0.1:9200/shanghai/_search
JSON请求体:查询所有文档,只展示title字段
{
"query": {
"match_all": {}
},
"_source": [
"title"
]
}
响应结果:
{
"took": 115,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 6,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "shanghai",
"_type": "_doc",
"_id": "2",
"_score": 1,
"_source": {
"title": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何"
}
},
{
"_index": "shanghai",
"_type": "_doc",
"_id": "3",
"_score": 1,
"_source": {
"title": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何"
}
},
{
"_index": "shanghai",
"_type": "_doc",
"_id": "4",
"_score": 1,
"_source": {
"title": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何"
}
},
{
"_index": "shanghai",
"_type": "_doc",
"_id": "5",
"_score": 1,
"_source": {
"title": "《三毛历险记》:结局你还记得吗?网友:剧情太真实不适合儿童!"
}
},
{
"_index": "shanghai",
"_type": "_doc",
"_id": "6",
"_score": 1,
"_source": {
"title": "《三毛历险记》:结局你还记得吗?网友:剧情太真实不适合儿童!"
}
},
{
"_index": "shanghai",
"_type": "_doc",
"_id": "1",
"_score": 1,
"_source": {
"title": "《三毛历险记》:结局你还记得吗?网友:剧情太真实不适合儿童!"
}
}
]
}
}
分页查询(GET/POST /索引名/_search 附带JSON请求体)
向ES服务器发GET/POST请求:http://127.0.0.1:9200/shopping/_search
JSON请求体:查询前3条数据
{
"query": {
"match_all": {}
},
"from": 0,
"size": 3
}
响应结果:
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 6,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "shanghai",
"_type": "_doc",
"_id": "2",
"_score": 1,
"_source": {
"title": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何",
"date": "2020年11月2日",
"content": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何2020 11/02 09:00 阿双和你一起看动画企鹅号 分享 00:00 / 00:00 浏览器不支持该音视频 你可以 刷新 试试 70011103-a566e49e3c6819ebc63f1fc73d52543b 重新请求视频信息...",
"source": "腾讯网"
}
},
{
"_index": "shanghai",
"_type": "_doc",
"_id": "3",
"_score": 1,
"_source": {
"title": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何",
"date": "2020年11月2日",
"content": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何2020 11/02 09:00 阿双和你一起看动画企鹅号 分享 00:00 / 00:00 浏览器不支持该音视频 你可以 刷新 试试 70011103-a566e49e3c6819ebc63f1fc73d52543b 重新请求视频信息...",
"source": "腾讯网"
}
},
{
"_index": "shanghai",
"_type": "_doc",
"_id": "4",
"_score": 1,
"_source": {
"title": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何",
"date": "2020年11月2日",
"content": "三毛历险记:三毛戏耍金刚,金刚雷霆大怒,但还是无可奈何2020 11/02 09:00 阿双和你一起看动画企鹅号 分享 00:00 / 00:00 浏览器不支持该音视频 你可以 刷新 试试 70011103-a566e49e3c6819ebc63f1fc73d52543b 重新请求视频信息...",
"source": "腾讯网"
}
}
]
}
}
排序查询(GET/POST /索引名/_search 附带JSON请求体)
向ES服务器发GET/POST请求:http://127.0.0.1:9200/shopping/_search
JSON请求体:查询所有文档,根据price排序(降序)
{
"query": {
"match_all": {}
},
"sort": {
"price": {
"order": "desc"
}
}
}
响应结果:
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 7,
"relation": "eq"
},
"max_score": null,
"hits": [
{
"_index": "shopping",
"_type": "_doc",
"_id": "6",
"_score": null,
"_source": {
"name": "小米电脑",
"price": 7999,
"category": "电脑",
"color": "金色"
},
"sort": [
7999
]
},
{
"_index": "shopping",
"_type": "_doc",
"_id": "7",
"_score": null,
"_source": {
"name": "小米电脑",
"price": 7999,
"category": "电脑",
"color": "银色"
},
"sort": [
7999
]
},
{
"_index": "shopping",
"_type": "_doc",
"_id": "5",
"_score": null,
"_source": {
"name": "小米电脑",
"price": 5999,
"category": "电脑",
"color": "白色"
},
"sort": [
5999
]
},
{
"_index": "shopping",
"_type": "_doc",
"_id": "1",
"_score": null,
"_source": {
"name": "小米手机",
"price": 3999,
"category": "手机",
"color": "红色"
},
"sort": [
3999
]
},
{
"_index": "shopping",
"_type": "_doc",
"_id": "2",
"_score": null,
"_source": {
"name": "小米手机",
"price": 3999,
"category": "手机",
"color": "白色"
},
"sort": [
3999
]
},
{
"_index": "shopping",
"_type": "_doc",
"_id": "3",
"_score": null,
"_source": {
"name": "小米手机",
"price": 3999,
"category": "手机",
"color": "黑色"
},
"sort": [
3999
]
},
{
"_index": "shopping",
"_type": "_doc",
"_id": "4",
"_score": null,
"_source": {
"name": "小米手机",
"price": 3999,
"category": "手机",
"color": "蓝色"
},
"sort": [
3999
]
}
]
}
}
入门-HTTP-全文检索 & 完全匹配 & 高亮查询
全文检索(GET/POST /索引/_search 附带请求体)
向ES服务器发GET/POST请求:http://127.0.0.1:9200/shopping/_search
JSON请求体:全文检索
{
"query":{
"match":{
"category":"手电"
}
}
}
响应结果:
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 8,
"relation": "eq"
},
"max_score": 0.8325673,
"hits": [
{
"_index": "shopping",
"_type": "_doc",
"_id": "1",
"_score": 0.8325673,
"_source": {
"name": "小米手机",
"price": 3999,
"category": "手机",
"color": "红色"
}
},
{
"_index": "shopping",
"_type": "_doc",
"_id": "2",
"_score": 0.8325673,
"_source": {
"name": "小米手机",
"price": 3999,
"category": "手机",
"color": "白色"
}
},
{
"_index": "shopping",
"_type": "_doc",
"_id": "3",
"_score": 0.8325673,
"_source": {
"name": "小米手机",
"price": 3999,
"category": "手机",
"color": "黑色"
}
},
{
"_index": "shopping",
"_type": "_doc",
"_id": "4",
"_score": 0.8325673,
"_source": {
"name": "小米手机",
"price": 3999,
"category": "手机",
"color": "蓝色"
}
},
{
"_index": "shopping",
"_type": "_doc",
"_id": "5",
"_score": 0.6233371,
"_source": {
"name": "小米电脑",
"price": 5999,
"category": "电脑",
"color": "白色"
}
},
{
"_index": "shopping",
"_type": "_doc",
"_id": "6",
"_score": 0.6233371,
"_source": {
"name": "小米电脑",
"price": 7999,
"category": "电脑",
"color": "金色"
}
},
{
"_index": "shopping",
"_type": "_doc",
"_id": "7",
"_score": 0.6233371,
"_source": {
"name": "小米电脑",
"price": 7999,
"category": "电脑",
"color": "银色"
}
},
{
"_index": "shopping",
"_type": "_doc",
"_id": "8",
"_score": 0.45042515,
"_source": {
"name": "小米平板",
"price": 1999,
"category": "平板电脑",
"color": "白色"
}
}
]
}
}
完全匹配(GET/POST /索引/_search 附带JSON请求体)
向ES服务器发GET/POST请求:http://127.0.0.1:9200/shopping/_search
JSON请求体:完全匹配
{
"query":{
"match_phrase":{
"category":"板"
}
}
}
响应结果:
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1.429337,
"hits": [
{
"_index": "shopping",
"_type": "_doc",
"_id": "8",
"_score": 1.429337,
"_source": {
"name": "小米平板",
"price": 1999,
"category": "平板电脑",
"color": "白色"
}
}
]
}
}
高亮查询(GET/POST /索引名/_search 附带JSON请求体)
向ES服务器发GET/POST请求:http://127.0.0.1:9200/shopping/_search
JSON请求体:高亮查询
{
"query": {
"match": {
"category": "平板"
}
},
"highlight": {
"pre_tags": "<font color='red'>",
"post_tags": "</font>",
"fields": {
"category": {}
}
}
}
响应结果:
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 2.858674,
"hits": [
{
"_index": "shopping",
"_type": "_doc",
"_id": "8",
"_score": 2.858674,
"_source": {
"name": "小米平板",
"price": 1999,
"category": "平板电脑",
"color": "白色"
},
"highlight": {
"category": [
"<font color='red'>平</font><font color='red'>板</font>电脑"
]
}
}
]
}
}
聚合查询(GET/POST /索引名/_search 附带JSON请求体)
向ES服务器发GET/POST请求:http://127.0.0.1:9200/shopping/_search
JSON请求体:分组统计 group
# aggs 聚合操作
# price_group 名称,随意起
# terms 分组
# field 字段
{
"aggs": {
"price_group": {
"terms": {
"field": "price"
}
}
}
}
上面返回结果会附带原始数据的,若不想要原始的结果,修改JSON请求
{
"aggs": {
"price_group": {
"terms": {
"field": "price"
}
}
},
"size": 0
}
JSON请求体:平均值统计 avg
# aggs 聚合操作
# price_group 名称,随意起
# avg 求平均值
# field 字段
{
"aggs": {
"price_avg": {
"avg": {
"field": "price"
}
}
},
"size": 0
}
入门-HTTP-映射关系
有了索引库,等于有了数据库中database
接下来就需要建索引库(index)中的映射了,类似于数据库(database)中的表结构(table)
创建数据库表需要设置字段名称,类型,长度,约束等;索引库也一样,需要知道这个类型下有哪些字段,每个字段有哪些约束信息,这就叫做映射(mapping)
向ES服务器发PUT请求:http://127.0.0.1:1002/user/_mapping
JSON请求体:
{
"properties": {
"age": {
"type": "keyword",
"index": true
},
"name": {
"type": "text",
"index": true
},
"sex": {
"type": "keyword",
"index": true
},
"tel": {
"type": "keyword",
"index": false
}
}
}
type为text类型时是全文检索,type为keyword类型时是精确匹配,index为false时禁止通过该字段查询数据