在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”
基本上我想匹配其权限条目都包含在我的数组中的任何文档。
答案 0 :(得分:2)
您的用例基本上是“对于一组权限(特定用户拥有),查找仅需要该组权限的所有文档。”
一种解决方案是提供一个实现,它“执行一组权限,找到所有不需要任何其他权限的文档。”
如果可以随时检索所有可能的权限值*,您可以获取该列表,删除当前用户拥有的值,并将每个剩余值放在bool过滤器的“must_not”项中。
即使对于大量可能的权限,搜索操作也会非常快,因为这些术语过滤器将被缓存。
*如果找不到所有可能的权限值的其他方法是可靠的,您可以对权限进行术语聚合以查找所有当前已编入索引的值。