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

Elastic Search - querying documents where intersection of two arrays is nonempty

我的文件结构如下:

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

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

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

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

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

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