【问题标题】:How to extract documents that has 2 or more nested object?如何提取具有 2 个或更多嵌套对象的文档?
【发布时间】:2019-09-18 06:14:25
【问题描述】:

我正在尝试在 Elasticsearch 6.1.2 上提取具有 2 个或更多嵌套对象的文档。
我们的索引有这样一个简单的映射。

    {
        "organizations": {
            "type": "nested",
            "properties": {
            "id": {
                "type": "text"
            }
            "name": {
                "type": "text"
            }
        }
    }

我们想提取具有 2 个或更多组织的文档。
像这样

    {
        "organizations": [
            {
                "id" : "1",
                "name" : "company A"
            },
            {
                "id" : "2",
                "name" : "company B"
            }
        ]
    }

一些文章说无痛脚本查询对这种情况很有用,
所以我希望可以通过以下查询来实现这一点

    {
        "query": {
            "nested": {
                "path": "organizations",
                "query": {
                    "bool": {
                        "must": {
                            "script": {
                                "script": {
                                    "inline": "doc['organizations'].length > 1",
                                    "lang": "painless"
                                }
                            }
                        }
                    }
                }
            }
        }
    }

但 Elasticsearch 说

    {
        "caused_by": {
            "type": "illegal_argument_exception",
            "reason": "No field found for [organizations] in mapping with types [top]"
        }
    }

您能否给我一些关于如何实现这一目标的想法?欢迎任何想法或选择。
非常感谢。

【问题讨论】:

    标签: elasticsearch elasticsearch-painless


    【解决方案1】:

    好吧,我终于发现了,我们不能通过嵌套对象计数来查询。

    因为我们必须访问 _source 字段来计算嵌套对象
    但目前 Elasticsearch 不支持访问 _source 字段,但出于性能原因更新查询除外。
    因此只有一种方法是在客户端检索所有文档并过滤...

    【讨论】:

    • 您也可以考虑在 ES 文档中显式存储嵌套对象的数量。在这种情况下,您将能够使用常规的range 查询。
    • @NikolayVasiliev 哦,我明白了! ,我们会考虑存储计数,谢谢您的建议!
    猜你喜欢
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 2022-10-12
    • 2021-02-13
    • 1970-01-01
    相关资源
    最近更新 更多