弹性搜索 - 查询两个数组的交集是非空的文档

时间:2017-08-24 14:30:18

标签: elasticsearch dsl

我的文档结构如下:

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

用户自己拥有权限集["x", "y", "z"]业务规则:当且仅当至少一个用户权限与文档权限匹配时,才允许用户A查看文档X.或者在数学上,如果交叉是非空的 -

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

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

1 个答案:

答案 0 :(得分:1)

您需要terms query,其中可以传递要匹配其元素的数组。此匹配文档包含任何提供的术语。例如,以下内容将匹配包含权限= [“a”,“b”,“c”]的文档,但不匹配权限= [“a”,“t”,“c”]

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