匹配最接近的数值 elasticsearchDSL(php)

match closest number value elasticsearchDSL(php)

我在 SO、弹性搜索文档上找不到答案,或者 google 无法为我的用例找到这个答案: 找到最接近 X 输入但仍低于 X 的数字。

我有一个如下所示的映射:

{
    "rule": {
        "properties": {
        "price": { "type": "long" }, 
        "from": { "type": "long" }
        }
    }
}

我需要最接近的匹配 from,即小于输入值。 例如,我有这些规则:

{
    { "rule": {"from": 1, "price": 5} },
    { "rule": {"from": 50, "price": 4} },
    { "rule": {"from": 100, "price": 3} },
    { "rule": {"from": 150, "price": 2} }
}

如果我搜索值为 75 的 from,我需要 "from": 50 的规则。

我找到的大多数答案都与 geo/ip 或文本有关,我找不到让我点击的示例。

范围查询可用于获取所有小于等于输入值的规则。可以返回前 1 个排序的文档(by from )

查询:

{
  "query": {
    "range": {
      "rule.from": {
        "lte": 75
      }
    }
  },
  "size": 1,
  "sort": [
    {
      "rule.from": {
        "order": "desc"
      }
    }
  ]
}