我有一个Solr解决方案,需要两个查询,但我正在寻找一种方法在单个查询中执行。我的想法是,如果我能找到一种方法来实现这一点,我就不必承担Solr集群上两倍负载的开销。
详细信息:我正在运行一个简单的查询,例如“q = camera”,其查询过滤器为“fq = type:digital”。第二个查询与第一个查询相同,但过滤器是反向的,如“fq = -type:digital”我想象的是,如果有一种方法可以在应用第一个过滤器时运行单个查询来获取第一个topDocs,然后使用第二个过滤器生成第二个集合,结果可以合并并返回(如果排序调整并混合两个集合,则无关紧要)。
我通过在索引编制期间将特定字段标记为两个不同的组,然后使用Solr“分组”查询来对数据进行分区实验,但在我的设置中,这些查询的响应时间是不可接受的。
我正在寻找最合适的Solr实验方法的建议:调整以提高双查询解决方案性能,或调查一种自定义Solr后置过滤器(我读过Yonik的2/2012博客文章)。 / p>
我必须在Solr 3.5中实现这一点,尽管如果在4.0中有一个灌篮解决方案,我最终将能够转向它。
答案 0 :(得分:1)
我可以想到两种替代方法: -
不使用过滤结果,而是使用变量更高的提升,以便type:digital
的所有结果都排在最前面,其余文档将会跟随。无需单独查询。可以根据类型值更改提升。
其他方法不是显示其他类型的数字结果。但是,您可以显示其他类型的构面,并为用户显示相同的计数,以了解搜索项是否存在其他类型。您可以查看tagging and excluding filters
答案 1 :(得分:0)
Result grouping可能会给你你想要的东西。只需按该参数分组,并在每个组中指定足够的最大文档数。
但我会测试它的性能是否优于两个查询。仅仅因为它提到了限制部分的表现。