我需要有一个预定义范围滤镜方面。范围过滤器将用于学校的等级范围。我想要K-2,3-5,6-8,9-12,每个人。我的记录有MinGrade和MaxGrade字段。它们可以具有值K,1,2 ......,12或Everyone。我想我可以使用范围过滤器。但我无法弄清楚如何使用2个不同的字段组合,落入上面的预定义范围。 有什么建议?我希望这是有道理的。
我希望facet输出看起来像这样......
由于我已更改为1个DB列,因此我可以使用范围查询,也很好奇是否可以添加自定义标签,如下所示"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}
]
}
}
}
答案 0 :(得分:1)
从评论来回反复我相信我明白你想要什么。
即:
可以为A
和minGrade
之间的每个成绩显示记录maxGrade
。
例如:
123
和minGrade = 2
之间的每个成绩都可能会显示maxGrade = 6
条记录。
查询:
minGrade <= x <= maxGrade
[x1. x2]
,确定所有具有非空重叠的记录,并给出其范围{ {1}} 如下:
[minGrade, maxGrade]
(伪代码):x
您需要为每个存储桶构建单独的filter-facets。例如:对于minGrade <= x AND x <= maxGrade
,您可以执行以下任一操作:
6-8
(minGrade <= 6 AND 6 <= maxGrade) OR (minGrade <= 8 AND 8 <= maxGrade)
2.2。可以使用2个rangeQueries实现:(6 <= minGrade AND minGrade <= 8) OR (6 <= maxGrade AND maxGrade <= 8)
上的1个和mingrade
上的1个maxgrade
因此,过滤器构面的示例1可以是(未经测试的):
OR
编辑:以上是:
{
"facets": {
"grade_6-8": {
"filter": {
"or": [{
"range": {
"minGrade": {
"gte": 6,
"lte": 8
}
}
},
{
"range": {
"maxGrade": {
"gte": 6,
"lte": 8
}
}
}]
}
}
}
}
grade_6-8
- 过滤器or
为1,minGrade
为1。 编辑2
当每个文档仅定义1 maxGrade
而不是Grade
和minGrade
时,解决方案会发生变化。可以使用简单的范围查询来完成此操作。类似的东西:
maxGrade
如果这不是您之后的事情,请更具体地说明您想要的内容。