基于查询参数的动态Solr核心选择



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

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

我可以通过shards搜索来实现这一点,也可以在solrconfig.xml中配置shards。但这种方法似乎太静态了,我无法影响基于查询参数对碎片的限制或选择。

有Solr的方法吗?像自定义SolrDispathcFilter?

感谢

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

按"主题"划分索引通常不是一个好主意,你必须做大量的手动处理,而且随着类别、文档和/或核心数量的增长,它是不可维护的。最终,您将建立一个集群(如您所指出的碎片),并不断向其中添加核心和文档。出于维护原因,您可以随时按集合或主题标记文档,但将这些文档映射到核心很难维护。

假设您的索引已经分区,您可以将其视为分布式索引,只需使用SOLR查询碎片参数用每个查询命中每个核心即可。我不会麻烦编写调度器,因为返回零结果的简单搜索查询非常非常快速且便宜。因此,用"无用"的查询访问"其他"核心并不是什么大问题。出于这个原因,构建一个专门的调度器可能是值得的,这同样很难手动维护。

在一种特殊情况下,调度程序是值得的:如果您的查询非常复杂(在不同的字段上进行过滤),并且SOLR需要时间来确定没有结果可返回,那么执行您的建议是值得的。我不知道在SOLR配置中有什么方法可以做到这一点,您需要编写自己的查询处理程序。

最新更新