我有一个rails应用程序,我正在尝试进行全文搜索。雪貂似乎是最受欢迎的选择。但是,我有一个问题。
我有一个“东西”,其中包含一个ID,用于确定用户是否可以看到它(并因此搜索它),但我想搜索与我的“东西”相关的这个“东西”的子模型。不要直接包含任何回复给用户的引用。
因此,我该如何实施呢?有没有一种聪明的方法来实现它,或者我是否需要使用域标识符的链接来弄脏我的模型?
答案 0 :(得分:1)
我认为假设Ferret是最受欢迎的选择是错误的。我认识的大多数人都抛弃了雪貂,并用狮身人面像代替了它。由于某种原因不能使用Sphinx的人选择了Xapian。
也就是说,无论您选择哪种索引系统,问题的答案都可能大致相同:
当您处理权限和索引时,您无法有效地索引与权限系统相关的任何内容,因为它将是特定于用户的。您的所有权限都需要存放在您的模型/控制器中。我喜欢将所有权限内容放在模块中,然后将其包含在我的模型中,以便我可以在模型之间轻松共享。
分页对于这类事情来说可能是一个真正的痛苦,因为您从搜索引擎请求了10个项目,然后您的权限代码拒绝了其中的5个项目,这意味着您必须继续运行搜索,直到您有前10个项目为止显示。现在,当你想要第二页时,那么事情变成了一个真正的混乱。天堂禁止他们决定直接跳到第十页,因为现在你不能做一些技巧,比如给出一个起始ID而不是一个页码。真的,如果你能提供帮助的话,那根本不是你想做的事情。
确实没有“巧妙”的方法来解决权限和全文索引之间的不匹配问题。至少,我不知道。这只是一种痛苦。
当我们第一次开始时,我向老板建议,唯一理智的解决方案是平等主义权限系统:如果我们给你一个用户名和密码,那么你就可以访问了。他不是粉丝。