【问题标题】:match closest number value elasticsearchDSL(php)匹配最接近的数值 elasticsearchDSL(php)
【发布时间】:2020-03-10 04:55:14
【问题描述】:

我无法在 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} }
}

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

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

【问题讨论】:

    标签: php elasticsearch elasticsearch-dsl elasticsearch-query range-query


    【解决方案1】:

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

    查询:

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

    【讨论】:

    • 完美,正是我所需要的,我觉得这几乎是愚蠢的,因为这也是你对 SQL 所做的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 2017-09-29
    • 2011-07-24
    • 1970-01-01
    • 2011-03-01
    • 2015-03-18
    • 1970-01-01
    相关资源
    最近更新 更多