1

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

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

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

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

任何见解将不胜感激。

问候,

内特

4

2 回答 2

2

当然,一个指标。通过使用 ManifoldCF(知道如何处理 Solr 的 Apache 产品)来管理安全性,您甚至可以做得比您建议的更好。

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

于 2012-06-22T22:13:41.713 回答
0

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

但是,您想要拆分索引有几个原因:

  • 如果您的机器有多个可以并行使用的 IO 设备。在这种情况下,如果您受 IO 限制,那么拆分索引是个好主意。
  • 在索引之间拆分文档字段(这ParallelReader是应该的)。这是一种更奇特的拆分形式,但如果使用不同的字段组执行搜索可能是个好主意。假设我们有两种搜索查询类型:第一种是使用字段nametype,第二种是使用字段pricediscount。如果这些字段以不同的速率更新(我猜,名称更新比价格更新要少得多),那么仅更新部分索引将需要更少的 IO 资源。这将为系统提供更多的整体吞吐量。
于 2012-06-25T03:12:34.887 回答