#
上一篇文章中,我们介绍了Elasticsearch集群运行情况、索引、文档的CRUD操作了,下面让我们来愉快地学习一些新的命令吧。
批处理
Elasticsearch除了能够索引,更新和删除单个文档之外,还提供了使用_bulkAPI批量执行上述任何操作的功能。此功能非常重要,因为它提供了一种非常有效的机制,可以尽可能快地执行多个操作,并尽可能少地进行网络往返。
作为一个简单示例,以下调用在一个批量操作中索引两个文档(ID 1 - John Doe和ID 2 - Jane Doe):
1 | [builder @master~] $ curl - X POST "localhost:9200/customer/_doc/_bulk?pretty" - H 'Content-Type: application/json' - d ' |
下面示例更新第一个文档( ID为1), 然后在一个批量操作中删除第二个文档( ID为2):
1 | [builder @master~] $ curl - X POST "localhost:9200/customer/_doc/_bulk?pretty" - H 'Content-Type: application/json' - d ' |
请注意,对于删除操作,之后没有相应的源文档,因为删除只需要删除文档的ID。
Bulk API不会因其中一个操作失败而失败。如果单个操作因任何原因失败,它将继续处理其后的其余操作。批量API返回时,它将为每个操作提供一个状态(按照发送的顺序),以便您可以检查特定操作是否失败。
数据操作
导入数据
下面我们在某个文件夹中保存着1个json文件,内容如下:
1 | [builder@master ~/Developer/esTempData]$ cat accounts.json |
导入我们的json文件数据到Elasticsearch,需要在json文件的当前路径下执行:
1 | [builder@master ~/Developer/esTempData]$ curl -H "Content-Type: application/json" -XPOST "localhost:9200/bank/_doc/_bulk?pretty&refresh" --data-binary "@accounts.json" |
1 | ## 查看索引数据,可以看到第2行的数据有1000条记录了 |
搜索API
搜索有两种基本方式:一种是通过发送搜索参数REST请求URI和其他通过发送他们REST请求JSON主体。请求JSON体方法更具表现力,并以更可读的JSON格式定义搜索。我们将尝试一个请求URI方法的示例,但是对于本教程的其余部分,我们将专门使用请求体方法。
可以从_search
端点访问用于搜索的REST API 。此示例返回bank
索引中的所有文档:
1 | [builder@master ~]$ curl -X GET 'localhost:9200/bank/_search?q=*&sort=account_number:asc&pretty' |
该q=*
参数指示Elasticsearch匹配索引中的所有文档。该sort=account_number:asc
参数指示使用account_number
每个文档的字段以升序对结果进行排序。该pretty
参数再次告诉Elasticsearch返回漂亮的JSON结果。
响应(部分显示):
1 | { |
关于response响应字段含义:
took
- Elasticsearch执行搜索的时间(以毫秒为单位)timed_out
- 告诉我们搜索是否超时_shards
- 告诉我们搜索了多少个分片,以及搜索成功/失败分片的计数hits
- 搜索结果hits.total
- 符合我们搜索条件的文档总数hits.hits
- 实际的搜索结果数组(默认为前10个文档)hits.sort
- 对结果进行排序键(如果按分数排序则丢失)hits._score
并max_score
- 暂时忽略这些字段
下面使用JSON请求体的方法完成上述相同的搜索:
1 | $ curl -X GET 'localhost:9200/bank/_search' -d '{ |
好啦,本文暂时介绍这几个命令的简单使用方法。更多elasticsearch的相关知识我们在后面再娓娓道来…