gpt4 book ai didi

elasticsearch - ElasticSearch-查询以过滤和聚合嵌套对象术语

转载 作者:行者123 更新时间:2023-12-03 00:06:45 25 4
gpt4 key购买 nike

我在以下类型的 flex 搜索索引中嵌套了对象

 "_source": {
"NAME": "MNQ",
"LAST_MOD_DATE": 1373587200000,
"ACTIVE_FL": "Y",
"ID": "1008",
"USER": [
{
"USR_ID": 499,
"STATUS": "INACTV",
"NAME": "ABC"
},
{
"USR_ID": 53,
"STATUS": "ACTV",
"NAME": "XYZ"
}
]
}

我有以下查询索引的用例:
  • 获取所有 Activity 用户的特定ID。例如:我想获得对id 1008处于 Activity 状态的用户,在这种情况下,该用户将是XYZ
  • 获取所有 Activity 用户。例如:我执行match_all查询,并且希望对USER.NAME进行汇总,但它只应向我返回 Activity 用户的名称。

  • 我在执行这些嵌套操作时遇到了麻烦,因为搜索 Activity 状态将返回一条记录,其中甚至有一个用户处于 Activity 状态。我无法专门过滤掉不活跃的用户。非常感谢在这方面的任何帮助。

    最佳答案

    由于您始终对获取用户感兴趣,因此在这种情况下,parent-child关系比用户的嵌套文档类型要好。与嵌套类型一样,响应将具有不必要的有效负载,带有inner_hits的 flex 对象。

    为嵌套关联然后嵌套类型提供更好的导航和更灵活的查询。

    同样,在映射中,您可能需要选择类型为keyword或创建自定义分析器以在搜索时保留大小写,以区分大小写。

    父子关系的映射

    PUT parent_child_index
    {
    "mappings": {
    "parent_document": {
    "properties": {
    "NAME": {
    "type": "keyword"
    }
    }
    },
    "user": {
    "_parent": {
    "type": "parent_document"
    },
    "properties": {
    "USER_ID": {
    "type": "keyword"
    },
    "STATUS": {
    "type": "keyword"
    },
    "NAME": {
    "type": "keyword"
    }
    }
    }
    }
    }

    索引父子文档
    POST parent_child_index/parent_document
    {
    "NAME": "MNQ",
    "LAST_MOD_DATE": 1373587200000,
    "ACTIVE_FL": "Y",
    "ID": "1008"
    }


    POST parent_child_index/user?parent=AVyBzQXmp_hWdUR22wGr
    {
    "USR_ID": 53,
    "STATUS": "ACTV",
    "NAME": "XYZ"
    }

    查询
    POST parent_child_index/user/_search
    {
    "query": {
    "bool": {
    "must": [{
    "has_parent": {
    "parent_type": "parent_document",
    "query": {
    "bool": {
    "must": [{
    "term": {
    "ID": {
    "value": "1008"
    }
    }
    }]
    }
    }
    }
    },
    {
    "term": {
    "STATUS": {
    "value": "ACTV"
    }
    }
    }
    ]
    }
    }
    }

    POST parent_child_index/user/_search
    {
    "size": 0,
    "aggs": {
    "active_users": {
    "filter": {
    "term": {
    "STATUS": "ACTV"
    }
    },
    "aggs": {
    "user_name": {
    "terms": {
    "field": "NAME",
    "size": 10
    }
    }
    }
    }
    }
    }

    关于elasticsearch - ElasticSearch-查询以过滤和聚合嵌套对象术语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44398664/

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