弹性搜索 - 查询两个数组的交集非空的文档
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"
]
}
}
}
我的文件结构如下:
{
"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"
]
}
}
}