Azure 使用Lucene索引私有数据,我应该为每个用户创建单独的索引还是单个索引
我正在开发一个基于Azure的网站,我想使用Lucene提供搜索功能。(结构化json对象将被索引并存储在Lucene中,其他内容(如Word文档等)将在Lucene中索引,但存储在blob存储中)我希望搜索是安全的,这样一个用户将永远不会看到属于另一个用户的文档。我想允许用户键入的特殊搜索。最后,我希望以编程方式查询以返回预定义的数据集,例如“用户X的所有注释”。我想我了解如何为每个文档添加属性以实现这3个目标。(我把它们列在这里,这样如果有人愿意回答,他们就会更好地了解我要做的事情) 我的问题围绕性能和安全性 我是否可以通过为每个用户提供单独的索引来提高文档安全性,或者在每次搜索中包含用户ID作为参数是否足够 我可以通过为每个用户提供单独的索引来提高索引速度和系统的总吞吐量吗?我的想法是,拥有单独的索引将允许我通过让多个索引编写器(甚至可能在不同的服务器实例上)同时工作来扩展系统,每个都在各自的索引上 如有任何见解,将不胜感激 问候, 当然,一个指数。 通过使用ManifoldCF(知道如何处理Solr的Apache产品)来管理安全性,您可以做得比您建议的更好Azure 使用Lucene索引私有数据,我应该为每个用户创建单独的索引还是单个索引,azure,lucene,Azure,Lucene,我正在开发一个基于Azure的网站,我想使用Lucene提供搜索功能。(结构化json对象将被索引并存储在Lucene中,其他内容(如Word文档等)将在Lucene中索引,但存储在blob存储中)我希望搜索是安全的,这样一个用户将永远不会看到属于另一个用户的文档。我想允许用户键入的特殊搜索。最后,我希望以编程方式查询以返回预定义的数据集,例如“用户X的所有注释”。我想我了解如何为每个文档添加属性以实现这3个目标。(我把它们列在这里,这样如果有人愿意回答,他们就会更好地了解我要做的事情) 我的问
还有一个离题的、未提供信息的建议:我宁愿使用CloudBees或Heroku(或Amazon)而不是Azure。除非您将使用多台机器进行索引,否则我想使用单个索引更方便。Lucene社区为使索引过程尽可能高效做了大量工作。因此,除非您有意实现分布式索引,否则我不建议您拆分索引 但是,您希望拆分索引的原因有几个:
- 如果您的机器有几个可以并行使用的IO设备。在这种情况下,如果您是IO绑定的,则最好拆分索引
- 在索引之间拆分文档字段(这就是
的作用)。这是一种更奇特的拆分形式,但如果使用不同的字段组执行搜索,这可能是一个好主意。假设我们有两种搜索查询类型:第一种是使用字段ParallelReader
和name
,第二种是使用字段type
和price
。如果这些字段以不同的速率更新(我想,名称更新比价格更新少得多),只更新部分索引将需要更少的IO资源。这将为系统提供更多的总体吞吐量折扣