我的文档结构如下:
{
"documentId": 123,
"someOtherInfo": {...}
"permissions": ["a", "b, ..., "g"]
}
用户自己拥有权限集["x", "y", "z"]
。 业务规则:当且仅当至少一个用户权限与文档权限匹配时,才允许用户A查看文档X.或者在数学上,如果交叉是非空的 -
["a", "b, ..., "g"] ∩ ["x", "y", "z"] ≠ ∅
我正在构建一个搜索引擎,需要查找用户有权访问的所有文档。我想将它存储在Elastic Search中以获得它提供的所有强大的查询功能,但是如何使用ES DSL添加权限限制?非常感谢。
答案 0 :(得分:1)
您需要terms query,其中可以传递要匹配其元素的数组。此匹配文档包含任何提供的术语。例如,以下内容将匹配包含权限= [“a”,“b”,“c”]的文档,但不匹配权限= [“a”,“t”,“c”]
{
"query": {
"terms": {
"permissions": [
"x",
"y",
"z",
"b"
]
}
}
}