如何在查询中返回嵌套和非嵌套字段?

时间:2016-03-17 21:24:07

标签: elasticsearch

我有一个索引,其中包含以下映射:

{
  "build": {
    "properties": {
      "info": {
        "properties": {
          "ci": {
            "properties": {
              "generic": {
                "properties": {
                  "job": { ... }
                }
              }
            }
          }
        }
      },
      "tests": {
        "type": "nested",
        "properties": {
          "className": { ... }
          "result": {
            "properties": {
              "status": { ... }
            }
          }
        }
      }
    }
  }
}

查询会是什么状态会返回同一关联的info.ci.generic.job,而只返回与tests的查询和info.ci.generic.job的嵌套查询匹配的tests.result.status

1 个答案:

答案 0 :(得分:0)

_sourceinner_hits的组合可以满足您的需求:

{
  "_source": "info.ci.generic",
  "query": {
    "filtered": {
      "filter": {
        "and": [
          {
            "term": {
              "info.ci.generic.job.raw": "my-job-name"
            }
          },
          {
            "nested": {
              "path": "tests",
              "query": {
                "term": {
                  "tests.result.status": "failure"
                }
              },
              "inner_hits": {
                "size": 16777216
              }
            }
          }
        ]
      }
    }
  }
}

结果:

{
  "hits": {
    "hits": [
      {
        "inner_hits": {
          "tests": {
            "hits": {
              "hits": [
                {
                  "_source": {
                      "status": "failure"
                  }
                }
              ]
            }
          }
        },
        "_source": {
          "info": {
            "ci": {
              "generic": {
                "user": "builds",
                "build": "18471",
                "job": "CPIE-family-all-test",
                "host": "http://platform.builds.test.netflix.net/"
              }
            }
          }
        }
      }
    ]
  }
}