基于查询参数

时间:2016-06-02 06:14:39

标签: solr lucene

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

我必须解决的问题是:当用户搜索某些内容时,他们不应该知道这些内核。基于用户发送的查询参数;我想弄清楚要搜索的核心/核心。例如,如果用户查询具有../select?q=apple&seg=0x3e,则基于参数:seg=0x3e core2&可以搜索core2而不是core3,对于不同的seg=value,应搜索不同的核心集

我可以使用分片搜索来完成此工作,并在solrconfig.xml中配置分片。提供了良好的领导here。但这种方法似乎过于静态,我无法根据查询参数影响限制或选择分片。

是否有Solr方式这样做?像自定义SolrDispathcFilter?

由于

1 个答案:

答案 0 :(得分:1)

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

通过“主题”对索引进行分区通常不是一个好主意,您必须进行大量的手动杂耍,并且随着类别,文档和/或核心数量的增加而无法维护。最终,您将设置一个集群(即指出的分片),并不断向其添加核心和文档。出于维护原因,您始终可以按集合或主题标记文档,但将这些文档映射到核心很难维护。

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

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