gpt4 book ai didi

filter - 是否可以在ElasticSearch中创建预定义范围过滤器构面?

转载 作者:行者123 更新时间:2023-12-03 02:08:00 26 4
gpt4 key购买 nike

我需要具有“预定义范围”过滤器构面。范围过滤器将用于学校的成绩范围。我想要K-2、3-5、6-8、9-12,每个人。我的记录包含MinGrade和MaxGrade字段。它们的值可以为K,1、2 ...,12或Everyone。我认为我可以使用范围过滤器。但是我不知道如何结合使用2个不同的字段来落入上述预定义的范围内。
有什么建议么?我希望这是有道理的。

我希望构面输出看起来像这样...

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

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

    最佳答案

    从来回的评论中,我相信我了解您想要什么。

    即:
    可以为AminGrade之间的每个等级显示记录maxGrade

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

    查询:

    给定等级x的

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

    如下:
  • 给定的等级x(以伪代码表示):minGrade <= x AND x <= maxGrade
  • 您需要为每个存储桶分别构建filter-facets。例如:对于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个在 maxgradeOR组合

    因此,筛选器构面的示例1可以是(未试用):
        {
    "facets": {
    "grade_6-8": {
    "filter": {
    "or": [{
    "range": {
    "minGrade": {
    "gte": 6,
    "lte": 8
    }
    }
    },
    {
    "range": {
    "maxGrade": {
    "gte": 6,
    "lte": 8
    }
    }
    }]
    }
    }
    }
    }

    编辑:以上是一个:
  • 构面称为grade_6-8
  • 类型为“过滤器构面”的
  • 包含 or
  • -过滤
  • ,其中又包含2 range filters。 1表示minGrade,1表示maxGrade
  • 注意您应该为需要单独使用的所有范围重复此操作

  • 编辑2
    当每个文档仅定义1个 Grade而不是 minGrademaxGrade时,解决方案将更改。使用简单的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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com