根据用户限制限制Lucene.Net搜索结果

时间:2013-08-08 19:06:42

标签: c# .net lucene.net

我正在试图弄清楚如何在Lucene.Net索引中管理受限数据,比如你有一个人文档,其中包含:

Name: Peter Pan
Locations: Neverland, London, Paris

现在说我有2个用户,UserA和UserB,他们个人被允许看到的是:

UserA: 
  Name: Peter Pan
  Locations: Neverland, London

UserB: 
  Name: Peter Pan
  Locations: London, Paris

现在我希望允许他们两个人搜索地点,但是因为UserB看不到Peter Pan去过Neveland,所以搜索“Neverland”不会因为UserB,Visa-Versa而对Peter赞不绝口。 UserA和巴黎,但都能看到伦敦......

我必须处理的数据要比这复杂得多,这些东西打开和关闭的方式都是我们所谓的警告,所以深入了解上述情况,他们看到他们看到的可能的原因例如,他们有权查看数据,但有以下警告:

UserA: AAA, BBB
UserB: BBB, CCC

因为彼得的位置数据条目被标记为:

Neverland - AAA
London - BBB
Paris - CCC

作为一个例子......

我希望这种情况能够说明情况至少可以开始讨论。

1。复制模型

显然,我可以将所有数据条目正确地分成构成“文档”的位,而不是将Peter Pan存储为一个大文档,我可以将其分解出来,但这会让我处于可能的情况在我看到的相同的实际对象上获得多次点击...它也将是分配字段。

2。多个文件

或者我可以存储一个文件pr。限制只有一个警告可以赋予权利的数据a,据我所知,这给出了多次点击,它还提供了大量的“冗余”数据。

3。通过DataBase往返过滤

最后但并非最不重要的是,我可以执行搜索忽略警告,然后不是直接从Lucene显示结果,我可以让我们的DataAccess层为我做警告过滤,这将增加往返数据库的往返但不是需要的。

虽然数据库的往返可能是我最关心的问题。还有一个事实。当搜索术语出现时,Lucene会返回可能实际上不会命中的命中,因为生成该命中的值可能对该用户不可见。

这也意味着“结果数量”可能会关闭。

总而言之,它不仅仅是一个额外的数据库往返,我们还必须在结果被提升后“重做”过滤。


如果可能的话,我会听到是否能够找到一个比我自己有更多Lucene经验的人来提供一些意见。

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果您可以按组分配权限(即“所有无法看到Neverland旅行的用户”),您可以向每个文档添加一个字段(或字段,具体取决于您的权限的复杂性),通知UI忽略所有前往梦幻岛的旅行。

如果您无法对权限进行分组,则可以(如果存在大量用户时难以处理)为每个文档添加每个用户的权限,然后让UI适当地处理这些权限。这将允许您为每个用户的每个文档具有单独的权限(类似于文件系统权限)。