ElasticSearch:禁用 Groovy 时对 _score 字段进行聚合

2023-11-23

我见过的每个例子(例如,ElasticSearch:在 _score 字段上聚合?)用于对 _score 字段进行聚合或与 _score 字段相关的聚合似乎需要使用脚本。由于 ElasticSearch 出于安全原因默认禁用动态脚本,有没有什么方法可以实现这一点,而无需将脚本文件加载到每个 ES 节点或重新启用动态脚本?

我原来的聚合如下所示:

"aggs": {
    "terms_agg": {
        "terms": {
            "field": "field1",
            "order": {"max_score": "desc"}
        },
     "aggs": {
         "max_score": {
             "max": {"script": "_score"}
         },
         "top_terms": {
             "top_hits": {"size": 1}
         }
      }
}

尝试将表达式指定为 lang 似乎不起作用,因为 ES 会抛出错误,指出分数只能在用于排序时访问。我想不出任何其他方法可以通过分数字段对我的存储桶进行排序。有人有主意吗?

编辑:澄清一下,我的限制是无法修改服务器端。即,我无法在 ES 安装或配置过程中添加或编辑任何内容。


一种可能的方法是使用其他可用的脚本选项。mvel除非启用动态脚本,否则似乎无法使用。并且,除非对脚本启用/禁用进行更细粒度的控制达到 1.6 版本,我认为不可能启用动态脚本mvel而不是为了groovy.

我们剩下native and mustache(用于模板)默认启用。我不认为可以使用自定义脚本来完成mustache,如果可能的话,我没有找到办法,我们只剩下native(Java)脚本。

这是我对此的看法:

  • 创建一个实现NativeScriptFactory:
package com.foo.script;

import java.util.Map;

import org.elasticsearch.script.ExecutableScript;
import org.elasticsearch.script.NativeScriptFactory;

public class MyScriptNativeScriptFactory implements NativeScriptFactory {

    @Override
    public ExecutableScript newScript(Map<String, Object> arg0) {
        return new MyScript();
    }

}
  • 的实施AbstractFloatSearchScript例如:
package com.foo.script;

import java.io.IOException;

import org.elasticsearch.script.AbstractFloatSearchScript;

public class MyScript extends AbstractFloatSearchScript {

    @Override
    public float runAsFloat() {
        try {
            return score();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return 0;
    }

}
  • 或者,构建一个简单的 Maven 项目将所有内容结合在一起。 pom.xml:
<properties>
    <elasticsearch.version>1.5.2</elasticsearch.version>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

<dependencies>
    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>${elasticsearch.version}</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>
  • 构建它并获取生成的 jar 文件。
  • 将 jar 放入 [ES_folder]/lib 中
  • edit elasticsearch.yml并添加 script.native.my_script.type: com.foo.script.MyScriptNativeScriptFactory

  • 重启ES节点。

  • 在聚合中使用它:
{
  "aggs": {
    "max_score": {
      "max": {
        "script": "my_script",
        "lang": "native"
      }
    }
  }
}

我上面的示例仅返回_score作为脚本,但当然,它可以用于更高级的场景。

编辑:如果不允许您触摸实例,那么我认为您没有任何选择。

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

ElasticSearch:禁用 Groovy 时对 _score 字段进行聚合 的相关文章

  • 弹性搜索文档计数

    我正在运行 2 2 版本的 Elastic 搜索 我已经创建了索引并加载了示例文档 我发现其中有些问题 当我给予 GET index type count 我得到了正确的答案 count 9998 shards total 5 succes
  • 如何在 Groovy 中设置最后一个字段

    我有一个在 groovy spock 中测试的 java 类 java 类有一个final 字段 private static final log Logger getLogger 我想测试一个方法是否使用此记录器 最好使用模拟 问题是这个
  • 编写多个mysql脚本

    是否可以在复合脚本中包含其他 mysql 脚本 理想情况下 我不想为包含的脚本创建存储过程 对于较大的项目 我想分层维护几个较小的脚本 然后根据需要组合它们 但现在 我很乐意学习如何包含其他脚本 source是一个内置命令 您可以在 MyS
  • 如何在一行中输出多个变量

    我试图确定 CSV 中的用户是否处于活动状态 此外 我想知道它们是否是服务帐户 用户帐户或基于 OU 的计算机帐户 一切都在膨胀 直到我尝试输出它 输出分为几行 每个变量一行 我希望输出在一行上 中间有逗号 这样我完成后就会有一个 CSV
  • Bash 脚本 - 迭代 find 的输出

    我有一个 bash 脚本 其中需要迭代 find 命令输出的每一行 但似乎我正在迭代 find 命令中的每个单词 以空格分隔 到目前为止我的脚本看起来像这样 folders find maxdepth 1 type d for i in f
  • 在 PowerShell 中,将两个表合并为一个表的最佳方法是什么?

    我对 PowerShell 相当陌生 想知道是否有人知道解决以下示例问题的更好方法 我有一组从 IP 地址到主机名的映射 这表示活动 DHCP 租约的列表 PS H gt leases IP Name 192 168 1 1 Apple 1
  • 如何修复从 React 对 Elasticsearch 进行 API 调用时的“混合内容:”错误

    我正在使用 firebase 的 elasticsearch 的 bitnami 版本 我发现它只能连接到http并不是https当我使用邮递员尝试时 我的create react app已部署到 firebase 我得到Mixed Con
  • 如何将任务添加到 gradle 中的主要“构建”任务

    当我尝试使用以下代码将任务添加到主构建任务时 rootProject tasks getByName build dependsOn mytask 当我跑步时它抱怨gradle w build输出 Where Build file line
  • 在 shell 脚本中连接命令字符串

    我正在维护一个现有的 shell 脚本 它将命令分配给 shell 脚本中的变量 例如 MY COMMAND bin command dosomething 然后接下来 它通过执行以下操作将 参数 传递给 MY COMMAND MY ARG
  • 如何使用AWK脚本检查表的所有列数据类型? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在这里 我正在检查表中第一列的数据类型 但我想知道AWK中表的所有列数据类型 我尝试过 但只能获得一列数据类型 例如 Column 1
  • Elastic Beanstalk 添加多个 ssl 证书

    我有一个 Docker Django api 应用程序 可以从多个域 abc xyx com 或 def lmn com 调用 我已从 Elastic beanstalk 中的配置控制台成功添加了 abc xyz com 的 ssl 证书
  • ElasticSearch 映射对分组文档进行折叠/执行操作的结果

    有一个对话列表 每个对话都有一个消息列表 每条消息都有不同的字段和action场地 我们需要考虑到在对话的第一条消息中使用了动作A 在几条消息之后有使用的动作A 1过了一会儿A 1 1等等 有一个聊天机器人意图列表 对对话的消息操作进行分组
  • Elastic Search 启动错误 - “\Common 此时出现意外。”

    我已经下载并解压了elasticsearch 当我运行批处理文件 elasticsearch bat 时 出现以下错误 Common was unexpected at this time Solved 通过编辑 bat 文件的第 46 行
  • 与赋值“=”和括号 { } 的使用混淆

    我是 gradle 的新手 对于 groovy 也是如此 我几乎不了解某些概念 并且真的不知道它是否与 groovy 或 gradle 相关 以及需要 google 哪些关键字来获取帮助 我经常被这样的事情绊倒 android some c
  • 在 Elasticsearch Java API 中使用 slop 维护匹配短语查询的序列顺序

    我正在尝试执行一个查询 该查询应该与短语查询类似 只是连续标记内可能存在间隙 例子 Document a b c d Search a c gt gt This should return the document Search c a g
  • 更改 Jenkins 云构建的 gradle 本地存储库缓存位置

    我需要更改存储库下载的保存位置 我无法使用用户主目录 因为我的构建是在云服务上运行的 该服务不保留此内容 这导致我的依赖项被一遍又一遍地下载 并消耗了大量的云存储时间 我正在使用 gradle 1 0 里程碑 5 我的构建文件具有以下存储库
  • groovy中bigdecimal的默认比例

    groovy 中 BigDecimal 的默认小数位数是多少 和四舍五入 因此 当尝试进行计算时 def x 10 0 30 0 0 3333333333 def y 20 0 30 0 0 6666666667 基于此 我可以假设它使用比
  • 如何在 Linux shell 中将十六进制转换为 ASCII 字符?

    假设我有一个字符串5a 这是 ASCII 字母的十六进制表示Z 我需要找到一个 Linux shell 命令 它将接受一个十六进制字符串并输出该十六进制字符串代表的 ASCII 字符 所以如果我这样做 echo 5a command im
  • Groovy 元编程 - 将静态方法添加到 Object.metaClass

    我遇到了无法解决的 Groovy 元编程问题 将静态方法 foo 添加到类 FooBar 时 FooBar foo 按预期工作 FooBar metaClass static foo println hello FooBar foo 但是
  • Jenkins 共享库:“java.lang.NoSuchMethodError:没有这样的 DSL 方法”

    我正在尝试通过 Jenkinsfile 和共享库创建 Jenkins 管道 我通过 Web UI 创建了一个作业来获取 Jenkinsfile 它工作正常 但是 共享库内容似乎无法被 Jenkins 识别 下面是 Jenkinsfile 和

随机推荐

  • 颤动 || W/DynamiteModule(4887):未找到 com.google.android.gms.providerinstaller.dynamite 的本地模块描述符类

    当我从 Firebase Firestore 获取数据时 不显示数据 这给了我这个问题 它与Firebase或其他什么有关吗 W DynamiteModule 4887 Local module descriptor class for c
  • initializer_list 不可变性质导致过度复制

    为什么可以访问std initializer list不允许我们更改其内容 这是一个很大的缺点std initializer list当将它用于其主要目的 初始化容器 时 因为它的使用会导致过多的复制构造 复制赋值 而不是移动构造 移动赋值
  • 将图形导出为 PDF 时,可以导出绘图标签中的特殊符号/西里尔字母吗?

    我正在尝试将图形列表导出为 PDF 格式的单独帧 以便随后借助外部实用程序 例如 pdf2swf 编译矢量 SWF 动画 不幸的是 导出的 PDF 文件中的一些特殊字符 例如度数符号或三点 被损坏 这也是所有俄语字母的命运 请注意 当直接从
  • 如何让线条动画更流畅?

    我正在用 Java 制作一个简单的动画 并试图使其尽可能流畅 我仅使用每个 Shape 对象的 Double 内部类 并在 Graphics2D 对象中设置抗锯齿功能 只要我只使用 fill 方法 这一切都有效 但如果我还使用 draw 方
  • 致命错误:无法将 User 类型的对象用作数组

    应用程序上的用户通过电子邮件登录 此电子邮件处于会话中 通过此会话 我尝试获取该用户的更多信息 以打印出该用户的 姓氏 姓名和头像 当我在导航栏中执行此操作时 他做得很好 但在页面本身上却出现以下错误 致命错误 无法将 User 类型的对象
  • 如何重新安装 base-R 软件包(例如统计数据、图形、实用程序等)?

    我一直在 R 3 0 1 中使用 stats 包 没有任何问题 但今天我从 R 库位置删除了 stats 文件夹 现在我无法再安装它了 我尝试对其他软件包执行相同的操作 但我可以安装除 stats 之外的所有内容 install packa
  • 对于 64 位进程,kb 显示什么?

    我最近在分析调用堆栈时犯了一个错误 因为我没想到该应用程序是 64 位的 我使用了WinDbg命令kb显示调用堆栈和传递给方法的参数 在 64 位上 参数不是通过堆栈传递 而是通过寄存器 RCX RDX R8 和 R9 传递 看来WinDb
  • NSAttributedString 对齐不适用于 html 内容

    想要更改 html 标签的对齐方式 什么都不起作用 我在 HTML 中没有看到任何 CSS 没有其他设置可以更改对齐方式 我还直接在 UILabel 上设置左对齐 我缺少什么 代码位于 UILabel 扩展中 NSMutableParagr
  • VBA-SQL 对 Excel 工作表进行更新/插入/选择

    简而言之 我正在为我的客户制作一个调度程序 由于限制 它需要位于单个 Excel 文件中 尽可能小 因此 一个工作表充当 UI 而任何其他工作表将充当表格或设置 我正在尝试使用 SQL 我是新手 来处理单个工作表 名为 TblEmpDays
  • malloc 是否会在 Linux(和其他平台)上延迟创建分配的支持页面?

    如果我要在 Linux 上malloc 1024 1024 1024 malloc 实际上做了什么 我确信它会为分配分配一个虚拟地址 通过遍历空闲列表并在必要时创建新映射 但它实际上会创建 1 GiB 的交换页吗 或者是这样mprotect
  • 如何在运行时分配 ToolButton 的 OnClick 事件?

    我在设计时创建了一个没有工具按钮的 TToolBar 我的想法是在运行时创建 ToolButtons 并在创建表单时将它们放在那里 只是为了向用户显示打开了哪些表单 而无需在主菜单中打开 Windows 菜单 我有一个名为 Navigati
  • 外部模块中的模式在 Node.js 中不起作用

    我非常头疼尝试通过一个模块将一些常见的模式定义共享给我的代码库中的所有其他模块 我有一个 myproj schemas 模块 其中包含这两个模式 var mongoose require mongoose util require util
  • 使用 Bullet 和 RSpec gem 减少 n+1 查询

    将 Bullet Gem 与 RSpec 结合使用的有效方法是什么 现在 我觉得如果我将它与当前的单元测试框架一起使用 我会收到很多通知或测试失败 因为测试本身中的 n 1 查询与我的生产应用程序中发生的情况无关 例如检查值或关联 因此 修
  • 如何从 SQL 数据库流式传输 .flv 文件

    我想将 flv 文件存储在数据库中而不是文件系统中 这就是我现在可以做的 使用 ffmpeg 成功将 wmv 和 mpeg 转换为 flv 将图像存储在 SQL Server 中并使用 httphandler 在我的页面上显示它们 与 av
  • Java 计算整数数组中每个元素的出现次数

    我编写了以下代码片段来计算每个元素出现的次数 是否有可能以更短的方式实现这一目标 int arr 1 6 2 8 5 4 7 7 5 7 Arrays stream arr collect ArrayList new ArrayList a
  • 所有可用的 matplotlib 后端的列表

    当前后端名称可通过以下方式访问 gt gt gt import matplotlib pyplot as plt gt gt gt plt get backend GTKAgg 有没有办法获取可在特定机器上使用的所有后端的列表 您可以访问列
  • ASP.NET MVC - Linq to Entities 模型作为 ViewModel - 这是好的做法吗? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 真的是很快的问题 我目前正在使用 asp net MVC 和实体框架构建一个网站 我有几个存储库 它们返回实体或实体列表 我发现在我的大部分页面中 我必须从各种相关表中提取数据 只要我在查
  • 在 Scala 中从类型别名创建对象 [重复]

    这个问题在这里已经有答案了 如何从 scala 中的类型别名构造一个对象 type MyType List Int println List Int println MyType error not found value MyType 这
  • MongoDB 查找日期范围是否与其他日期重叠

    我有许多文档 其架构如下所示 每个文档都包含 开始日期 结束日期 如下架构所示 有没有一种简单的方法可以在保存新文档之前知道新文档的开始日期 结束日期是否会与以前保存的文档开始日期 结束日期重叠 谢谢 title owner notes s
  • ElasticSearch:禁用 Groovy 时对 _score 字段进行聚合

    我见过的每个例子 例如 ElasticSearch 在 score 字段上聚合 用于对 score 字段进行聚合或与 score 字段相关的聚合似乎需要使用脚本 由于 ElasticSearch 出于安全原因默认禁用动态脚本 有没有什么方法