首页 > 解决方案 > 匹配最接近的数值 elasticsearchDSL(php)

问题描述

我无法在 SO、弹性搜索文档或谷歌上找到适合我的用例的答案:找到最接近 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} }
}

如果我搜索from值为 off 75 的 ,我想要"from": 50.

我找到的大多数答案都与地理/IP 或文本有关,我找不到一个让我点击它的例子。

标签: phpelasticsearchelasticsearch-dslelasticsearch-queryrange-query

解决方案


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

询问:

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

推荐阅读