Elasticsearch(基础)

49 阅读22分钟

Elasticsearch

下载

下载地址:www.elastic.co/cn/download…

安装

windows安装:

  1. 解压
  2. 执行bin目录下的elasticsearch.bat
  3. 浏览器访问127.0.0.1:9200

微信截图_20230421111258.png

简介

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做支撑,功能不断地在丰富迭代.

入门-倒排索引

正排索引(传统)

idcontent
1001my name id zhangsan
1002my name is lisi

倒排索引

keywordid
name1001,1002
zhangsan1001

Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档.为了方便大家理解,我们将Elasticsearch里存储文档数据和关系型数据库Mysql存储数据的概念进行一个类比

微信截图_20230421135615.png

ES里的Index可以看做是一个库,而Type相当于表,Documents则相当于表的行.这里Type的概念已经被逐渐弱化,Elasticsearch 6.x中,一个Index下已经只包含一个Type,Elasticsearch 7.x,type的概念已经被删除了

操作

入门-HTTP-索引-创建

对比关系型数据库,创建索引就等于创建数据库

向ES服务器发PUT请求:http://127.0.0.1:9200/shanghai

微信截图_20230421141433.png

如果重复向ES服务器发PUT请求:http://127.0.0.1:9200/shanghai 添加索引,会返回错误信息:

微信截图_20230421141622.png

入门-HTTP-索引-查询/删除

查看所有索引

向ES服务器发GET请求:http://127.0.0.1:9200/_cat/indices?v

微信截图_20230421142034.png

这里请求路径中的_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

微信截图_20230421141848.png

属性含义
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

微信截图_20230421150948.png

入门-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,否则会发生错误.

微信截图_20230421152455.png

{
	"_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

微信截图_20230421155700.png

查找不存在的内容,向ES服务器发GET请求:http://127.0.0.1:9200/shanghai/_doc/101

微信截图_20230421155828.png

全查询

查看索引下所有的数据,向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时禁止通过该字段查询数据