Elasticsearch - 如果数组包含元素,则包含在facet中

时间:2014-07-03 10:08:38

标签: elasticsearch elastica nosql-aggregation foselasticabundle

我试图找出是否可以在字段上进行分面/聚合,如果该字段(数组)包含1个或多个记录。

例如 - 假设我的索引中有3个文档,所有文档都在" user"类型。

  {
    "id": 1,
    "name": "Thomas",
    "surname": "Test",
    "photos": []
  },
  {
    "id": 2,
    "name": "Thomas",
    "surname": "Test",
    "photos": [
      "photo 1",
      "photo 2",
      "photo 3"
    ]
  },
  {
    "id": 3,
    "name": "Thomas",
    "surname": "Test",
    "photos": [
      "photo 1",
      "photo 2",
      "photo 3"
    ]
  }

我想要某种方式(使用聚合)来返回那些拥有(或者没有,看到我可以从_totalHits中减去_totalHits中)照片的用户数量"在此示例中,预期结果将是 2 ,看到2个用户有照片,或 1 ,因为1个用户没有照片。显然,我想要的首选是返回拥有照片的用户数。

这可能吗?如果是这样 - 我将使用哪种类型的聚合来完成此任务?

1 个答案:

答案 0 :(得分:0)

Missing Aggregation似乎是正确的工具:

  

基于字段数据的单桶聚合,它创建当前文档集上下文中缺少字段值的所有文档的存储桶(实际上,缺少字段或具有配置的NULL值集)。此聚合器通常与其他字段数据存储区聚合器(例如范围)结合使用,以返回由于缺少字段数据值而无法放置在任何其他存储区中的所有文档的信息。

此存储桶中没有的所有内容都是拥有照片的用户。 指南中有用的参考页:Dealing with Null Values