【问题标题】:How do you specify a date facet query in Solr?如何在 Solr 中指定日期分面查询?
【发布时间】:2011-01-31 23:14:00
【问题描述】:

当我对 Solr 进行查询时,我会返回这些 facet_counts:

'facet_counts' => {
    'facet_dates' => {
        'photo_added' => {
            '2009-12-28T18:00:00Z' => 396386,
            '2010-05-28T18:00:00Z' => 415370,
            'gap' => '+1MONTH',
            'end' => '2011-02-28T18:00:00Z',
        },
    },
},

但是,当我将这些参数中的任何一个添加到q=*:* 查询时:

fq=photo_added:2009-12-28T18:00:00Z
fq=photo_added:2009-12-28T18%3A00%3A00Z

我收到此回复:

HTTP ERROR 400: Invalid Date String:'2009-12-28T18'

当我将任何一个 这些参数添加到q=*:*查询时:

fq=photo_added:"2009-12-28T18:00:00Z"
fq=photo_added:"2009-12-28T18%3A00%3A00Z"
fq%3Dphoto_added%3A%222009-12-28T18%3A00%3A00Z%22
fq=photo_added%3A"2009-12-28T18%3A00%3A00Z"

我在回复中收到:

<result name="response" numFound="0" start="0"/>

但是当我的查询没有fq= 约束时,我得到numFound="8001000",所以fq= 约束肯定有问题。

如何进行有效的日期分面查询?

【问题讨论】:

    标签: solr


    【解决方案1】:

    我认为您误解了日期方面的结果。 IIRC,由于您定义了 1 个月的差距,因此结果 '2009-12-28T18:00:00Z' =&gt; 396386 意味着在 2009-12-28T18:00:00Z 和 2010-01-28T18:00:00Z(一个月)之间有 396386 个结果。

    但是,您正在运行具有确切日期的过滤器查询,并且您没有得到任何结果,因为没有文档与该日期和时间完全匹配。如果您想获取这 396386 个文档,请运行过滤器查询,范围在我上面提到的日期之间:fq=photo_added:[2009-12-28T18:00:00Z TO 2010-01-28T18:00:00Z]

    【讨论】:

    • 你必须添加额外的逻辑才能获得你已经用 date.start、date.end 和 date.gap 指定的方面,这很糟糕。这里有一个修复此行为的功能请求:issues.apache.org/jira/browse/SOLR-1896
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2013-06-10
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    相关资源
    最近更新 更多