我有一个需要一个预定义的范围滤波器方面。范围过滤器将是一个学校的年级范围。我要K-2,3-5,6-8,9-12,所有人。我的记录有MinGrade和MaxGrade字段。它们的值可以是K,1,2.或者每个人我想我可以用一个距离过滤器。但我不知道如何使用两个不同的字段合并,以落入上述预定义的范围。有什么建议吗?我希望这是合理的。
我希望小面输出像这样.
由于我更改为1 DB列,所以range查询工作正常,因此也很想知道是否可以在"facets": { "Grade": { "range": { "field": "Grade", "ranges": [ {"label" : "K-2", "gte": 0, "lte": 2}, {"label" : "3-5", "gte": 3, "lte": 5}, {"label" : "6-8", "gte": 6, "lte": 8}, {"label" : "9-12", "gte": 9, "lte": 12}, {"label" : "Above 12", "gte": 13} ] } } }
下面添加一个自定义标签。
发布于 2014-04-10 11:54:49
从前后的评论,我相信我理解你想要什么。
在minGrade
和maxGrade
之间的每一个等级都可以显示一个记录的maxGrade
。
例如:123
记录可以显示在minGrade = 2
和maxGrade = 6
之间的每个等级。
查询:
minGrade <= x <= maxGrade
记录[x1. x2]
,根据其范围[minGrade, maxGrade]
,确定所有有非空重叠的记录。如下所示:
x
(伪码):minGrade <= x AND x <= maxGrade
6-8
,您可以执行以下任一操作:1. `(minGrade <= 6 AND 6 <= maxGrade) OR (minGrade <= 8 AND 8 <= maxGrade)`
2. `(6 <= minGrade AND minGrade <= 8) OR (6 <= maxGrade AND maxGrade <= 8)`
2.2。可以使用2 rangeQueries实现:1在mingrade
上实现,1在maxgrade
上结合OR
实现
因此,过滤器方面的示例1可以是(未经测试的):
{
"facets": {
"grade_6-8": {
"filter": {
"or": [{
"range": {
"minGrade": {
"gte": 6,
"lte": 8
}
}
},
{
"range": {
"maxGrade": {
"gte": 6,
"lte": 8
}
}
}]
}
}
}
}
编辑:上面是一个:
grade_6-8
的面or
过滤器。minGrade
,一个用于maxGrade
。编辑2时,每个文档只定义一个Grade
,而不是minGrade
和maxGrade
,解决方案会发生变化。通过一个简单的距离平衡就可以做到这一点。类似于:
{
"query": {
"match_all": {}
},
"facets": {
"grade_ranges": {
"range": {
"field": "grade",
"ranges": [{
"to": 2
}, {
"from": 3,
"to": 5
}, {
"from": 6,
"to": 8
}, {
"from": 9,
"to": 12
}, {
"from": 13
}]
}
}
}
}
如果这不是你想要的,请更具体地说明你想要的。
https://stackoverflow.com/questions/22865914
复制相似问题