我有一个需要一个预定义的范围滤波器方面。范围过滤器将是一个学校的年级范围。我要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 <= maxGrade6-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
复制相似问题