我需要具有“预定义范围”过滤器构面。范围过滤器将用于学校的成绩范围。我想要K-2、3-5、6-8、9-12,每个人。我的记录包含MinGrade和MaxGrade字段。它们的值可以为K,1、2 ...,12或Everyone。我认为我可以使用范围过滤器。但是我不知道如何结合使用2个不同的字段来落入上述预定义的范围内。
有什么建议么?我希望这是有道理的。
我希望构面输出看起来像这样...
由于我更改为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} ] } } }
一样添加自定义标签 最佳答案
从来回的评论中,我相信我了解您想要什么。
即:
可以为A
和minGrade
之间的每个等级显示记录maxGrade
。
例如:
可以为123
和minGrade = 2
之间的每个等级显示记录maxGrade = 6
。
查询:
给定等级x的
minGrade <= x <= maxGrade
[x1. x2]
,根据给定的范围[minGrade, maxGrade]
如下:
x
(以伪代码表示):minGrade <= x AND x <= maxGrade
6-8
,您可以执行以下任一操作:(minGrade <= 6 AND 6 <= maxGrade) OR (minGrade <= 8 AND 8 <= maxGrade)
(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
,1表示maxGrade
。 编辑2
当每个文档仅定义1个
Grade
而不是minGrade
和maxGrade
时,解决方案将更改。使用简单的rangequery可以做到这一点。就像是: {
"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
}]
}
}
}
}
如果这不是您要追求的目标,请更具体地说明您要的目标。
关于filter - 是否可以在ElasticSearch中创建预定义范围过滤器构面?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22865914/