gpt4 book ai didi

java - 基于嵌套数组的Elasticsearch聚合查询

转载 作者:行者123 更新时间:2023-12-02 10:34:09 25 4
gpt4 key购买 nike

我的索引中确实有如下文档

{
"bookName" : "coolbook",
"timeStamp" : "2018-11-19T12:52:17.000Z",
"referenceId" : "auth_test_01_01_000004",
"peoplestatus" : [
{
"personId" : "p1",
"status" : "like"
},
{
"personId" : "p2",
"status" : "dislike"
},{
"personId" : "p3",
"status" : "netrual"
}
]
}

现在我想查询 p1,p2 的图书数量聚合,如下所示图书数量

  1. p1 喜欢但 p2 不喜欢
  2. p1、p2 都喜欢
  3. p2 不喜欢但 p1 喜欢
  4. p1、b2 都不喜欢

感谢您的帮助

最佳答案

由于您需要每个存储桶具有不同过滤器的存储桶,filters aggregation最适合这个。根据您的评论,将有两个人员 ID 进行比较,以下是对以下两个组合的查询:

  • P1 喜欢但 P2 不喜欢
  • P1 和 P2 都喜欢


{
"query": {
"match_all": {}
},
"aggs": {
"books": {
"filters": {
"filters": {
"P1L_P2DL": {
"bool": {
"must": [
{
"nested": {
"path": "peoplestatus",
"query": {
"bool": {
"must": [
{
"bool": {
"must": [
{
"term": {
"peoplestatus.personId": "p1"
}
},
{
"term": {
"peoplestatus.status": "like"
}
}
]
}
}
]
}
}
}
},
{
"nested": {
"path": "peoplestatus",
"query": {
"bool": {
"must": [
{
"bool": {
"must": [
{
"term": {
"peoplestatus.personId": "p2"
}
},
{
"term": {
"peoplestatus.status": "dislike"
}
}
]
}
}
]
}
}
}
}
]
}
},
"L1N3": {
"bool": {
"must": [
{
"nested": {
"path": "peoplestatus",
"query": {
"bool": {
"must": [
{
"bool": {
"must": [
{
"term": {
"peoplestatus.personId": "p1"
}
},
{
"term": {
"peoplestatus.status": "like"
}
}
]
}
}
]
}
}
}
},
{
"nested": {
"path": "peoplestatus",
"query": {
"bool": {
"must": [
{
"bool": {
"must": [
{
"term": {
"peoplestatus.personId": "p2"
}
},
{
"term": {
"peoplestatus.status": "like"
}
}
]
}
}
]
}
}
}
}
]
}
}
}
}
}
},
"size": 0
}


关于java - 基于嵌套数组的Elasticsearch聚合查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53414388/

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