2017-08-24 75 views
0

我有一个文件结构如下:弹性搜索 - quering文件,其中两个阵列的相交非空

{ 
    "documentId": 123, 
    "someOtherInfo": {...} 
    "permissions": ["a", "b, ..., "g"] 
} 

用户本身具有权限集["x", "y", "z"]业务规则:当且仅当至少有一个用户权限与文档权限匹配时,才允许用户A查看文档X.或者把数学上,如果路口不为空 -

["a", "b, ..., "g"] ∩ ["x", "y", "z"] ≠ ∅

我建立需要找到所有文档的用户访问搜索引擎。我想将它存储在Elastic Search中以提供所有优秀的查询功能,但是如何使用ES DSL添加对权限的限制?非常感谢。

回答

1

您需要一个terms query其中可以传递其元素将被匹配的数组。这匹配包含任何提供的条款的文件。例如,以下内容将与包含权限= [“a”,“b”,“c”]但不是权限= [“a”,“t”,“c”]的文档相匹配

{ 
    "query": { 
    "terms": { 
     "permissions": [ 
     "x", 
     "y", 
     "z", 
     "b" 
     ] 
    } 
    } 
}