前言
前面的一篇博客已经介绍了如何在服务器上搭建一个单节点的Elasticsearch 集群,之前自己学习使用Elasticsearch 的时候并没有记录其中遇到的各种问题,而且在工作中也没有用到,所以现在有很多都忘得差不多了,故现在重新学习一下Elasticsearch 的基本使用。
基础概念
Elasticsearch | MySQL |
索引(indices) | 数据库(database) |
类型(type) | 数据表(table) |
文档(Document) | 行(row) |
字段(Field) | 列(Columns) |
和关系型数据库一样,Elasticsearch集群可以包含多个索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包含多个文档(documents)(行),然后每个文档包含多个字段(Fields)(列)。
举例说明
我们在做学校的教务系统的时候一般都会创建一个school数据库,然后再school库里创建、设计满足各种业务需求的表,现这里类比关系型数据库我们使用Elasticsearch来做学生文档,所以为了创建学生目录,我们将进行如下操作:
-
为每个学生的文档(document)建立索引,每个文档包含了相应学生的所有信息。
-
每个文档的类型为
student
。 -
student
类型归属于索引school
。 -
school
索引存储在Elasticsearch集群中。
说了这么多其实操作起来很简单,这里我们使用Kibana的开发工具,如下图
在右侧的Console输入框输入:
PUT /school/student/1
{
"name":"余昊",
"sex":"男",
"age":25,
"address":"湖北省,十堰市,竹山县",
"course":["数学分析","数据结构","Java 程序语言设计"]
}
在上面的path中有三部分信息:
名字 | 说明 |
school | 索引名 |
student | 类型名 |
1 | 学生的id |
现在我们已经向Elasticsearch中添加了数据,下面我们来进行数据的检索
#查看id为1的学生的信息
GET /school/student/1
#查看全部学生信息,注意,这里把id换成_search
GET /school/student/_search
响应内容的hits
数组中包含了我们所有的三个文档。默认情况下搜索会返回前10个结果。
现在我们查一下性别为男的所有学生
GET /school/student/_search?q=sex:男
我们在请求中依旧使用_search
关键字,然后将查询语句传递给参数q=
。这样就可以得到所有性别为男的结果
我们也可以使用DSL语句查询来完成性别为男的所有学生
GET /school/student/_search
{
"query": {
"match": {
"sex":"男"
}
}
}
实际应用中可能会有更多更复杂的查询,比如我们现在需要查询性别为男年龄小于24岁的学生信息,则我们可以在语句中添加过滤器
GET /school/student/_search
{
"query": {
"bool": {
"filter": {
"range": {
"age": {
"lte": 24
}
}
}
, "must": [
{"match": {
"sex": "男"
}}
]
}
}
}
以上就是ES7.2 的初步使用的,后面会继续介绍更为复杂的查询,敬请期待