在ElasticSearch中,如何检查数组中的值是否匹配

时间:2015-04-10 14:09:54

标签: elasticsearch

在ElasticSearch中,我有以下文档结构......

{
    name: "bob",
    permissions: [
        2,
        4,
        6
    ]
}

我需要能够执行搜索,检查“bob”的权限是否包含在给定数组中。

例如我有一个包含内容的数组

[1,2,3,4,5,6]

我需要返回“bob”文档,因为我的数组包含2,4,6,所以“bob”

如果我的数组包含1,3,4,5,6“bob”不应该被选中,因为我的数组不包含“2”

基本上我想匹配其权限条目都包含在我的数组中的任何文档。

1 个答案:

答案 0 :(得分:2)

您的用例基本上是“对于一组权限(特定用户拥有),查找仅需要该组权限的所有文档。”

一种解决方案是提供一个实现,它“执行一组权限,找到所有不需要任何其他权限的文档。”

如果可以随时检索所有可能的权限值*,您可以获取该列表,删除当前用户拥有的值,并将每个剩余值放在bool过滤器的“must_not”项中。

即使对于大量可能的权限,搜索操作也会非常快,因为这些术语过滤器将被缓存。

*如果找不到所有可能的权限值的其他方法是可靠的,您可以对权限进行术语聚合以查找所有当前已编入索引的值。