【问题标题】:Dynamic Solr core selection based on query parameter基于查询参数的动态 Solr 核心选择
【发布时间】:2016-06-02 06:14:38
【问题描述】:

我使用多个 Solr 内核来索引来自不同细分市场的产品。例如一个索引包含来自制药 (core1) 的产品,另一个包含来自杂货 (core2) 的产品和第三个来自电子产品 (core3) 的产品,.. 实际上,我也有这些细分市场中产品类别和品牌的核心。

我要解决的问题是:当用户搜索某些东西时,他们不应该意识到这些核心。基于用户发送的查询参数;我想找出正确的核心/核心进行搜索。例如,如果用户查询有../select?q=apple&seg=0x3e,基于参数:seg=0x3e 可以搜索 core2 和 core2 但不能搜索 core3,对于不同的seg=value,应搜索不同的核心集

我可以通过分片搜索和在 solrconfig.xml 中配置分片来完成这项工作。提供了一个很好的线索here。但是这种方法似乎太静态了,我无法根据查询参数影响限制或选择分片。

有没有 Solr 方法可以做到这一点?像自定义 SolrDispathcFilter?

谢谢

【问题讨论】:

    标签: solr lucene


    【解决方案1】:

    很抱歉这个“否定”的答案:),但我在搜索和 SOLR 方面有很多经验,我真的不会按照你的建议去做。

    按“主题”对索引进行分区通常不是一个好主意,您必须做大量的手动操作,而且随着类别、文档和/或核心数量的增长,它也无法维护。最终,您将建立一个集群(即您指出的分片)并继续不加选择地向其中添加核心和文档。出于维护原因,您始终可以按集合或主题标记您的文档,但将这些映射到核心很难维护。

    鉴于您的索引已经分区,您可以将其视为分布式索引,并使用 SOLR 查询分片参数在每个查询中命中每个核心。我不会费心编写调度程序,因为返回零结果的简单搜索查询非常非常非常快速且便宜。所以用“无用”的查询来打击你的“其他”核心并不是什么大问题。出于这个原因,构建一个专门的调度程序可能是值得的,但手动维护也很困难。

    有一个特殊情况,调度程序是值得的:如果您的查询非常复杂(过滤不同的字段)并且 SOLR 需要时间来确定没有结果要返回,那么值得做您的事情提出。我不知道在 SOLR 配置中执行此操作的方法,您需要编写自己的查询处理程序。

    【讨论】:

    • 谢谢@雨果。我的问题仍然不是得到零结果。它实际上是关于获得不相关的匹配。回到我的例子。 “苹果”与“消费品”和“杂货”的含义不同。因为我有这两个部分,所以这种请求的结果将是胡言乱语。您正确地指出了维护债务。
    • 好的,我写的我认为它仍然适用:使用您想要的集合名称“标记”每个文档(例如 collection=consumer_goods),并将集合约束添加到查询中(例如 &fq=收藏:consumer_goods)
    猜你喜欢
    • 2020-10-09
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 2013-03-17
    • 2020-09-28
    • 2021-10-27
    相关资源
    最近更新 更多