ElasticSearch核心语法使用-ES内功修炼第一篇

442 阅读4分钟

“这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战

上一篇介绍了ElasticSearch环境搭建,本节介绍ElasticSearch基础语法使用。

一、ElasticSearch 分词器简介

1. 默认分词器

es默认分词是standard,英文会按照空格进行分词,但中文就会一个字一个字拆开。如下:

POST _analyze
{
  "analyzer": "standard",
  "text": "我爱你zoe"
}

image.png

2. ik分词器

2.1 粗粒度分词

ik_smart:会做最粗粒度的拆分。

POST _analyze
{
  "analyzer": "ik_smart",
  "text": "我爱你zoe"
}

image.png

2.2 细粒度分词

ik_max_word:会将文本做最细粒度的拆分。

POST _analyze
{
  "analyzer": "ik_max_word",
  "text": "我爱你zoe"
}

image.png

二、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

image.png

1.2 查询索引

GET /索引名称

GET /moe_db

image.png

1.3 删除索引

DELETE /索引名称

DELETE /moe_db

image.png

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

image.png

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)互相学习、互相交流。