Elasticsearch 提供了一个可以执行查询的 Json 风格的 DSL(domain-specific language 领域特定语言)。这个被称为 Query DSL。该查询语言非常全面,并且刚开始的时候感觉有点复杂,真正学好它的方法是从一些基础的示例开始的。
回到我们上个例子,我们执行了这个查询 :
curl -XGET 'localhost:9200/bank/_search?pretty' -d'
{
"query": { "match_all": {} }
}'
分析上面的查询,query 部分告诉我们查询是如何定义的,match_all 部分就是我们要运行查询的简单的类型。该 match_all 查询简单的搜索了指定所有的所有文档。
除了 query 参数之外,我们也可以传递其它的参数以改变查询结果。在上部分的例子中我们传递了 sort,这里我们将传递 size :
curl -XGET 'localhost:9200/bank/_search?pretty' -d'
{
"query": { "match_all": {} },
"size": 1
}'
注意,如果不指定 size,默认为 10.
下面的例子做了一个 match_all 并且返回了 11 到 20 的文档。
curl -XGET 'localhost:9200/bank/_search?pretty' -d'
{
"query": { "match_all": {} },
"from": 10,
"size": 10
}'
该 from 参数(0 为基础)指定了文档开始的编号,size 参数指定了从 from 参数开始有多少个文档被返回。在实现搜索结果分页时这个功能是很有用的。注意,如果不指定 from 参数,默认为 0。
下面的例子做了一个 match_all,以及对结果通过账户余额按降序排序,并且返回了 top 10(默认大小)的文档。
curl -XGET 'localhost:9200/bank/_search?pretty' -d'
{
"query": { "match_all": {} },
"sort": { "balance": { "order": "desc" } }
}'