首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于嵌套对象的集合对文档进行排序

基于嵌套对象的集合对文档进行排序
EN

Stack Overflow用户
提问于 2016-02-18 17:05:40
回答 1查看 56关注 0票数 1

我想根据文档上的嵌套属性对文档进行排序。假设我有以下文档:

代码语言:javascript
复制
{
    "id": 1,
    "attributes": [
        {
            "name": "a",
            "value": 1
        },
        {
            "name": "b",
            "value": 2
        }
    ]
}

{
    "id": 2,
    "attributes": [
        {
            "name": "a",
            "value": 2
        },
        {
            "name": "b",
            "value": 2
        }
    ]
}

{
    "id": 3,
    "attributes": [
        {
            "name": "b",
            "value": 1
        }
    ]
}

排序应该比较相同属性的值,所以它应该首先比较属性"a“的值。

如果组"a“的值相同,则应该继续比较属性"b”。

如果整个组都丢失了,则缺少该属性的文档将丢失比较。

属性可以具有任何名称和值,因此事先不知道属性名称。

我已经在我的客户端应用程序中编写了这个算法,我只需要一种使用ElasticSearch来实现的方法。

EN

回答 1

Stack Overflow用户

发布于 2016-04-14 08:23:02

您可以尝试在两个查询中执行此操作。下面的内容都没有经过测试,只是为了给你一个方向去考虑。

第一个查询是一个聚合,以获得不同的attribute.name列表

第二个包含实际的查询,类似于下面的sort (您必须根据上面的agg的结果构建这个排序)

代码语言:javascript
复制
{
    "query": {"match_all": {}},
    "sort": [
        {
            "attributes.value": {
                "nested_path": "attributes",
                "nested_filter": {"term": {"attributes.name": "a"}}
            }
        }, 
        {
            "attributes.value": {
                "nested_path": "attributes",
                "nested_filter": {"term": {"attributes.name": "b"}}
            }
        },
        ...
    ]
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35476996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档