gpt4 book ai didi

elasticsearch - 如何在Elasticsearch中对多值字段进行桶聚合

转载 作者:行者123 更新时间:2023-12-02 23:00:49 26 4
gpt4 key购买 nike

假设我的elasticsearch索引中的每个文档都是一个博客帖子,其中仅包含两个字段,标题和标签。标题字段只是一个字符串,而标签字段是一个多值字段。

如果我有三个这样的文档:

title      tags
"blog1" [A,B,C]
"blog2" [A,B]
"blog3" [B,C]

我想按所有可能标记的唯一值进行存储,但是如何获得如下所示的结果,该结果在存储区中包含三个项目。还是有任何有效的选择?
{A: ["blog1", "blog2"]}
{B: ["blog1", "blog2", "blog3"]}
{C: ["blog1", "blog3"]}

如果有人可以在elasticsearch python API中提供答案,那就太好了。

最佳答案

您可以简单地在terms字段上使用tags聚合,并使用另一个嵌套的top_hits子聚合。通过以下查询,您将获得预期的结果。

{
"size": 0,
"aggs": {
"tags": {
"terms": {
"field": "tags"
},
"aggs": {
"top_titles": {
"top_hits": {
"_source": ["title"]
}
}
}
}
}
}

与Python一起使用很简单:
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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com