gpt4 book ai didi

api - 如何在 Elastic Search 中处理 "private"数据

转载 作者:行者123 更新时间:2023-12-02 22:31:48 24 4
gpt4 key购买 nike

我需要任何可能对 ElasticSearch 的工作原理和 API 有经验/知识的人的意见。
我有一个(非常大的)数据库,其中包含许多不同项目的大量数据。

我需要通过公共(public) API 使所有这些数据可搜索,以便任何人都可以使用它并查询 API 有关特定项目的数据。我已经启动并运行了 ElasticSearch,并在 ElasticSearch 中填充了数据库中的所有数据的索引。 ElasticSearch 工作正常,API 也是如此。

我现在面临的挑战是,我们数据库中的一些数据是“私有(private)”数据,不得公开搜索。同时,这些私有(private)数据必须在内部是可搜索的,这意味着我需要让 API 在公共(public)模式和私有(private)模式(用户认证)下运行。当未通过身份验证的客户端向 API 查询某些数据时,客户端应仅获取公共(public)项目,而私有(private)(用户身份验证)客户端应获取所有可能的结果。
我对一个项目的所有数据不得公开的项目没有任何问题。我可以简单地用一个标志标记它们,并确保当我通过 API 向客户端返回数据时,ElasticSearch 不会返回它们。

当某个项目的数据的一部分是私有(private)的而部分数据是公开的时,就会出现挑战。在将数据返回给(公共(public))客户端之前,我考虑过剥离私有(private)数据。这样,私有(private)数据不能直接通过 API 获得,而是间接/隐式地获得。例如,如果客户端搜索了一些具有私有(private)性质的数据,在这种情况下,我将在将其返回给用户之前从搜索结果中“剥离”私有(private)数据,那么客户端将获得返回的文档,表明该文档是特定查询的“命中”。但是,在我返回的文档中找不到来自客户端的特定查询字符串,因此表明查询字符串以某种方式与文档相关联,并且该关联具有敏感/私有(private)性质。

我考虑过创建两个不同的索引。一个包含所有对象的所有数据(私有(private)索引),一个只包含公开可用数据(我已经剥离了敏感数据部分的所有文档)。这将是可行的,并且是一个相当容易实现的解决方案,但缺点是我现在在两个索引中复制了数据。

有任何想法吗?

最佳答案

根据您的描述,您显然需要两个不同的 浏览量 您的数据:

  • PUBLIC:集合中文档的子集,某些字段不应该被搜索或返回。
  • PRIVATE:整个集合,所有字段均可搜索和可见。


  • 您可以完成两个不同的 浏览量 通过以下任一方式获取数据:
  • 一个索引/两个查询 ,一个公共(public)的,一个私有(private)的(你可以自己实现这个,或者让 Shield 为你管理这个不透明的)。
  • 两个索引/两个查询 (一公一私)


  • 在第一种情况下,您的公共(public)查询将过滤掉您提到的私有(private)文档,并且仅搜索/返回公开可见的字段。而私有(private)查询不会过滤,并将搜索/返回所有字段。

    在第二种情况下,您实际上会将您的数据索引到两个单独的索引中,并明确让公共(public)查询针对公共(public)索引(仅包含公共(public)字段)运行,私有(private)查询针对私有(private)索引运行。

    你是真的 可以建立一种机制(或使用 Shield)来在单个索引之上完成您所需要的。但是,如果出现以下情况,您可能需要考虑 (2) 公共(public)/私有(private)索引选项:
  • 您希望通过疏忽或配置更改来降低无意中暴露敏感数据的风险。
  • 您希望减少应用程序的公共(public)功能与应用程序的私有(private)功能之间的耦合。
  • 您预计公共(public)使用的扩展特性将显着偏离私有(private)使用。

  • 作为最后一点的一个例子,大多数免费增值网站的付费用户和非付费用户的分布非常倾斜(为了争论,说十分之一)。

    您不仅可能需要积极地 复制 您的公共(public)索引,而且通过剥离私有(private)字段的公共(public)文档,您将成比例地减少管理公共(public)分片(和副本)所需的资源。

    这就提出了数据重复的问题。在大多数系统中,搜索索引不是“记录系统”(参见 discussion)。搜索索引更典型地用作外部数据库索引,或者可能是物化 View 。当存在代表最新状态的持久后备存储时,在这种情况下重复数据不是问题。

    如果出于某种原因,您依赖 Elasticsearch 作为“记录系统”,那么双索引路径会有些棘手(因为您需要选择一个,可能是私有(private)索引来表示真实情况,然后将另一个(公共(public)索引)视为私有(private)数据的下游 View 。)

    关于api - 如何在 Elastic Search 中处理 "private"数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35245976/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com