如何在elasticsearch中使用Query DSL找到最近/最近的数字

2024-01-08

我正在寻找在弹性搜索的帮助下找到最近的价格/号码的可能性。问题是我没有范围。 我想要实现的是结果按最近距离排序。根据示例搜索查询,我的索引包含 3 个文档,其价格(数字)如下:45、27、32

对于给定数字,距我的搜索值 29 的“距离”是 45 - 29 = 16 | 45 - 29 = 16 27 - 29 = -2 | 27 - 29 = -2 32 - 29 = 3 所以我期望的是搜索结果是根据数字与给定价格的“距离”进行评分的。

搜索查询示例:

GET myawesomeindex/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "description": "this is the text i want to find"
          }
        },
        {
          "match": {
            "price": 29
          }
        }
      ]
    }
  }
}

我认为我的问题与这个类似的问题有关:Elasticsearch 根据数字与查询的接近程度进行评分 https://stackoverflow.com/questions/15880103/elasticsearch-scoring-based-on-how-close-a-number-is-to-a-query


就这样:

  "sort": {
    "_script": {
      "type": "number",
      "script": "return doc['price'].value-distance",
      "params": {
        "distance": 29
      },
      "lang": "groovy",
      "order": "desc"
    }
  }

并且您需要启用动态脚本 https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html#enable-dynamic-scripting.

你也可以这样做

  "query": {
    "function_score": {
      "query": {
        "bool": {
          "should": [
            {
              "match": {
                "description": "this is the text i want to find"
              }
            },
            {
              "match": {
                "price": 29
              }
            }
          ]
        }
      },
      "functions": [
        {
          "exp": {
            "price": {
              "origin": "29",
              "scale": "1",
              "decay": 0.999
            }
          }
        }
      ]
    }
  }

但这将改变score本身。如果您想要纯粹按距离排序(而不是其他),那么我相信第一个选项是最好的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在elasticsearch中使用Query DSL找到最近/最近的数字 的相关文章

随机推荐

  • 解决灾难性回溯的工具[重复]

    这个问题在这里已经有答案了 我一般要求提供一种工具或方法来查找正则表达式中导致不受控制的回溯的 热点 我对所有格匹配 否定前瞻断言 原子组等有相当好的掌握 但我面临着一种情况 不清楚我的正则表达式到底错在哪里 有问题的正则表达式是 PCRE
  • 文件搜索索引的算法问题

    有一个问题 我也有解决方案 但我无法理解解决方案 请提供一些示例并提供一些经验 Question 给定一个包含大约 3 亿个社会安全号码 9 位数字 的文件 查找文件中没有的 9 位数字 您拥有无限的驱动器空间 但只有 2MB 的 RAM
  • 如何将 Google One Tap 登录与 django-allauth 集成?

    如何将 Google One Tap 登录体验与 django allauth 集成 django allauth 是集成的 非常适合简单的用户名 密码登录 我拥有 Google OneTap 更好的用户体验 可以识别用户经过身份验证的 G
  • 从 Leaps regsubsets 获取所有模型

    我使用 regsubsets 来搜索模型 是否可以自动创建所有lm从参数选择列表中 library leaps leaps lt regsubsets y x1 x2 x3 data nbest 1 method exhaustive su
  • 如何将 json 编码的 PHP 数组转换为 Javascript 中的数组? [复制]

    这个问题在这里已经有答案了 我正在使用 AJAX 从 PHP 文件中获取 JSON 编码的数组 但在 JavaScript 中我需要将其用作数组 如何在 Javascript 中创建数组 我对 PHP 文件的 AJAX 调用 ajax ty
  • 如何在 Spinner 中选择项目并将其用作字符串?

    只是想看看我是否可以找出如何在微调器中选择项目并将其存储在字符串中 我已经看到了有关此问题的其他帖子 人们说将此行放入代码中 在我在下面发布的代码的最后一行下面 String Genders Gender getSelectedItem t
  • 将代码分配给动态创建的按钮

    我正在尝试获取一个在 Excel 用户表单上动态创建的按钮来运行名为的宏transfer我写过的Module 1我的项目的 模块 部分 下面我将迄今为止编写的代码粘贴到用户窗体中 该窗体实际上设法创建了Transfer to Sheet框架
  • “创建用户”怎么写?使用 MySQL 准备好的语句

    I tried SET user foo localhost SET pass bar SET sql CREATE USER IDENTIFIED BY PREPARE stmt FROM sql 我得到错误 ERROR 1064 420
  • FastAI lrfind()方法无法正常工作

    Update 1 我根据 无论坡度如何 你都希望从该点返回 10 倍 更新了我的 lr 并将其设置为 max lr 切片 1e 3 1e 2 这就是我得到的 和情节 这是什么意思 正如您在第二张图中看到的那样 从 1e 08 开始损失就非常
  • 为什么 JUnit 中不推荐使用assertEquals(double,double)?

    我想知道为什么assertEquals double double 已弃用 I used import static org junit Assert assertEquals 我使用的是 JUnit 4 11 下面是我的代码 import
  • 返回指向本地结构的指针

    我看到一些具有如下结构的代码示例 type point struct x y int func newPoint point return point 10 20 我有 C 背景 这对我来说似乎是错误 这种构造的语义是什么 新的点是分配在栈
  • 在行内插入表格

    我编写了一个包含两个表的脚本 tbl1是一个主表 tbl2是我想插入到的第二个表tbl1第二行使用纯JavaScript 它工作完美 但是我的tbl2有一些html attribute 插入后看到代码时没有看到 note tbl1 and
  • 如何用 PHP 解析 phpDoc 风格的注释块?

    请考虑以下代码 我尝试仅解析文件中的第一个 phpDoc 样式注释 不使用任何其他库 出于测试目的 将文件内容放入 data 变量中 data file A lot of info about this file Could even co
  • 为包含集合的对象实现 GetHashCode()

    考虑以下对象 class Route public int Origin get set public int Destination get set 路由实现相等运算符 class Routing public List
  • 术语“Update-Database”未被识别为 cmdlet 的名称

    我正在使用 EF5 beta1 虽然我之前能够运行 更新数据库 现在我关闭了 Visual Studio 我无法让它运行 我收到以下错误 术语 更新数据库 不被识别为 cmdlet 函数 脚本文件或可操作程序的名称 检查名称的拼写 或者如果
  • 解释 sed、grep 和 cut 语法

    我正在分析一个批处理文件 其中有一行编辑文本文件 输入 并制作 txt 文件 输出 该批处理使用三个帮助tools exe grep sed and cut 我尝试阅读他们的使用手册 但这并不容易 该行是 type input txt se
  • 带有“-std=c++0x”的“#include ”已损坏

    如果我指定 std c 0x到 g 那么我不能 include
  • CSS 性能和实现较少

    将 LESS 用于 CSS 的最佳方法是什么 基本上 开发人员应该编写一个 Less 文件 然后将其编译用于生产 我应该链接 LESS 代码和 javascript 文件吗 或者我应该完全跳过 LESS 路线并重新制作课程 我正在尝试将一些
  • 如何使用 HTML 父子关系中的 2 个 Svelte 组件将数据从子级传递到父级

    我是 Svelte 的新手 我在 HTML 父子关系中有 2 个 Svelte 组件 而不是 Svelte P C 关系 其中 1 个 Svelte 组件导入另一个组件 最终 我想要这样的东西 可能有很多 Accs
  • 如何在elasticsearch中使用Query DSL找到最近/最近的数字

    我正在寻找在弹性搜索的帮助下找到最近的价格 号码的可能性 问题是我没有范围 我想要实现的是结果按最近距离排序 根据示例搜索查询 我的索引包含 3 个文档 其价格 数字 如下 45 27 32 对于给定数字 距我的搜索值 29 的 距离 是