作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我的elasticsearch索引中的每个文档都是一个博客帖子,其中仅包含两个字段,标题和标签。标题字段只是一个字符串,而标签字段是一个多值字段。
如果我有三个这样的文档:
title tags
"blog1" [A,B,C]
"blog2" [A,B]
"blog3" [B,C]
{A: ["blog1", "blog2"]}
{B: ["blog1", "blog2", "blog3"]}
{C: ["blog1", "blog3"]}
最佳答案
您可以简单地在terms
字段上使用tags
聚合,并使用另一个嵌套的top_hits
子聚合。通过以下查询,您将获得预期的结果。
{
"size": 0,
"aggs": {
"tags": {
"terms": {
"field": "tags"
},
"aggs": {
"top_titles": {
"top_hits": {
"_source": ["title"]
}
}
}
}
}
}
from elasticsearch import Elasticsearch
client = Elasticsearch()
response = client.search(
index="my-index",
body= {
"size": 0,
"aggs": {
"tags": {
"terms": {
"field": "tags"
},
"aggs": {
"top_titles": {
"top_hits": {
"_source": ["title"]
}
}
}
}
}
}
)
# parse the tags
for tag in response['aggregations']['tags']['buckets']:
tag = tag['key'] # => A, B, C
# parse the titles for the tag
for hit in tag['top_titles']['hits']['hits']:
title = hit['_source']['title'] # => blog1, blog2, ...
关于elasticsearch - 如何在Elasticsearch中对多值字段进行桶聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34619509/
我是一名优秀的程序员,十分优秀!