第一个嵌套对象的源过滤

时间:2015-10-09 10:08:47

标签: elasticsearch

我在查询上使用source filtering只返回一小组信息,在该信息中我想要一个对象的第一个照片网址:

"query" : { ... },
"_source" : ["name", "photos.thumbnail_url"]

当然,对于每个项目存储的所有照片都会返回thumbnail_url

有没有办法只使用源过滤获得第一张嵌套照片的thumbnail_url

(我很欣赏这样做的一种方法是分别索引第一张照片,只选择源过滤器以包含那个单独的字段,但我问的是没有单独的字段是否可行。)

(我已经猜到了一些没有运气的方法:photos.0.thumbnail_urlphotos[0].thumbnail_urlphotos.first.thumbnail_url

1 个答案:

答案 0 :(得分:1)

只是尝试使用inner_hits

来尝试,因为我不知道您的映射
{
  "size": 5,
  "_source": ["name"], 
  "query": {
    "filtered": {
      "query": {
        "match": {
          "name": "whatever"
        }
      },
      "filter": {
        "nested": {
          "path": "photos",
          "query": {
            "match_all": {}
          },
          "inner_hits": {
            "size": 1,
            "_source": ["thumbnail_url"]
          }
        }
      }
    }
  }
}

或使用script field

  "script_fields": {
    "FIELD": {
      "script": "urls=_source.photos.thumbnail_url;return urls[0]"
    }
  }

我不认为可以通过源过滤来实现这一点。