执行搜索

现在我们已经看到了一些基本的搜索参数,让我们深入探讨一些查询DSL。让我们先来看看返回的文档字段。默认情况下,全JSON文档返回所有搜索的一部分。这被称为源(_source字段在搜索命中)。如果我们不希望整个源文档作为返回,我们拥有从源文件范文几个字段的能力 。

这个例子显示了如何返回两个字段,account_number 和balance (_source内部),从搜索内部:


curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match_all": {} },
  "_source": ["account_number", "balance"]
}'

注意,上述例子只是减少了_source字段。但在它里面它仍然只会返回一个名为_source的字段,只有字段account_number 和balance 都包括在内。

如果你有来自SQL的背景,上面是在概念上有点类似SQL SELECT FROM字段列表

现在,让我们继续查询部分。此前,我们已经看到了如何match_all 查询用来匹配所有文档。现在,让我们引入一个叫做新的查询匹配的查询,这可以被认为是一个基本的派出搜索查询(即针对特定的字段作出或设置字段的搜索)。

此示例返回编号为20的帐户:


curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match": { "account_number": 20 } }
}'

这个例子返回一个包含地址术语“mill”的所有帐户:


curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match": { "address": "mill" } }
}'

这个例子返回一个包含地址术语“mill”或“lane”的所有帐户:


curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match": { "address": "mill lane" } }
}'

这个例子的一个变种匹配(match_phrase)返回包含在地址短语“mill lane”的所有帐户:


curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match_phrase": { "address": "mill lane" } }
}'

现在让我们来介绍一下布尔(EAN)查询。该bool 查询允许我们撰写较小的查询到使用布尔逻辑更大的查询。

这个例子组成2个 match 查询并返回包含在地址“mill”和“lane”的所有帐户:


curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": {
    "bool": {
      "must": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }
}'

在上述的例子中,bool should指定为一个文件被认为是匹配必须为真的的所有查询。

相反,这个例子组成2个 match查询并返回包含在地址“mill”或“lane”的所有帐户:


curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": {
    "bool": {
      "must_not": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }
}'

在上述的例子中,布尔must_not子句指定的查询没有为一个文件被视为匹配,其中必须是真实的列表。

我们可以结合必须,应该,并且must_not一个内同时子句布尔查询。此外,我们可以撰写布尔查询内的任何这些的布尔条款以模仿任何复杂的多级布尔逻辑。

此示例返回40多岁人,但并不住在ID(AHO)的所有帐户:


curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": {
    "bool": {
      "must": [
        { "match": { "age": "40" } }
      ],
      "must_not": [
        { "match": { "state": "ID" } }
      ]
    }
  }
}'

results matching ""

    No results matching ""