现在让我们从一些简单的搜索开始。这里两个运行搜索的基本方法 : 一个是通过使用 REST request URI 发送搜索参数,另一个是通过使用 REST request body 来发送它们。请求体的方法可以让您更具有表现力,并且可以在一个更可读的 JSON 格式中定义您的搜索。我们会尝试使用一个 REST request URI 的示例,但是在本教程的其它部分,我们将只使用 REST request body 的方法。
搜索的 REST API 从 _search 的尾部开始。这个示例返回了 bank 索引中的所有文档 :
curl -XGET 'localhost:9200/bank/_search?q=*&sort=account_number:asc&pretty'
首先让我们切开搜索的调用。我们在 bank 索引中执行搜索(_search 尾部),然后 q= 参数命令 *Elasticsearch 去匹配索引中所有的文档。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":"[email protected]","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":"[email protected]","city":"Brogan","state":"IL"}
}, ...
]
}
}
在响应中,我们可以看到以下几个部分 :
这里是上面相同的搜索,使用了 REST request body 方法 :
curl -XGET 'localhost:9200/bank/_search?pretty' -d'
{
"query": { "match_all": {} },
"sort": [
{ "account_number": "asc" }
]
}'
这里不同的地方是而不是在 URL 中传递 q= ,我们 *POST 一个 JSON 风格的查询请求体到 _search API。我们将在下一部分讨论这个 JSON** 查询。
需要了解,一旦您搜索的结果被返回,Elasticsearch 完成了这次请求,并且不会维护任何服务端的资源或者结果的 cursor(游标)。这与其它的平台形成了鲜明的对比,例如 SQL,您可能首先获得查询结果的子集,如果您想要使用一些服务端有状态的 cursor(光标)来抓取(或者通过分页)其它的结果,然后您必须再次回到服务器。