ElasticSearch日常开发使用
:::tip 在CentOS上安装Headless Chromium的分步指南。 :::
索引操作
索引(也就是index)的常用的相关操作包括:新建索引、删除索引、
如何新建索引?
新建索引, 可以直接向 ElasticSearch 服务器发送 PUT
请求。例如,下面的例子是新建一个名为 users
的索引。
|
|
服务器将返回一个JSON对象,其中 acknowledged
代表是否操作成功,shards_acknowledged
是否分片成功,index
表示操作的索引名称,当前就是 users
。
|
|
如何删除索引?
删除索引,直接向 ElasticSearch 服务器发送 DELETE
请求,即可删除索引。例如,下面的例子是删除一个名为 users
的索引。
|
|
服务器将返回一个JSON对象,具体如下所示:
|
|
如何查看所有索引?
查看所有索引可以通过 _cat
加 _indices
的方式向 ElasticSearch 服务器发送一个 GET
请求,即可查看 ElasticSearch 服务器的所有索引列表,具体可以执行如下请求:
|
|
如何查看某个索引下的所有文档总数?
统计一个索引下的所有文档总数,也是一个非常常见的操作,可以直接通过 索引名称
加 _count
方式,向 ElasticSearch 服务器发送一个 GET
快速实现,具体可以执行如下命令:
|
|
分组聚合数据
|
|
文档操作
ElasticSearch中索引就是关系型数据库中的表,而文档就相当于关系型数据库中的记录,这样理解起来也非常简单。
在elasticsearch 7.0.0版本必须使用单index,单type,多type结构则会完全移除。
如何添加文档?
在 ElasticSearch 7.0.0 及以后的版本中,官方要求必须使用单index,单type索引数据,并且默认type是 _doc
,添加文档有两种方式:
- 第一种是指定id值,id可以是整型,也可以是字符串,这个时候HTTP请求类型只能是
PUT
。 - 第二种是不指定id值,这个时候HTTP请求类型只能是
POST
,最终的文档数据_id
字段是一个随机字符串。
如下面示例是通过明确指定id
值的方式索引文档。注意这里的索引文档,与索引不是一个概念,索引作为名词是表示索引,索引作为动词时表示将文档添加到索引。
|
|
ElasticSearch 服务器,将会返回一个 JSON 对象,具体如下所示,其中 result
,表示文档的添加状态,当前的执行结果为 created
。
|
|
如何查询文档?
对于查询指定id值的文档,还是比较简单的,可以向 ElasticSearch 服务器发送一个 GET
请求,即可获取到指定id值的文档。例如,如下示例则是查询索引为 users
并且 id
为 1
的文档操作。
|
|
ElasticSearch 服务器,则会返回如下 JSON 对象。注意,如果文档存在则 found
字段值为 true
,否则为 false
。
|
|
这里只是简单的通过指定 id 查询文档数据,后面会介绍数据检索查询文档操作。
如何更新文档?
对于上面添加的 user 用户,id
为 1
,现在想将其用户名 username
修改为 tom
,你可以指定全部字段,也可以指定部分字段,例如下面这个例子仅仅只是指定了提交的JSON数据对象为 {"username": "tom"}
,并没有指定 title
和 sex
字段,这完全是可以的。
|
|
ElasticSearch 服务器将会返回如下JSON对象,请注意当前的 result
为 updated
,表示数据已经更新成功,而 _version
版本号也发生了变化,之前添加数据时,_version
版本号为 1
,现在因为有数据更新了,它的数值也就更新了,具体数值为 2
,注意哦,只要文档更新一次,_version
版本号也会随之加 1
更新,它表示当前文档存在多少次更新操作。
|
|
如何删除文档?
删除文档操作,通过向 ElasticSearch 服务器发送一个 DELETE
请求来完成该操作。例如,如下示例则是删除 _id
为 1
的文档操作。
|
|
ElasticSearch 服务器,将返回如下所示 JSON 对象。注意,当前 result
字段值为 deleted
,表示 _id
为 1
的文档存在并且已经成功删除。如果文档记录不存在,则 result
字段值将为 not_found
。
|
|
文档检索
如何查看某个索引下的所有文档?
查看一个索引下的所有文档,几乎是最简单的搜索了,可以直接通过 索引名称
加 _search
方式,向 ElasticSearch 服务器发送一个 GET
请求即可快速实现,例如,如下示例则是查询索引为 users
下的所示文档。
|
|
ElasticSearch 服务器,则会返回如下所示 JSON 对象。
|
|
其中 took
表示检测操作耗时,单位是毫秒。timed_out
字段表示该检索操作是否超时。hits
字段表示命中的记录,hits
子字段的具体含义如下所示:
- total: 返回记录数。
- value: 具体的记录条数,当前示例是 2 条。
- relation: 亲属关系,当前示例是
eq
相等。- max_score: 最高的匹配程度,当前示例是 1.0。
- hits: 命中的记录组成的数组。
命中的 hits
文档数组中的每一条文档,都有一个 _score
字段,表示匹配的程度,值越大说明匹配程度就越相似,默认是按照这个 _score
字段降序排列。
如何进行全文搜索?
|
|