{人生没有白走的路,每一步都算数。}
在前面的学习中,我们已经掌握了es是什么,同时也把es的服务已经安装启动了,使用es存储数据,获取数据。那么我们来聊聊Elasticsearch的相关概念,数据结构,如何实现搜索。
ES 核心概念
1.索引
2.字段类型(mapping)
3.文档(documents)
elasticsearch 是面向文档,关系型数据库 和 elasticsearch 客观的对比!
| Relational DB | Elasticsearch |
|---|---|
| 数据库(database) | 索引(indices) |
| 表(tables) | types |
| 行(rows) | documents |
| 字段(columns) | fields |
elasticsearch(集群)中可以包含多个索引(数据库),每个索引中可以包含多个类型(表),每个类型下又包含多个文档(行),每个文档中又包含多个字段(列)。
elasticsearch 在后台把每个索引划分成多个分片,每分分片可以在集群中的不同服务器间迁移
一个人就是一个集群!默认的集群名字就是 elasticsearch
基于Rest命令说明:
| method | url地址 | 描述 |
|---|---|---|
| PUT | localhost:9200/索引名称/类型名称/文档id | 创建文档(指定文档id) |
| POST | localhost:9200/索引名称/类型名称 | 创建文档(随机文档id) |
| POST | localhost:9200/索引名称/类型名称/文档id/_update | 修改文档 |
| DELETE | localhost:9200/索引名称/类型名称/文档id | 删除文档 |
| GET | localhost:9200/索引名称/类型名称/文档id | 查询文档通过文档id |
| POST | localhost:9200/索引名称/类型名称/_search | 查询所有数据 |
| GET | localhost:9200/索引名称/类型名称/_count | 统计数量 |
| POST | localhost:9200/索引名称/类型名称/_update_by_query | 查询更新 |
ES 数据类型
-
字符串类型
text、keyword
-
数值类型
long、integer、short、byte、double、float、half_float、scaled_float
-
日期类型
date
-
布尔值类型
boolean
-
二进制类型
binary
-
等等……
创建一个索引:
put /索引名/~类型名~/文档id
{请求体}
添加数据:
POST /wangcp/user/4
{
"name":"李四4",
"age":30,
"desc":"emm,不知道如何形容",
"tags":["靓女","旅游","唱歌"]
}
版本变迁
type 的版本迭代:
5.x 及以前版本,一个 index 有一个或者多个 type 6.x 版本,一个 index 只有一个 type 7.x 版本移除了 type,type 相关的所有内容全部变成 Deprecated,为了兼容升级和过渡,所有的 7.x 版本 es 数据写入后 type 字段都默认被置为 “_doc” 8.x 版本完全废弃 type
Java连接ElasticSearch:
7.X 版本的改变
TransportClient 在es7后不支持了,要用 java high level rest client,采用9200端口
6.X 以下的版本
elasticsearch 官网推荐是使用基于http协议的restClient去充当客户端连接ES, 如果想基于TCP协议,9300端口从传输层获取es文档数据也是可以的;但es7以上版本不支持
7.0版本中将弃用TransportClient客户端,且在8.0版本中完全移除它。