我在使用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 },
反正有解决办法吗?
谢谢
答案 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)
解决此问题的唯一方法是使用自定义插件,分组完成后将在其中进行过滤。