一、前言
检索功能是应用中非常常见的功能 而开源的Elasticsearch是全文搜索引擎的首选
Elasticsearch是一个底层基于Lucene的分布式搜索服务 Lucene是开源软件工具包 并不能直接使用
而Elasticsearch相当于是对其的封装 且提供了Restful风格的API 采用多shard(分片)的方式保证数据安全 还提供了自动resharding的功能
github等大型的站点也采用了Elasticsearch作为其搜索服务引擎
Elasticsearch可以快速存储 搜索和分析海量数据
二、安装
用Docker的方式安装
首先 要下载Elasticsearch的镜像
# 从阿里云的仓库拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/elasticsearch/elasticsearch:6.7.0
然后是启动容器
Elasticsearch默认使用9200
端口进行web通信 分布式情况下Elasticsearch各个节点之间通信使用9300
端口
# 启动容器
docker run -d -p 9200:9200 -p 9300:9300 --name ES01 02982be5777d
然后可在浏览器访问ip:9200
若出现如下数据 则启动成功:
若出现9200端口无法访问的情况
请参看鄙人另一篇博客:完美解决虚拟机安装Elasticsearch报错:[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase
三、使用
Elasticsearch是【面向文档】的
这就意味着 它存储的是整个对象或文档
Elasticsearch不仅是存储文档 而且会索引每个文档的内容 使之可以被检索
在Elasticsearch中 可对文档进行索引 检索 排序和过滤——而不是仅仅对行列数据
这是一种完全不同的思考数据的方式 也是Elasticsearch能支持复杂全文检索的原因
Elasticsearch使用JSON(JavaScript Object Notation)作为文档的序列化格式
JSON 序列化为大多数编程语言所支持 并且已经成为NoSQL领域的标准格式 它简单 简洁 易于阅读 有轻量级和跨平台的优势
基本概念:
存储数据到Elasticsearch的行为叫做【索引】 但在索引一个文档之前 需要先确定将文档存储在哪里
(这里的索引是动词
索引一个文档 就是存储一个文档到一个 索引中以便被检索和查询
类似于SQL语句中的INSERT关键词)
一个Elasticsearch集群可以包含多个[索引] 相应的每个索引可以包含多个[类型]
这些不同的类型存储着多个[文档] 每个文档又有多个[属性]
(这里的索引是名词 类似于传统关系型数据库中的一个数据库 是一个存储关系型文档的地方)
若用MySQL作比较 就是:
- Elasticsearch的的索引相当于MySQL的数据库
- Elasticsearch的类型相当于MySQL的表
- Elasticsearch的文档相当于MySQL的记录
- Elasticsearch的属性相当于MySQL的字段
注:在Elasticsearch6.0及以上的版本不允许一个索引下面有多个类型
1、增删改查
①、添加
要实现添加其实很简单
只需要发送一个PUT
请求即可往指定索引的指定类型里存入一个文档
语法:
PUT请求 ----> ip:端口/索引名称/类型名称/编号
内容:
{
要添加的JSON数据
}
例:
PUT请求 ----> ip:端口/zjitc/student/1
{
"id" : "1",
"name" : "陈涛"