执行搜索:
现在我们已经看奥一些基本的搜索参数,让我们进一步深入到查询DSL。
让我们首先看看返回的文档字段。
默认, 完整的JSON 文档白返回做我所有的搜索的一部分。
这是被称为source(_source字段在搜索hits).
如果我们不需要整个资源文档返回,我们有negligible只请求部分字段
这个例子显示如何返回两个字段,account_number and balance 在_source
GET /test/_search
{
"query": { "match_all": {} },
"_source": ["account_number", "balance"]
}
注意 上面的例子简单的减少了 _source field. 它仍旧只会返回一个字段命名为_source,但是只有account_number和balance是被包含的
如果你有一个SQL背景, 上面的类似SQL select from 字段列表。
现在让我们转到查询部分,此前,我们已经看到match_all查询是用于匹配所有的文档。
让我们介绍一个新的查询称为match query,可以被认为是一种基本的字段搜索查询。
This example returns the account numbered 20:
这个例子返回所有账户包含term "mill" 在地址列:
GET /bank/_search
{
"query": { "match": { "address": "mill" } }
}
"hits": [
{
"_index": "bank",
"_type": "account",
"_id": "472",
"_score": 2.8050785,
"_source": {
"account_number": 472,
"balance": 25571,
"firstname": "Lee",
"lastname": "Long",
"age": 32,
"gender": "F",
"address": "288 Mill Street",
"employer": "Comverges",
"email": "leelong@comverges.com",
"city": "Movico",
"state": "MT"
}
}
这个例子返回所有账户包含term "mill" 或者"lane" 在address:
address 包含mill 或者lane
让我们介绍 bool(ean) query, bool query 允许我们来构成更小的查询到更大的查询使用布尔逻辑:
这个例子包含2个match 查询 和返回所有的账户包含"mill" 和"lane" 在address
GET /bank/_search
{
"query": {
"bool": {
"must": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}