SOLR:如何对折叠的结果集进行solr过滤

时间:2018-07-14 16:23:39

标签: solr

我在使用SOLR Collapse时遇到问题,这给了我意外的结果。

假设旅行者:

{ traveller_id: 1, geo_hash: 4_u3bu, start_time: 2016-07-14T23:59:00Z },
{ traveller_id: 1, geo_hash: 4_de5f, start_time: 2018-07-14T23:59:00Z },
{ traveller_id: 2, geo_hash: 4_u3bu, start_time: 2018-07-14T23:59:00Z },

基本上,我的查询中有2 fq,如下所示...

第一个分组的旅行者ID具有最近的开始时间。

fq={!collapse field=traveller_id min=ms(now,start_time) }

这时,当我仅在查询中添加该过滤器时,会得到以下结果:

 { traveller_id: 1, geo_hash: 4_de5f, start_time: 2018-07-14T23:59:00Z},
 { traveller_id: 2, geo_hash: 4_u3bu, start_time: 2018-07-14T23:59:00Z},

看起来不错...但是,等等!

如果我还添加了一个额外的fq来仅获取具有特定geohash的文档,则在下面的后者中:

fq=geohash: (4_u3bu)

然后结果变得不正确:

{ traveller_id: 1, geo_hash: 4_u3bu, start_time: 2016-07-14T23:59:00Z },
{ traveller_id: 2, geo_hash: 4_u3bu, start_time: 2018-07-14T23:59:00Z },

就像solr一样,首先用geohash:4_u3bu拾起旅行者,然后才进行分组。

那是为什么?我希望Solr首先由最近的旅行者组成,然后应用geohash过滤器...

预期结果是:

{ traveller_id: 2, geo_hash: 4_u3bu, start_time: 2018-07-14T23:59:00Z },

反正有解决办法吗?

谢谢

2 个答案:

答案 0 :(得分:1)

即使它在fq中使用,但折叠查询解析器实际上并没有过滤掉任何文档,它只是按traveller_id对它们进行分组,然后从每个组中选择一个文档作为该组的头。

因此,当您应用fq = geohash:(4_u3bu)时,此结果是预期的,因此仅返回两个文档,然后折叠对该结果完全不起作用,因为两个文档各自组成一个组,因此没有崩溃...

要做您想做的事,尝试一下:它可以稍后再做第二个fq提取物来工作(现在没有太多时间来测试)

fq={!collapse field=traveller_id min=ms(now,start_time)}&fq={cache=false cost=200}geohash: (4_u3bu)

答案 1 :(得分:0)

解决此问题的唯一方法是使用自定义插件,分组完成后将在其中进行过滤。