Filter 是否可以在ElasticSearch中创建预定义的范围过滤器方面?
我需要一个预定义的范围过滤器方面。范围过滤器将用于学校的年级范围。我要K-2,3-5,6-8,9-12,所有人。我的记录有MinGrade和MaxGrade字段。它们可以有K,1,2,12或所有人。我想我可能会使用范围过滤器。但我不知道如何组合使用两个不同的字段,使其落入上述预定义范围。 有什么建议吗?我希望这是有道理的 我希望facet输出如下所示Filter 是否可以在ElasticSearch中创建预定义的范围过滤器方面?,filter,elasticsearch,range,facet,Filter,elasticsearch,Range,Facet,我需要一个预定义的范围过滤器方面。范围过滤器将用于学校的年级范围。我要K-2,3-5,6-8,9-12,所有人。我的记录有MinGrade和MaxGrade字段。它们可以有K,1,2,12或所有人。我想我可能会使用范围过滤器。但我不知道如何组合使用两个不同的字段,使其落入上述预定义范围。 有什么建议吗?我希望这是有道理的 我希望facet输出如下所示 K-2(xxx) 3-5(xxx) 6-8(xxx) 9-12(xxx) 其他人(xxx) 由于我改为1db列,所以我的范围查询工作正常,我还
- K-2(xxx)
- 3-5(xxx)
- 6-8(xxx)
- 9-12(xxx)
- 其他人(xxx)
“facets”:{
“等级”:{
“范围”:{
“字段”:“等级”,
“范围”:[
{“标签”:“K-2”,“gte”:0,“lte”:2},
{“标签”:“3-5”,“gte”:3,“lte”:5},
{“标签”:“6-8”,“gte”:6,“lte”:8},
{“标签”:“9-12”,“gte”:9,“lte”:12},
{“标签”:“高于12”,“gte”:13}
]
}
}
}
从前后的评论中,我相信我理解您的需求
即:
可以为minGrade
和maxGrade
之间的每个等级显示记录a
例如:
可以为minGrade=2
和maxGrade=6
之间的每个等级显示记录123
查询:
minGrade您可以用伪代码举例说明范围过滤器在多个字段中的外观。(mingrade
和maxgrade
)?我很难想象你想要完成什么。示例记录。。。记录编号、标题、minGrade、maxGrade。。。。示例数据。。。2345,“我的视频1”,1,2。。。5678,'视频2',6,8。。。。6789,'视频3',K,1。。。。请注意,有些视频介于K-2和6-8之间,等等。。。。希望这对您有所帮助,您只想设置两个单独的范围过滤器吗?1个在minGrade
上,1个在maxGrade
上?我刚刚用我想要的输出过滤器的样子编辑了我的问题。我正在讨论修改我的查询,以便将分数返回到一列中,然后我认为为一列创建范围过滤器可能更容易,我只需要正确的语法OK,我理解方面的输出。通常我会认为每个记录都会有一个字段等级
?我不明白每个记录的minGrade
和maxGrade
的意思,以及它们与您的输出的关系。例如,你能用伪逻辑(英文)描述一下minGrade
和maxGrade
中的哪些记录将属于3-5
?谢谢,我想你已经明白我所问的要点了。我希望用户能够点击过滤器。所以我想显示所有可能的等级范围。在上述语法中,它如何知道要使用哪个DB字段?我不明白。。。“字段”:“Grade”Ehmm,firstoff,我现在知道你说你把数据库改成了1列Grade
。正如您前面提到的那样,我已经为具有两列minGrade
和maxGrade
的记录提供了一个解决方案。请参见底部答案中的解释,这是如何构造的。注意:这不是一个范围方面,你似乎仍在尝试,因为这不能用2个字段完成afaik。请将你的注释和代码移到你的原始问题,以便它变得可读,我可以看看如何对1个字段进行范围查询。
{
"facets": {
"grade_6-8": {
"filter": {
"or": [{
"range": {
"minGrade": {
"gte": 6,
"lte": 8
}
}
},
{
"range": {
"maxGrade": {
"gte": 6,
"lte": 8
}
}
}]
}
}
}
}
{
"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
}]
}
}
}
}