Solr - 跨多个内核搜索的有效方法?

Solr - Efficient way to search across multiple cores?

我正在为电影、音乐和艺术构建一个面向用户的搜索引擎,用户可以在其中执行自由文本查询(如 Google)并获得所需的结果。现在,我有电影、音乐和艺术数据分别在不同的核心上建立索引,它们不共享相似的模式。为了便于维护,我宁愿像现在这样将它们放在单独的内核中。

到目前为止,我一直在每个核心上单独执行我的查询,但我想扩展此功能以执行 运行 跨多个 cores/indexes 的单个查询。假设我 运行 通过艺术家的名字进行查询,搜索引擎 return 向我提供了他们所做的所有相关电影、音乐和艺术作品。事情变得棘手了。

根据我的研究,我发现在这种情况下有两种选择。

  1. 创建第四个核心,添加指向我的其他三个核心的分片属性。将我对这个核心的所有查询重定向到 return 所需的结果。
  2. 创建一个合并所有三个模式的混合索引并对该索引执行查询。

对于第一个选项,我看到的缺点是键在我的模式中必须是唯一的才能起作用。我将在我的所有核心中使用密钥 artistName,这对我没有帮助。

我真的更喜欢单独保留我的模式,所以我不想深入研究第二个选项。这里有中间立场吗?在这种情况下,最佳做法是什么?

链接我在此处提到的其他 SO 问题:

Best way to search multiple solr core
Solr Search Across Multiple Cores
Search multiple SOLR core's and return one result set

我认为您不应该跨多个核心进行搜索。

Solr 或 Nosql 数据库不适合它。当我们想要实现更快的响应时,这些数据库是首选,而这对于 RDBMS 来说是不可能的,因为它涉及连接。

随着数据大小的增长,RDBMS 中的连接会降低查询的性能。

为了实现更快的响应,我们尝试将数据转换为平面文档并将其存储在 NoSQL 数据库中,如 MongoDB、Solr 等。

  1. 您应该将您的数据隐藏成这样一种方式,它应该是单个文档的一部分。

  2. 如果上述选项不可行,则创建单独的核心并通过多次调用从特定核心检索特定数据。

  3. 你也可以在solr中检查创建父子关系文档。

  4. 将 solr 云选项与 solr 流表达式一起使用。

每个选项都有其优点和缺点。这完全取决于您的要求以及您可以做出的妥协。