阵列上的Elasticsearch聚合

时间:2015-08-19 05:11:49

标签: ruby-on-rails elasticsearch

我有一个数组:

people: ["Darrell","Karen","Gary"]

索引:

indexes :people, type: 'string', include_in_all: false

我希望能够搜索此数组中各个项目的聚合,但是使用此结构,搜索“Darrel”也会在桶结果中返回“Karen”和“Gary”。搜索“Karen”不会返回结果中数组中的任何项目。

这里有一些建议http://coderify.com/aggregates-array-field-and-autocomplete-funcionality-in-elasticsearch/,但我无法以这种方式改变我的结构。还有其他建议吗?

1 个答案:

答案 0 :(得分:0)

您需要使用嵌套聚合和过滤器聚合来实现此目的。

但在此之前,您可能需要按以下方式重新构建数据

{
  "people": [
    {
      "name": "Darrell"
    },
    {
      "name": "Karen"
    },
    {
      "name": "Gary"
    }
  ]
}

接下来,将字段人员嵌套在映射中。 现在,每个人的内部对象都将被视为内部文档。

现在使用以下聚合来获取所需内容 -

{
  "aggs": {
    "innerDOcuments": {
      "nested": {
        "path": "people"
      },
      "aggs": {
        "filterPeople": {
          "filter": {
            "name": "karen"
          },
          "aggs": {
            "peoples": {
              "terms": {
                "field": "name"
              }
            }
          }
        }
      }
    }
  }
}