我有一个数组:
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/,但我无法以这种方式改变我的结构。还有其他建议吗?
答案 0 :(得分:0)
您需要使用嵌套聚合和过滤器聚合来实现此目的。
但在此之前,您可能需要按以下方式重新构建数据
{
"people": [
{
"name": "Darrell"
},
{
"name": "Karen"
},
{
"name": "Gary"
}
]
}
接下来,将字段人员嵌套在映射中。 现在,每个人的内部对象都将被视为内部文档。
现在使用以下聚合来获取所需内容 -
{
"aggs": {
"innerDOcuments": {
"nested": {
"path": "people"
},
"aggs": {
"filterPeople": {
"filter": {
"name": "karen"
},
"aggs": {
"peoples": {
"terms": {
"field": "name"
}
}
}
}
}
}
}
}