elasticsearch,range,facet,Filter,elasticsearch,Range,Facet" /> elasticsearch,range,facet,Filter,elasticsearch,Range,Facet" />

Filter 是否可以在ElasticSearch中创建预定义的范围过滤器方面?

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,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列,所以我的范围查询工作正常,我还想知道是否可以添加一个自定义标签,如下面的
“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

查询:


  • 对于给定的x级,返回所有记录,
    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
                        }]
                    }
                }
            }
        }