基本操作

date
Jul 26, 2021
slug
elasticsearch-guide-basic-operation
status
Published
tags
Elasticsearch
读书
summary
type
Page
Elasticsearch 提供 RESTful API 访问集群
 

查看集群状态

其中 status 字段表示集群当前状态,有三个值:
  • Green - everything is good (cluster is fully functional) 都挺好
  • Yellow - all data is available but some replicas are not yet allocated (cluster is fully functional) 数据没问题但有部分副本没有被分配,当测试时如果只有一个节点在线就会出现这个情况,Elasticsearch 要求主分片和副本不允许分配到同一节点,在只有一个节点的情况下就不会分配副本了,结果就是副本未分配。当有另外一个节点加入到集群中时,Elasticsearch 会自动创建并分配副本。
  • Red - some data is not available for whatever reason (cluster is partially functional) 部分数据有问题了,可能无法写入之类的,集群部分可用,只能提供部分服务。
 

查看节点状态

 

查看索引状态

 

创建索引

 

删除索引

 

在索引下创建 Mapping

其中定义了 user 索引的 document 需要有一个 name 类型为 text 的属性,其加入索引时的分词器使用 ik_max_word,搜索时使用 ik_smart 分词器。
这一步也可以不做而直接往索引中插入文档,Elasticsearch 会自动判断字段类型,但对于需要支持搜索的字段,还是需要指定一下分词器的。
 

查看 Mapping

 

插入一个 document

创建文档时如果不指定 _id,Elasticsearch 会自动分配唯一值。Elasticsearch 也可以往不存在的 index 里插入,此时会自动创建 index。
 

更新 document

如果在 uri 后面跟一个 doc_id 则会针对这个 doc 做更新,但 Elasticsearch 不会在原来的 document 上做修改,而是新增一个 document,而将原来的 document 删除,这就相当于新 doc 完全覆盖了旧的 doc,所有字段都得是新的。
要想局部字段更新,可以使用 _update URI:
注意其中 URI 指定了 doc_id 后,又跟了一个 _update ,并且 body 中使用了 "doc" 做 key,这样只需要指定想要更新的字段即可。
 

删除 document

直接用 HTTP DELETE 方法调用一个指定了 doc_id 的 URI 就可以。
还可以做条件删除,在 path 上指定 _delete_by_query,会删除符合 body 中条件的 doc。
 

批量操作 _bulk

批量操作是个好活,一般在大量跑数据的场景下会用到。其要求 body 体中的格式为 ndjson,并在请求 header 中指定 Content-Type: application/x-ndjson
ndjson 1. 要求文本每行以 \n 结尾 2. 每行都是一个有效的 json 串。
ndjson 的官网说明:http://ndjson.org/
Elasticsearch 的 _bulk 操作支持 index、create、delete、update 四种 action,index 和 create 需要紧接着一行操作数据 optional_source, delete 直接在 action 的 meta_data 里指定删除的 id 即可,update 操作需要修改的那部分数据。
本例中由于在 uri 中指定了 index,所以在每条 action 中可以不指定,否则需要在 action 中指定操作的 index。
_bulk 批量执行不会因为某一个 action 执行失败而中断整个执行,而是继续执行下一条 action,最后在返回的结果中会给出每一条 action 的执行结果。
 

搜索

其中几个值的含义:
  • took – 搜索总耗时
  • timed_out – 执行是否超时
  • _shards – 搜索了多少个 shards
  • hits – 搜索结果
  • hits.total – 搜索命中的文档数量
  • hits.hits – 命中的文档内容
  • hits.sort - 排序字段
  • hits._score  - 文档相关度
  • hits.max_score - 命中的文档中最大的相关度
 

举例说明搜索 DSL 几个用法:

bool 查询内部可以嵌套 bool 查询,来模拟构造出复杂的多层级布尔逻辑关系。
 

聚合操作

 

© 菜皮 2020 - 2023