具有内部命中的弹性搜索部分字段

时间:2015-10-26 16:33:59

标签: elasticsearch

执行partial_fields过滤器/查询时是否可以使用nested参数?

例如,此查询将仅返回我要查找的字段hits

{
  "query": {
      "filtered": {
          "query": {
              "ids": {
                  "type": "users",
                  "values": [
                      "111"
                  ]
              }
          },
          "filter": {
              "nested": {
                  "path": "entitlements",
                  "filter": {
                      "bool": {
                          "must": [
                              {
                                  "term": {
                                    "program": "program-a"
                                  }
                              }
                         ]
                      }
                  },
                  "inner_hits": {
                      "size": 999
                  }
              }
          }
      }
  },
  "partial_fields": {
      "partial": {
          "include": [
              "entitlements.accountNumber",
              "entitlements.name",
              "entitlments.numbers"
          ]
      }
  }
}

但是inner_hits部分,不会返回任何字段。

   "inner_hits": {
           "entitlements": {
              "hits": {
                 "total": 1,
                 "max_score": 1,
                 "hits": [
                    {
                       "_index": "myGreatIndex",
                       "_type": "users",
                       "_id": "111",
                       "_nested": {
                          "field": "entitlements",
                          "offset": 0
                       },
                       "_score": 1,
                       "fields": {
                          "partial": [
                             {}
                          ]
                       }
                    }
                 ]
              }
           }
        }

有没有办法将其应用于inner_hits

1 个答案:

答案 0 :(得分:5)

inner_hits部分内,您可以改用source filteringpartial_fields适用于外部匹配,_source适用于inner_hits

因此,您可以像这样指定inner_hits

"inner_hits": {
    "size": 999,
    "_source": [
          "accountNumber",
          "name",
          "numbers"
    ]
}

请注意,在inner_hits结果中,您仍会获得一个空的partial数组,但您需要的字段会显示在_source部分中。

另外值得注意的是,如果您使用不合格的名称指定partial_fields(请参阅下文),则部分字段会显示在您的inner_hits结果中,但不会外部命中了。所以你需要弄清楚哪种方法最适合你。

"partial_fields": {
   "partial": {
     "include": [
        "accountNumber",
        "name",
        "numbers"
     ]
   }
}