我刚刚开始了解弹性搜索,我想知道它是否适合我的情况:
考虑一个系统,公司(拥有多名员工)可以注册和管理客户,并将文件发送给客户。
现在,我想让公司搜索他们的文件 - 但仅限于他们的文件,而不是其他公司的文件。换句话说:如何将这些公司的数据分开进行搜索?如何使用elasticsearch实现这一点?
这种分离是由elasticsearch本身处理的吗?即我的系统中的公司与弹性搜索的相关用户之间存在一些映射。 或者这是由我的系统的后端处理?即后端以某种方式决定(如何?)仅显示该特定公司的搜索结果。因此,只有一个用户,即我系统的后端,可以访问和过滤elasticsearch的结果。但这是明智的吗?
我确信那里有大量关于此的信息。请给我一个提示,因为我不知道该搜索什么。例如,搜索弹性搜索认证/授权仅产生关于谁获得对搜索系统的访问权限的结果 - 而不是关于解决这种分离的模式。
提前致谢!
答案 0 :(得分:4)
Elasticsearch本身不支持授权和身份验证,你需要通过插件添加它,其中有两个我知道。 Shield是官方解决方案,它是X-Pack的一部分,如果你想使用它,你需要支付Elastic。 SearchGuard是一个开源替代方案,可以购买企业升级。 这两种功能使您可以为不同的用户定义细粒度的访问权限。您可能想要做的是为每个公司提供他们自己的文档索引,然后限制他们的用户只能读/写该索引。或者,如果您绝对想要一个索引中的所有文档,您也可以添加文档级别限制,以便每个人查询相同的索引,但只获得为其公司返回的结果。根据您希望服务的公司数量,这可能更有意义,以便没有太多的索引和分片,但我怀疑每个公司的索引是最好的方式。
如果没有这些插件,您需要求助于http层上的某些内容,例如nginx反向代理根据网址中包含的索引名称过滤请求,但我严厉建议不要这样做很多痛苦就是这样!