首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solr将2个核心的结果合并为只有一个匹配字段的结果

Solr将2个核心的结果合并为只有一个匹配字段的结果
EN

Stack Overflow用户
提问于 2010-10-14 17:32:33
回答 1查看 961关注 0票数 2

我正在尝试弄清楚如何才能完成以下工作,但到目前为止,我找到的答案似乎都不符合:

我有一个相当静态和大量的资源,我需要有索引和可搜索。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有没有更简单的机制来解决跨两个核心的两个搜索的合并,并且只返回在两个核心中匹配(不一定是唯一的)字段的结果?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2010-10-15 14:38:52

问题看起来像是两个表的数据库连接,资源id是外键。如果我理解的内容是错误的,请忽略这篇文章。

首先,我可能会使用一个带有字段userid (已编制索引,但未存储)的内核,每当新用户喜欢文档时,通过附加其用户id (由分析器忽略的内容分隔)来对文档重新编制索引。所以搜索变得更容易了( userid :"kaka's id“将获取所有我最喜欢的内容),我认为这需要一些工作,而且如果喜欢文档的用户数量增加,userid字段就会变得很长。

因此,在这种情况下,我将继续我的下一个想法,这与您的想法类似,使用(userid,resource id).Write包装器的第二个核心,它首先在这个核心中搜索所有收藏,然后在另一个核心中搜索where条件下的所有资源,但是again..if用户收藏的更多资源,查询可能会超过GET方法的大小限制。

如果两者似乎都不起作用,那么是时候考虑一些更具伸缩性的东西了,这给我们留下了同样的空间浪费选项。

我是不是遗漏了什么??

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3931827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档