仅对部分搜索结果应用Solr筛选器查询

仅对部分搜索结果应用Solr筛选器查询,solr,filter,grouping,Solr,Filter,Grouping,我有一个Solr解决方案,它需要两个查询,但我正在寻找一种在单个查询中实现这一点的方法。我的想法是,如果我能找到一种方法来做到这一点,我就不必在Solr集群上产生两倍于负载的开销 细节:我正在运行一个简单的查询,比如“q=camera”,查询过滤器是“fq=type:digital”。第二个查询与第一个查询相同,但是过滤器是相反的,比如“fq=-type:digital”,我想如果有一种方法可以在应用第一个过滤器获取第一组topDocs的同时运行单个查询,然后使用第二个过滤器生成第二组topDo

我有一个Solr解决方案,它需要两个查询,但我正在寻找一种在单个查询中实现这一点的方法。我的想法是,如果我能找到一种方法来做到这一点,我就不必在Solr集群上产生两倍于负载的开销

细节:我正在运行一个简单的查询,比如“q=camera”,查询过滤器是“fq=type:digital”。第二个查询与第一个查询相同,但是过滤器是相反的,比如“fq=-type:digital”,我想如果有一种方法可以在应用第一个过滤器获取第一组topDocs的同时运行单个查询,然后使用第二个过滤器生成第二组topDocs,那么结果可以合并并返回(这两个集合是否匹配和混合并不重要)

我尝试通过在索引期间标记一个特定字段将数据划分为两个不同的组,然后使用Solr“分组”查询,但这些查询的响应时间在我的设置中是不可接受的

我正在寻找最适合Solr的实验方法的建议:调整以提高两个查询解决方案的性能,或者研究一种定制的Solr post过滤器(我阅读了Yonik 2012年2月的博客文章)

我必须在Solr 3.5中实现这一点,尽管如果在4.0中有灌篮解决方案,我最终将能够实现这一点。

可能会满足您的需要。只需按该参数分组,并在每组中指定足够的顶级文档数即可

但我会测试它的性能是否比两个查询更好。因为它在“限制”部分提到了性能。

可能会满足您的要求。只需按该参数分组,并在每个组中指定足够的顶级文档数即可


但我会测试它的性能是否比两个查询更好。因为它在限制部分提到了性能。

我可以想出两种替代方法:-

  • 不要过滤结果,而是使用一个变量更高的boost,这样
    type:digital
    的所有结果都会显示在顶部,其余文档也会显示在顶部。无需单独查询。boost可以根据类型值进行更改

  • 另一种方法是不显示“其他”类型的结果,而显示“数字”类型的结果。但是,您可以显示其他类型的面,其计数相同,以便用户知道搜索词是否存在其他类型。您可以检查


  • 我可以想出两种备选办法:

  • 不要过滤结果,而是使用一个变量更高的boost,这样
    type:digital
    的所有结果都会显示在顶部,其余文档也会显示在顶部。无需单独查询。boost可以根据类型值进行更改

  • 另一种方法是不显示“其他”类型的结果,而显示“数字”类型的结果。但是,您可以显示其他类型的面,其计数相同,以便用户知道搜索词是否存在其他类型。您可以检查