具有函数得分的 ElasticSearch 查询运行速度慢了 10 倍以上

2024-02-13

这是我的没有功能分数的查询:

{
  "from": 200,
  "size": 25,
  "query": {
    "bool": {
    "filter": {
          "bool": {
            "must": [
              {
                "nested": {
                  "query": {
                    "terms": {
                      "cotypes.id": [
                        199
                      ]
                    }
                  },
                  "path": "cotypes"
                }
              },
              {
                "range": {
                  "relevance": {
                    "from": 6,
                    "to": null,
                    "include_lower": true,
                    "include_upper": true
                  }
                }
              }
            ],
            "must_not": {
              "terms": {
                "ontologyId": [
                  1314696,
                  1314691
                ]
              }
            }
          }
        },
      "must": {
        "match": {
          "name.nameStandard": {
            "query": "john smith",
            "type": "boolean",
            "boost": 10
          }
        }
      }
    }
  }
}

此查询将在约 250 毫秒内返回响应。

但我需要添加一些提升因子来提高默认得分。我修改了查询以使用函数得分,但之后查询花费了太长时间(~3000ms)

这是分数查询函数:

{
  "from": 200,
  "size": 25,
  "query": {
  "function_score": {
    "query": {
    "bool": {
    "filter": {
          "bool": {
            "must": [
              {
                "nested": {
                  "query": {
                    "terms": {
                      "cotypes.id": [
                        199
                      ]
                    }
                  },
                  "path": "cotypes"
                }
              },
              {
                "range": {
                  "relevance": {
                    "from": 6,
                    "to": null,
                    "include_lower": true,
                    "include_upper": true
                  }
                }
              }
            ],
            "must_not": {
              "terms": {
                "ontologyId": [
                  1314696,
                  1314691
                ]
              }
            }
          }
        },
      "must": {
        "match": {
          "name.nameStandard": {
            "query": "john smith",
            "type": "boolean",
            "boost": 10
          }
        }
      }
    }
    },
    "functions": [
      {
        "script_score": {
          "script": {
            "file": "calculate-score",
            "lang": "groovy",
            "params": {
              "relevance_boost": 0.5
            }
          }
        }
      }
    ],
    "boost_mode": "sum"
  }
}
}

calculate-score.groovy 脚本如下:

def penalize = 1
def penalizeClassDict = [
    '226': 0.25,
    '14106': 0.25,
    '656': 0.25
   ]
for (item in _source.cotypes)
{
    if(penalizeClassDict.containsKey(item.id.toString()))
        penalize = penalize * penalizeClassDict[ item.id.toString()]
}
_score + (pow(_source.relevance, relevance_boost)) * 1

请帮助我使查询执行得更好!

先感谢您!


None

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

具有函数得分的 ElasticSearch 查询运行速度慢了 10 倍以上 的相关文章

随机推荐

  • 将 url 表放入 `data.frame` R-XML-RCurl

    我正在尝试将网址表放入data frame 在其他示例中 我发现以下代码有效 library XML library RCurl theurl lt https es finance yahoo com q cp s BEL20 BR ta
  • 无法在vb.net中将文件写入硬盘

    您好 我检查了此处存在的所有问题对我没有帮助 所以我问 好的 我们开始吧 我尝试将文件从 资源 复制到 C Test 文件夹对我不起作用 这是我尝试过的 首先 我将 test txt 文件放在资源中复制到 C Test 文件夹 但出现错误
  • WebBrowser 控件和 cookie

    我对 WebBrowser 控件和 cookie 有疑问 首先 当人们在普通的 Web 浏览器 在我的例子中是 IE9 中导航时会发生什么 1 1 我打开网页http www gmail com http www gmail com 我输入
  • 如何以编程方式获取计算机的本地网络 IP 地址?

    我需要使用 C 和 NET 3 5 从我的程序中获取计算机的实际本地网络 IP 地址 例如 192 168 0 220 在这种情况下我不能只使用 127 0 0 1 我怎样才能做到这一点 如果您正在寻找命令行实用程序 ipconfig 可以
  • Python 在屏幕上绘图

    我正在编写一个需要选择屏幕区域的应用程序 我需要将光标更改为十字形 然后在用户选择上绘制一个矩形 我搜索的第一件事是如何操作光标 然后我遇到了 wxPython 使用wxPython 我可以轻松地在带有面板的框架上执行此操作 问题是我需要窗
  • 如何在 Python 日志消息中将“levelname”重命名为“level”?

    我有一个 Python 日志记录配置 如下所示 LOGGING CONFIG version 1 formatters human class logging Formatter format asctime s levelname s m
  • 我应该阻止密码自动完成吗?

    有很多在这里回复 https stackoverflow com questions 2530 how do you disable browser autocomplete on web form field input tag on h
  • 更新应用程序而不安装新的APK

    我正在尝试查看是否可以远程更新用户手机上的应用程序无需下载 apk文件 这是我的 老板 的信息收集请求 他认为这在 iOS 上是可能的 所以他希望我在 Android 上检查一下 本质上 我试图让我的应用程序偶尔从我们的网络服务器中提取版本
  • BigQuery 可以用作主要查询引擎吗?

    我想知道是否可以深入了解使用 BigQuery 作为我们正在开发的分析工具的主要查询引擎的可行性 我们的公共 API 实际上需要使用 PHP SDK 可能超过 1 亿行 执行至少数百个并发 SELECT 查询 但从当前文档来看 BigQue
  • 使用 NodeJS+Express、aws-sdk 将文件直接流式传输到 s3

    我想使用 NodeJS 通过浏览器直接上传一些大文件到 s3 目前还不清楚如何准备该文件上传到 s3 可能有更好的模块 如 Knox 来处理这种情况 但我不确定 有什么想法吗 文件对象 file webkitRelativePath las
  • 如何使用带 IN 子句的 PDO 准备语句? [复制]

    这个问题在这里已经有答案了 我以这种格式将一些数据存储在 MySQL 内的字段中 1 5 9 4我将这个字段命名为related 现在我想在一个内部使用这个字段IN 子句 with PDO 我将该字段内容存储在 related多变的 这是我
  • 为应用整个页面的正文提供背景颜色。为什么?

    body background color red div Hello World div So the background color red 适用于整个页面高度 但当我检查页面时 正文的高度仅达到div含有你好世界 有人请解释一下为什
  • 根据设备大小缩放多行 UIButton 上的字体

    当前设置 我有一个多行的 UIButton它被添加到它的超级视图 一个普通的UIView 按钮的宽度是其父视图的 90 因此 当其父视图的大小发生变化时 标签的宽度也会相应变化 因为Autolayout限制 接下来 在 viewDidLoa
  • Firebase 处理与数据库的断开连接

    我不确定它是否已断开连接或数据库错误事件 首先 当开始在 Firebase 上加载数据时 我会显示一个对话框 然后我想在两种情况下关闭该对话框 有互联网 加载数据成功 我在 onDataChange 中关闭对话框 应用程序启动时没有互联网连
  • 使用 getters() 还是在 POJO 中使用直接字段访问?

    给定一个简单的 POJO 它真的会产生影响吗 或者使用以下任一方法是否可能产生副作用 total getPriorAmount getCurrentAmount OR total this priorAmount this currentA
  • 从 Eclipse 运行干净的 Android 构建?

    有没有办法从 Eclipse 运行构建 每次都会清除应用程序的数据 我想这样做是为了检查我的应用程序的首次运行体验 如果您使用的是 eclipse 请转到应用程序的运行配置 单击目标选项卡 然后选中擦除用户数据字段 我相信这会在每次运行 e
  • 在 JavaFX 中的所有表格单元格上设置工具提示

    我的应用程序包含一个TableView 根据每行中特定单元格的值 通过设置自定义单元格工厂来更改行样式setCellFactory对于本专栏 这很好用 现在我想添加一个工具提示 使用它没什么大不了的setTooltip 然而 此工具提示应设
  • 删除与正则表达式匹配的文件

    在 Windows 上从与 Perl 中的某些正则表达式匹配的目录中删除所有文件的最短和最好的方法 我的例子 全部删除 txt目录中的文件 但保留tmp txt 视窗 chdir dir or die unlink grep ne tmp
  • Pandas 将所有对象列转换为类别

    我想要一个优雅的函数来将 pandas 数据框中的所有对象列转换为类别 df x df x astype category 执行类型转换df select dtypes include object 将子选择所有类别列 但是 这会导致其他列
  • 具有函数得分的 ElasticSearch 查询运行速度慢了 10 倍以上

    这是我的没有功能分数的查询 from 200 size 25 query bool filter bool must nested query terms cotypes id 199