当前位置: 首页 > 面试题库 >

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

申昌勋
2023-03-14
问题内容

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

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

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


问题答案:

我来看看脚本过滤器。以下过滤器应仅返回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
        }
    }
}


 类似资料:
  • 我确实在ElasticSearch中的字段中有一个数组数据,其中有一个关键字类型。我想用我想搜索的独占值搜索这个数组,即排除不包括在我的搜索关键字中的数组值。请看下面的细节。 谢了! 我有以下弹性搜索索引映射: 使用以下示例数据: 我的搜索是这样的: 我用过MatchQueryBuilder、TermQueryBuilder、TermsQueryBuilder都没用。根据ElasticSearch

  • 问题内容: 我正在尝试对数组中的值进行聚合,并且还过滤由前缀返回的存储桶。不知道这是否可行,或者我滥用过滤桶。 3份文件: 目的是获取带有字母B开头颜色的文档数量: 不幸的是,返回的结果包括Red。显然是因为带有红色的文档仍然按过滤器匹配,因为它们也具有蓝色和/或黑色。 有没有一种方法可以只过滤存储桶结果? 问题答案: 尝试此操作,它将过滤为存储桶本身创建的值:

  • 问题内容: 我有一个包含整数数组的字段,例如: 我想过滤结果,以使价格至少包含介于以下之间的值列表之一: 由于价格字段中的`[20002,30000] 问题答案: Elasticsearch始终认为字段可以包含值列表,因此,范围过滤器应该起作用。如果任何值与范围匹配,它将被过滤。 您可以将该过滤器用作过滤查询的一部分: 但是,过滤查询在2.0中已弃用,因此,如果您使用的是2.0,则最好将布尔查询与

  • 我有几个lambda函数,可以将多部分上传到Amazon S3存储桶。它们负责创建多部分上传,然后为每个部分上传创建另一个,最后一个用于完成上传。 前两个似乎工作正常(它们以statusCode 200响应),但最后一个失败了。在Cloudwatch上,我可以看到一个错误,说“您建议的上传小于允许的最小大小”。 事实并非如此,因为我上传的文件大于文档上指定的最小大小5Mb。但是,我认为问题发生在每

  • 问题内容: 我有这样的ES文档 我正在使用Spring数据通过Repository接口与ES通讯 现在,我需要构建一个rest接口,以像这样响应JSON格式的数据 由于and in 很大,因此从ES检索所有字段非常昂贵。 我知道ES具有名为“响应过滤”的功能,可以满足我的要求,但是我找不到在Spring Data中使用它的方法。 如何在Spring数据中执行此操作? 问题答案: 您需要混合使用源过

  • 问题内容: 我有带有嵌套字段的文档,如下所示: 嵌套字段的映射如下所示: 在切换到elasticsearch 2之前,我有一个带有aggs的查询,该查询计算了没有结果的文档。这是查询的聚合部分: 现在我切换到elasticserach 2,它只计算所有文档。我已经尝试过其他操作,例如计算所有文档和计算结果,以便可以减去结果,但是 总是0 如何正确过滤/计数嵌套字段? 问题答案: 如果您要计算产生结