当前位置: 首页 > 知识库问答 >
问题:

在elasticsearch中创建安全筛选器

梁烨烨
2023-03-14

我试图创建一个安全过滤器,以排除某些用户在ElasticSearch中看到某些文档。例如,如果一个文档包含“abc:123”和“abc:xyz”,那么用户的配置文件中必须同时包含这两个文档才能查看该文档。我们正在使用小胡子模板创建这个动态。我的第一次尝试是这样的:

"bool": {
    "filter": {
        "bool": {
            "minimum_should_match": 1,
            "should": {
                "bool": [{
                    "must_not": {
                        "prefix": {
                            "controlSet": "ABC:"
                        }
                    }
                },{
                    "must": {
                        "terms": {
                            "controlSet": ["ABC:123","ABC:XYZ"]
                        }
                    }
                }]
            }
        }
    }
}

但是,我很快意识到,这将允许拥有一个控件的用户查看具有多个控件的文档。文档必须具有用户必须匹配的控件的子集。因此,如果用户只有“abc:xyz”,即使文档也包含“abc:xyz”,他们也不应该看到包含“abc:123”的文档。

有没有一种方法可以实现这一点,而我却错过了?目前,我们枚举系统中的所有控件,并将它们添加到must_not中,但控件定期更改,我不想手动维护该列表。

共有1个答案

丁业
2023-03-14

假设您的文档如下所示:

{
    ...
    "controlSet": ["ABC:123", "ABC:XYZ"],
    ...
}

并且ControlSet关键字字段,则下面的查询应该可以实现:

{
    "bool": {
        "filter": {
            "terms": {
                "controlSet": ["ABC:123", "ABC:XYZ"]
            }
       }
    }
}

它将与ControlSet至少具有abc:123abc:xyzControlSet的文档匹配

 类似资料:
  • 我正忙于在Java Spring中为ElasttiSearch创建过滤查询。我有以下Elasticsearch映射: Elasticsearch中的数据如下所示:

  • 不返回任何文档。我还没有展开以包括字段。 我希望at仍然至少返回一个文档,但什么也没有显示。有人对我做错了什么(或者我如何做得更好)有什么建议、建议或指导吗?

  • 我是elasticsearch的新手,所以我的问题是: 提前致谢:)

  • 是否有可能在实体上实现ApiResource安全性,以便没有实体id的GET请求(即集合操作)只返回与当前已验证用户匹配的项(或为此目的,必须针对每个实体检查的任何其他规则)? 我到目前为止的实现: 上面的代码适用于项操作,但不适用于集合运算符,即假设用户ID。%1(非管理员)已通过身份验证: get返回用户#1数据200 OK(根据需要) get返回403禁止(根据需要,用户1应该无法获取其他用

  • 我是Elasticsearch的新手,我试图创建一个过滤器来检索具有特定属性的文档。 属性在映射中定义为嵌套对象,如下所示: 我试图以以下形式执行一个复杂的查询: 这是elasticsearch 2.x。我做错了什么?

  • 我试图构造一个ElasticSearch查询,但没有得到预期的结果。任何帮助都将不胜感激! 映射详细信息: null null 目前,每个嵌套的轮班文档都包含一个嵌套的calendarBlock文档,其中包含开始和结束日期时间字段,以及一个可以注册该轮班的最大志愿者人数字段。 查询 我试图构造的查询是经过筛选的查询。从Web上的窗体传入查询字符串。然后,我需要以编程方式将至少三个筛选器附加到这个查