【发布时间】:2018-11-22 19:06:13
【问题描述】:
我在 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 的间隔、范围等,但似乎无法得到有效的东西。
【问题讨论】: