【问题标题】:SOLR : How to make solr filter on collapsed result setSOLR:如何在折叠的结果集上制作 solr 过滤器
【发布时间】:2018-07-14 16:23:38
【问题描述】:

我在使用 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 },

有没有办法解决这个问题??

谢谢

【问题讨论】:

    标签: solr


    【解决方案1】:

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

    所以这个结果是意料之中的,当你应用 fq=geohash: (4_u3bu) 时,它只返回两个文档,然后collapse 对这个结果根本不做任何事情,因为两个文档每个组成一个组,有没什么好崩溃的……

    要做你想做的事,试试这个:它可能会通过稍后执行第二个 fq 来工作(现在没有太多时间来测试)

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

    【讨论】:

    • 你知道我怎样才能得到预期的结果吗?我需要按旅行者 ID 分组,然后在每个组长上应用过滤器。我怎么能用 solr 做到这一点?
    • 添加了一些东西
    • 谢谢。刚刚尝试过,但不幸的是它不起作用fq={!collapse field=traveller_id min=ms(now,start_time)}&fq={!cache=false cost=200}geohash: (4_u3bu) 仍然返回日期时间较早的旅行者
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-07-30
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      • 2013-09-14
      相关资源
      最近更新 更多