SOLR按不同日期范围分组

时间:2018-11-22 19:06:13

标签: search solr

我在Solr中有很多这样的数据:

{
    id: some_id
    date: 2008-01-01T00:00:00Z
    price: 34.20
    currency: "CAD"
    weight: 39.9
    etc
}

我想对其进行搜索以找到唯一的ID集,并按时间对其进行分组。所以有时候我想找到满足每天,每周或每月搜索需求的物品。

我尝试执行此操作的第一种方法是将fq(字段查询)设置为所需的日期范围,并设置facet.field=id以获取该范围的唯一ID,但是如果我想要每天做一次,我必须做365(+ 0 / + 1)个查询,这很痛苦而且很慢。

对此的一种解决方案是使用facet.pivot=date,id,将其分解为每一天,然后每天提供一组ID。这是完美的日常情况!但是,我们每周如何实现同一目标?还是每月?

我想要的是第一个facet.pivot,即日期,它是一个值范围。所以不要得到这个:

{
  "responseHeader":{
    ...
  },
  "facet_counts":{
    ...
    "facet_pivot":{
      "date,id":[{
          "field":"date",
          "value":"2008-01-01T00:00:00Z",
          "count":923,
          "pivot":[{
              "field":"id",
              "value":18,
              "count":1},
            {
              "field":"id",
              "value":66,
              "count":1},
            {
              "field":"id",
              "value":70,
              "count":1},
        ]
      }
      ...]
    }
}

我们得到这样的东西:

{
  "responseHeader":{
    ...
  },
  "facet_counts":{
    ...
    "facet_pivot":{
      "date,id":[{
          "field":"date",
          "value":"2008-01-01T00:00:00Z TO 2008-01-31T00:00:00Z",
          "count":923,
          "pivot":[...similar to above]
      }
      ...]
    }
}

换句话说,它不是根据date的值进行分组,而是根据范围/间隔/等进行分组。我已经开玩笑了SOLR的间隔,范围等,但是似乎无法获得有用的东西。

1 个答案:

答案 0 :(得分:0)

请尝试以下操作,以获取每月间隔与周的间隔。

facet.range={!tag=rdt}date&facet.range.start=NOW/DAY&facet.range.gap=+7DAY&facet.range.end=NOW/DAY +30DAY&facet=true&facet.pivot={!range=rdt}date,id

我希望这会有所帮助!