一、Elasticsearch

Elasticsearch 是一个分布式、可扩展、实时的搜索与数据分析引擎。
官方中文文档:Elasticsearch 权威指南

二、安装

1、拉取镜像
docker pull elasticsearch

2、新建容器并运行
如果配置较低,可以设置初始、最大堆内存空间256m(默认是2G)
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 --name ES01 elasticsearch

3、检测安装成功
浏览器访问 ip地址:9200,返回结果如下,安装成功
在这里插入图片描述
附:常用命令
进入容器并使用命令行交互
docker exec -it d345daee829c /bin/bash

启动一个已经停止的容器
docker run d345daee829c

三、基本使用(Restful API)

使用 postman 进行测试

1、增加

使用 PUT 请求 进行增加操作,将以下 JSON 数据放入请求体 Body 中:

{
	"name":"John",
	"age":25,
	"about":"I love coding",
	"interests":["coding","running","sleeping","eating"]
}

可以看到响应的 JSON 数据:
在这里插入图片描述

2、删除

使用 DELETE请求 进行删除操作:
在这里插入图片描述

3、修改

仍然使用 PUT 请求 进行修改操作,只不过返回的 JSON 中的 result 为:"result": "updated"

4、查询

(1)使用 HEAD 请求 判断是否存在
在这里插入图片描述
(2)使用 GET 请求 获取整个 JSON
在这里插入图片描述
(3)查询所有:使用 _search 查询所有内容
在这里插入图片描述
(4)条件查询

条件查询1:直接使用 url 查询 about 属性包含 love 的内容
在这里插入图片描述
在返回结果中,可以看到搜索结果以及相关性得分"_score": 0.25316024

条件查询2:使用查询表达式
(实际使用时,为了解决GET没有请求体的问题,可以使用POST请求)
在这里插入图片描述
(5)全文搜索:将 “I love” 分词之后检索

{
	"query":{
		"match":{
			"about":"I love"
		}
	}
}

(6)短语搜索:将 “I love” 作为一个整体检索

{
	"query":{
		"match_phrase":{
			"about":"I love"
		}
	}
}

(7)高亮搜索:将查询结果中的指定内容高亮出来

{
	"query":{
		"match":{
			"about":"I am"
		}
	},
	"highlight":{
		"fields":{
			"about":{
			}
		}
	}
}

高亮搜索返回结果:

{
	"took": 11,
	"timed_out": false,
	"_shards": {
		"total": 5,
		"successful": 5,
		"skipped": 0,
		"failed": 0
	},
	"hits": {
		"total": 4,
		"max_score": 0.67779577,
		"hits": [
			{
				"_index": "megacorp",
				"_type": "employee",
				"_id": "3",
				"_score": 0.67779577,
				"_source": {
					"name": "Tim",
					"age": 20,
					"about": "I am a programmer, I hate cats, here add something.",
					"interests": [
						"programming",
						"programming",
						"programming"
					]
				},
				"highlight": {
					"about": [
						"<em>I</em> <em>am</em> a programmer, <em>I</em> hate cats, here add something."
					]
				}
			},
			{
				"_index": "megacorp",
				"_type": "employee",
				"_id": "7",
				"_score": 0.25316024,
				"_source": {
					"name": "John",
					"age": 25,
					"about": "I love coding",
					"interests": [
						"coding",
						"running",
						"sleeping",
						"eating"
					]
				},
				"highlight": {
					"about": [
						"<em>I</em> love coding"
					]
				}
			},
			{
				"_index": "megacorp",
				"_type": "employee",
				"_id": "2",
				"_score": 0.16044298,
				"_source": {
					"name": "Bob",
					"age": 27,
					"about": "I love cats",
					"interests": [
						"swimming",
						"reading",
						"thinking",
						"washing"
					]
				},
				"highlight": {
					"about": [
						"<em>I</em> love cats"
					]
				}
			},
			{
				"_index": "megacorp",
				"_type": "employee",
				"_id": "6",
				"_score": 0.16044298,
				"_source": {
					"name": "John",
					"age": 25,
					"about": "I love coding",
					"interests": [
						"coding",
						"running",
						"sleeping",
						"eating"
					]
				},
				"highlight": {
					"about": [
						"<em>I</em> love coding"
					]
				}
			}
		]
	}
}

(8)多条件查询
查询 about 属性中包含 “I love” ,并且为 23 岁以上的雇员:
在这里插入图片描述

{
	"query":{
		"bool":{
			"must":{
				"match":{
					"about":"I love"
				}
			},
			"filter":{
				"range":{
					"age":{
						"gt":23
					}
				}
			}
		}
	}
}
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐