现在咱们先来几个简单的搜索练习。有两种运行搜索的基本方法:一是通过REST request URI发送搜索参数,另一个是通过REST request body发送。(即:一个是地址连参数,一个是在BODY中走POST)

通过request body的方式你将有更大表达空间,可以以可读性更强的JSON格式类定义你的查询条件。我们只会用request URI的方式做一个简单的示例,然后在剩余的教程过程中我们将使用request body方式。

用于搜索的REST API可以通过_search 服务来访问。下面的示例返回所有在bank索引下的文档:

GET /bank/_search?q=*&sort=account_number:asc&pretty

让我们先来仔细分析一下上面的调用。我们在bank索引中搜索,参数1=*命令Elasticsearch在该索引中匹配所有的文档。sort=account_number:asc参数表示将搜索结果按照文档的account_number升序排列。pretty参数,和以前一样,只是告诉Elasticsearch返回格式良好的JSON结果。返回的结果(部分)为:

{
"took" : 63,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1000,
"max_score" : null,
"hits" : [ {
"_index" : "bank",
"_type" : "account",
"_id" : "0",
"sort": [0],
"_score" : null,
"_source" : {"account_number":0,"balance":16623,"firstname":"Bradshaw","lastname":"Mckenzie","age":29,"gender":"F","address":"244 Columbus Place","employer":"Euron","email":"bradshawmckenzie@euron.com","city":"Hobucken","state":"CO"}
}, {
"_index" : "bank",
"_type" : "account",
"_id" : "1",
"sort": [1],
"_score" : null,
"_source" : {"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"amberduke@pyrami.com","city":"Brogan","state":"IL"}
}, ...
]
}
}

 

关于返回结果,我们看到如下部分:
>took - Elasticsearch执行该检索所用的毫秒数
>timed_out- 告诉我们是搜索请求是否超时
>_shards - 告诉我们搜索了多少个分片,以及成功和失败的分片数
>hits - 搜索结果
>hits.total - 匹配我们的检索条件的文档数量
>hits_hits - 实际搜索结果(默认前十条文档记录)
>hits.sort - 结果的排序键值(不指定排序的话则默认按照score排序)
>hits._score和max_score - 暂时忽略这些字段

下面是使用request body方式的同等搜索的替代方式:

GET /bank/_search
{
"query": { "match_all": {} },
"sort": [
{ "account_number": "asc" }
]
}

 

差别在于我们没有在URI中使用参数q=*,取而代之的是在请求_search API的body中以post方式提交JSON格式的检索条件。我们会在下一章节讨论这个JSON查询的细节。

理解这一点很重要,那就是一旦搜索结果返回,Elasticearch便完成了请求且不再维护(占用)服务器端资源或者搜索结果的指针。相对于其他的平台例如SQL这是个完全的差异,你可能会先获取结果的一部分子集显示在前端,然后使用某种服务器端有状态的指针的东西从服务器端获取剩余的结果。

 

 

 

本文系本人根据官方文档的翻译,能力有限、水平一般,如果对想学习Elasticsearch的朋友有帮助,将是本人的莫大荣幸。
原文出处:https://www.elastic.co/guide/en/elasticsearch/reference/current/_the_search_api.html

 

 posted on 2017-05-02 11:35  段子手6哥  阅读(155)  评论(0编辑  收藏  举报