我正在尝试弄清楚如何才能完成以下工作,但到目前为止,我找到的答案似乎都不符合:
我有一个相当静态和大量的资源,我需要有索引和可搜索。Solr似乎非常适合这一点。此外,我需要有能力为我的用户添加资源,从主数据集到一个‘收藏’文件夹(可以包括更多的标签,由他们添加)。收藏夹需要以与主数据集相同的方式进行搜索,跨所有相同的字段加上其他字段。
我的第一个想法是有两个独立的模式-第一个用于主数据集及其元数据-第二个用于Favourites文件夹,复制主集的所有元数据,然后添加附加字段。
然后我认为这可能会浪费相当多的空间(用户数量远远大于主要资源的数量)。
因此,我认为我可以使用主数据集及其元数据(Core0),与上面使用resourceId作为唯一标识符的方法相同。那么将存在用于收藏夹的第二个(Core1),其中resourceId、userId、grade、folder的唯一id都被合并。resourceId也将是一个单独的字段。此外,我将使用其他两个核心中的所有字段创建另一个模式/核心(Core3),并在其上定义一个请求处理程序,该处理程序在其他两个核心中搜索并通过该核心返回结果。
这第三个核心将针对它运行搜索,其中只返回单个用户的结果。例如,用户在他们的收藏夹中搜索带有Foo的所有项目。结果只是用户在其主数据集元数据中的某个位置使用Foo添加到他们的收藏夹中的那些项目。我猜Core3的结果处理程序会将搜索分解为搜索Core0中带有Foo的所有文档,在Core1中搜索userId和文件夹,然后匹配这两个文档中的resourceIds,排除不在这两个文档中的文档。或者使用userId和文件夹在Core1上运行搜索,然后获取返回的结果集,提取所有resourceIds并将AND附加到搜索查询的Core0上,如: AND (resourceId = 1232232312 Or resourceId = 838388383 OR resourceId = 8637626491)。
这能行得通吗?或者,Solr有没有更简单的机制来解决跨两个核心的两个搜索的合并,并且只返回在两个核心中匹配(不一定是唯一的)字段的结果?
谢谢。
发布于 2010-10-15 14:38:52
问题看起来像是两个表的数据库连接,资源id是外键。如果我理解的内容是错误的,请忽略这篇文章。
首先,我可能会使用一个带有字段userid (已编制索引,但未存储)的内核,每当新用户喜欢文档时,通过附加其用户id (由分析器忽略的内容分隔)来对文档重新编制索引。所以搜索变得更容易了( userid :"kaka's id“将获取所有我最喜欢的内容),我认为这需要一些工作,而且如果喜欢文档的用户数量增加,userid字段就会变得很长。
因此,在这种情况下,我将继续我的下一个想法,这与您的想法类似,使用(userid,resource id).Write包装器的第二个核心,它首先在这个核心中搜索所有收藏,然后在另一个核心中搜索where条件下的所有资源,但是again..if用户收藏的更多资源,查询可能会超过GET方法的大小限制。
如果两者似乎都不起作用,那么是时候考虑一些更具伸缩性的东西了,这给我们留下了同样的空间浪费选项。
我是不是遗漏了什么??
https://stackoverflow.com/questions/3931827
复制相似问题