小编典典

elasticsearch通过作为数组的字段的大小过滤

elasticsearch

我该如何过滤具有一个数组的字段并且具有超过N个元素的文档?

如何过滤具有为空数组的字段的文档?

是解决方案吗?如果是这样,怎么办?


阅读 632

收藏
2020-06-22

共1个答案

小编典典

我来看看脚本过滤器。以下过滤器应仅返回在fieldname字段中具有至少10个元素的文档,该文档是一个数组。请记住,这可能很昂贵,具体取决于索引中有多少个文档。

"filter" : {
    "script" : {
        "script" : "doc['fieldname'].values.length > 10"
    }
}

关于第二个问题:那里真的有一个空数组吗?还是仅仅是一个没有值的数组字段?您可以使用缺少的过滤器来获取对特定字段没有价值的文档:

"filter" : {
    "missing" : { "field" : "user" }
}

否则,我想您需要再次使用脚本,类似于我上面建议的脚本,只是输入的长度不同。如果长度是恒定的,我将其放在该params部分中,以便脚本将由elasticsearch缓存并重新使用,因为它始终是相同的:

"filter" : {
    "script" : {
        "script" : "doc['fieldname'].values.length > param1"
        "params" : {
            "param1" : 10
        }
    }
}
2020-06-22