首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以在ElasticSearch中创建一个预定义的范围过滤器面?

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

Stack Overflow用户
提问于 2014-04-04 14:44:45
回答 1查看 264关注 0票数 0

我有一个需要一个预定义的范围滤波器方面。范围过滤器将是一个学校的年级范围。我要K-2,3-5,6-8,9-12,所有人。我的记录有MinGrade和MaxGrade字段。它们的值可以是K,1,2.或者每个人我想我可以用一个距离过滤器。但我不知道如何使用两个不同的字段合并,以落入上述预定义的范围。有什么建议吗?我希望这是合理的。

我希望小面输出像这样.

  • K-2 (xxx)
  • 3-5 (xxx)
  • 6-8 (xxx)
  • 9-12 (xxx)
  • 其他人(xxx)

由于我更改为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} ] } } }下面添加一个自定义标签。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-10 11:54:49

从前后的评论,我相信我理解你想要什么。

minGrademaxGrade之间的每一个等级都可以显示一个记录的maxGrade

例如:123记录可以显示在minGrade = 2maxGrade = 6之间的每个等级。

查询:

  1. 对于给定的x级,返回所有minGrade <= x <= maxGrade记录
  2. 在这里问我相信:对于给定的等级范围,比如[x1. x2],根据其范围[minGrade, maxGrade],确定所有有非空重叠的记录。

如下所示:

  1. 给定等级x (伪码):minGrade <= x AND x <= maxGrade
  2. 您需要为每个桶构建单独的滤光片。例如:对于6-8,您可以执行以下任一操作:
代码语言:javascript
运行
复制
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可以是(未经测试的):

代码语言:javascript
运行
复制
    {
        "facets": {
            "grade_6-8": {
                "filter": {
                    "or": [{
                        "range": {
                            "minGrade": {
                                "gte": 6,
                                "lte": 8
                            }
                        }
                    },
                    {
                        "range": {
                            "maxGrade": {
                                "gte": 6,
                                "lte": 8
                            }
                        }
                    }]
                }
            }
        }
    }

编辑:上面是一个:

  • 称为grade_6-8的面
  • “滤池”型
  • ,它包含一个or过滤器。
  • 其中包含2 距离滤波器。一个用于minGrade,一个用于maxGrade
  • 注意:,您应该对您需要的所有范围分别重复此操作

编辑2时,每个文档只定义一个Grade,而不是minGrademaxGrade,解决方案会发生变化。通过一个简单的距离平衡就可以做到这一点。类似于:

代码语言:javascript
运行
复制
    {
        "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
                    }]
                }
            }
        }
    }

如果这不是你想要的,请更具体地说明你想要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22865914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档