Azure 使用Lucene索引私有数据,我应该为每个用户创建单独的索引还是单个索引

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

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

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

我是否可以通过为每个用户提供单独的索引来提高文档安全性,或者在每次搜索中包含用户ID作为参数是否足够

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

如有任何见解,将不胜感激

问候,

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


还有一个离题的、未提供信息的建议:我宁愿使用CloudBees或Heroku(或Amazon)而不是Azure。

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

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

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

+1如果应用程序基于java,那么为什么选择Azure?别误会,我喜欢Azure支持以Microsoft为中心的应用程序。Azure支持Node.js、.NET、Java、PHP、Python,它是一个“开放”平台,任何可以在Windows上运行的东西都可以在Azure上运行,现在Linux也可以在虚拟机上运行。以微软为中心的应用,我认为不是@user728584支持和optimal不一样。Azure拥有VM有多长时间了?VM现在处于预览模式,于2012年6月7日宣布,并有望在3个月后进入GA。我们被锁定到Azure进行此项目,但我发现Azure上的表和Blob存储不足以进行超过主键类型的查找。正如我在帖子中提到的,我们在Azure上。许多开源项目,如Lucene、MongoDB和其他项目,通过“CloudDrive”在Azure上运行,CloudDrive是由Azure blob存储支持的虚拟硬盘驱动器。