使用Lucene索引私有数据,我应该为每个用户或单个索引分别设置索引

时间:2012-06-22 21:49:46

标签: azure lucene

我正在开发基于Azure的网站,我想使用Lucene提供搜索功能。 (结构化的json对象将被编入索引并存储在Lucene中,其他内容如Word文档等将在lucene中编入索引但存储在blob存储中)我希望搜索是安全的,这样一个用户永远不会看到文档归属给另一个用户。我想允许用户输入的临时搜索。最后,我想以编程方式查询以返回预定义的数据集,例如“用户X的所有注释”。我想我了解如何为每个文档添加属性以实现这3个目标。 (我在这里列出它们,所以如果有人能够回答,他们会更好地了解我想要做的事情)

我的问题围绕性能和安全性。

我可以通过为每个用户提供单独的索引来提高文档安全性,还是在每次搜索中将用户的ID作为参数包括在内?

我可以通过为每个用户提供单独的索引来提高系统的索引速度和总吞吐量吗?我的想法是,拥有单独的索引将允许我通过让多个索引编写器(可能甚至在不同的服务器实例上)同时工作来扩展系统,每个索引编写器都在他们自己的索引上。

非常感谢任何见解。

此致

内特

2 个答案:

答案 0 :(得分:2)

当然,一个指数。 使用ManifoldCF(知道如何处理Solr的Apache产品)来管理安全性,你可以做得更好。

一个偏离主题,不知情的建议:我宁愿使用CloudBees或Heroku(或亚马逊)而不是Azure。

答案 1 :(得分:0)

在您使用多台计算机进行索引之前,我想使用单一索引会更方便。 Lucene社区做了大量工作,使索引过程尽可能高效。因此,除非您有意要实现分布式索引,否则我不建议您拆分索引。

但是,您希望拆分索引有几个原因:

  • 如果您的机器有多个可以并行使用的IO设备。在这种情况下,如果你是IO绑定,拆分索引是个好主意。
  • 在索引之间拆分文档字段(这是ParallelReader的假设)。这是更奇特的分裂形式,但如果使用不同的字段组执行搜索可能是个好主意。假设我们有两种搜索查询类型:第一种是使用字段nametype,第二种是使用字段pricediscount。如果这些字段以不同的速率更新(我猜,名称更新比价格更新更少),只更新索引的一部分将需要更少的IO资源。这将为系统提供更高的整体吞吐量。