2017-03-02 60 views
2

我刚刚认识elasticsearch,如果它适合我​​的情况下,在所有我想知道的数据访问:分离与elasticsearch

考虑一个系统,公司(含多个员工)可以注册并管理他们的客户,并将文件发送给他们的客户。

现在,我想让公司搜索他们的文件 - 但只有他们的文件,而不是其他公司的文件。换句话说:如何分离这些公司的数据以进行搜索?这怎么可以用elasticsearch实现?

这种分离是否由elasticsearch本身处理?即我的系统中的公司和弹性搜索的相关用户之间有一些映射。 或者这是由我的系统的后端处理?即后端以某种方式决定(如何?)只显示该特定公司的搜索结果。因此,只有一个用户,即我的系统的后端,可以访问和过滤弹性搜索的结果。但这是否明智?

我确信有关于此的大量信息。请给我一个提示,因为我不知道要搜索什么。例如,搜索弹性搜索认证/授权,只会产生关于谁可以访问搜索系统的结果 - 而不是解决这种分离的模式。

在此先感谢!

回答

4

Elasticsearch本身不支持授权和身份验证,您需要通过插件添加它,其中有两个我知道的插件。 Shield是官方解决方案,它是X-Pack的一部分,如果你想使用它,你需要支付Elastic。 SearchGuard是一个可以购买企业升级的开源替代品。 这两个都可以让你为不同的用户定义细粒度的访问权限。你可能想要做的是给每个公司一个他们自己的文件索引,然后限制他们的用户只能读/写该索引。或者,如果您绝对需要一个索引中的所有文档,则还可以添加文档级别限制,以便每个人都查询相同的索引,但仅获取为其公司返回的结果。取决于你期望提供服务的公司数量可能会更有意义,以便不会有太多索引和碎片,但我怀疑每个公司的索引是最好的选择。

如果没有这些插件,你需要求助于http层,例如一个nginx反向代理,它根据url中包含的索引名称来过滤请求,但我会严厉地建议,这样的痛苦很多!

+0

谢谢你的回答,Sönke!让我进一步阅读,我想我已经明白了。祝你有个愉快的夜晚! –