“这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战”
上一篇介绍了ElasticSearch环境搭建,本节介绍ElasticSearch基础语法使用。
一、ElasticSearch 分词器简介
1. 默认分词器
es默认分词是standard,英文会按照空格进行分词,但中文就会一个字一个字拆开。如下:
POST _analyze
{
"analyzer": "standard",
"text": "我爱你zoe"
}
2. ik分词器
2.1 粗粒度分词
ik_smart:会做最粗粒度的拆分。
POST _analyze
{
"analyzer": "ik_smart",
"text": "我爱你zoe"
}
2.2 细粒度分词
ik_max_word:会将文本做最细粒度的拆分。
POST _analyze
{
"analyzer": "ik_max_word",
"text": "我爱你zoe"
}
二、Resultful初识
1. 什么是Resultful?
resultful风格是一种软件架构风格,而不是标准,只是提供了一种设计原则和约束条件。主要适用于客户端和服务器端交互的软件。是基于http协议实现。目的是为了提高系统的可伸缩性,降低应用之间的耦合度,方便框架分布式处理程序。基于这个风格的软件可更加的简单、更有层次。
- GET,对应select:是从服务器查询,可以在服务器通过请求的参数区分查询的方式。
- POST,对应Create:在服务器新建立一个资源,调用insert操作。
- PUT,对应update操作:在服务器更新资源,调用update操作。
- DELETE,对应DELETE操作,从服务器删除资源,调用delete语句。
2. 为什么要使用Resultful?
- 面向资源
- 轻量,直接基于http
- 数据描述简单,一般以xml,json做数据交换
三、ElasticSearch基本操作
ElasticSearch查询不同版本语法所有不同,例如:类型type类似于关系型数据库中的table,低版本的es type指定具体的table,7.x之后的版本统一改为_doc。高版本已经把_doc标记为过时的(#! Deprecation: [types removal] Specifying types in search requests is deprecated.
),在Kibana上查询时会有相关提示信息。
1. 索引操作
索引index可以理解为关系型数据库的database。
1.1 创建索引
PUT /索引名称
PUT /moe_db
1.2 查询索引
GET /索引名称
GET /moe_db
1.3 删除索引
DELETE /索引名称
DELETE /moe_db
2. 文档操作
文档document可以理解为关系型数据库的一行(Row)数据。
2.1 添加文档
PUT /索引名称/类型/id
PUT /moe_db/_doc/1
{
"name": "吴某凡",
"sex": 1,
"age": 30,
"address": "北京某区",
"remark": "加拿大籍,哈哈哈"
}
PUT /moe_db/_doc/2
{
"name": "小猪",
"sex": 1,
"age": 28,
"address": "台湾",
"remark": "呵呵呵"
}
2.2 修改文档
PUT /索引名称/类型/id
id存在就更新。
PUT /moe_db/_doc/1
{
"name": "张三",
"sex": 1,
"age": 30,
"address": "北京市朝阳区",
"remark": "哈哈呵呵"
}
2.3 查询文档
GET /索引名称/类型/id
GET /moe_db/_doc/1
2.4 删除文档
DELETE /索引名称/类型/id
DELETE /moe_db/_doc/2
3. 简单查询操作
3.1 查询当前类型中的所有文档
查询所有文档,对应关系型数据库就是查询所有表记录。
select * from xxx;
GET /索引名称/类型/_search
GET /moe_db/_doc/_search
3.2 条件查询
3.2.1 等于查询
查询age等于30岁的文档,对应关系型数据库就是查询年龄等于30岁的表记录。
select * from xxx where age = 30;
GET /索引名称/类型/_search?q=:**
GET /moe_db/_doc/_search?q=age:30
3.2.2 大于查询
查询年龄大于18前的记录。 GET /索引名称/类型/_search?q=age:>**
GET /moe_db/_doc/_search?q=age:>18
3.2.3 小于查询
查询年龄小于35岁的记录。
GET /索引名称/类型/_search?q=age:<**
GET /moe_db/_doc/_search?q=age:<30
3.3 范围查询
查询age在25至30岁之间的 _search?q=*[ TO **] 注意: TO 必须为大写。
select * from xxx where age between 25 and 30;
GET /索引名称/类型/_search?q=***[25 TO 26]
GET /moe_db/_doc/_search?q=age[25 TO 30]
3.4 批量查询
根据多个ID进行批量查询 _mget
GET /索引名称/类型/_mget
GET /moe_db/_doc/_mget
{"ids":[1,2]}
3.5 分页查询
from=&size=
GET /索引名称/类型/_search?from=0&size=10
GET /moe_db/_doc/_search?from=0&size=10
3.6 查询特定字段的记录
GET /索引名称/类型/_search?_source=字段,字段
GET /moe_db/_doc/_search?_source=name,age
3.7 排序
GET /索引名称/类型/_search?sort=字段 desc
GET /moe_db/_doc/_search?sort=age:desc
四、总结
本篇开头介绍了ES的默认分词器有哪些问题,以及如何使用IK分词器。然后介绍了下ES的基于Resultful风格的简单基本操作API。先把简单的查询学会,再进一步学习ES的复杂查询。
欢迎大家关注微信公众号(MarkZoe)互相学习、互相交流。