首页 文章

Solr将2个核心的结果合并到仅具有匹配字段的结果中

提问于
浏览
2

我想弄清楚我是如何完成以下工作的,到目前为止我找到的答案似乎都不合适:

我有一个相当静态和大量的资源,我需要索引和搜索 . Solr似乎非常适合 . 此外,我需要能够让我的用户将主数据集中的资源添加到“收藏夹”文件夹(其中可以包含更多标签) . 收藏夹需要以与主数据集相同的方式在所有相同字段和其他字段中进行搜索 .

我的第一个想法是有两个独立的模式 - 第一个用于主数据集及其元数据 - 第二个用于收藏夹文件夹,主要集合中的所有元数据被复制,然后添加其他字段 .

然后我认为这可能会浪费相当多的空间(用户数远远大于主要资源的数量) .

那么我想我可以拥有主数据集及其元数据(Core0),与上面相同,resourceId作为唯一标识符 . 然后会有第二个(Core1)为Favorites文件夹,其唯一ID为resourceId,userId,grade,文件夹全部为concantenated . 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解决2个核心的2个搜索的合并,并且只返回两个匹配的结果(不一定是唯一的)?

谢谢 .

1 回答

  • 0

    问题看起来像2个表的数据库连接,资源ID作为外键 . 如果我理解错误,请忽略该帖子 .

    首先,我可能会使用单个核心,使用字段userid(索引但未存储),每次新用户通过附加其用户ID(由分析器忽略的内容分隔)来重新索引文档时重新编制索引 . 因此搜索变得更容易(userId:“kaka的id”将获取我所有的收藏夹)我认为这需要做一些工作,并且如果能够喜欢文档的用户数量增加,则userid字段变得非常长 .

    那么在这种情况下,我将继续我的下一个与你的相似的想法,有一个第二个核心(userid,资源id) . 写一个包装器,首先搜索这个核心的所有收藏夹,然后搜索另一个核心的所有收藏夹where where条件中的资源,但是再次..如果用户喜欢更多资源,查询可能会超过GET方法的大小限制 .

    如果两者似乎都不起作用,那么它应该考虑更具可扩展性的东西,这会让我们留下相同的空间浪费选项 .

    我错过了什么?

相关问题