当前位置: 首页 > 知识库问答 >
问题:

使用 Painless 在 Elastic 文档上设置硬编码值

袁奇逸
2023-03-14

我正在尝试学习无痛技术,这样我就可以在尝试丰富和操作传入文档时使用它。然而,我看到的每一种访问文档的方法都会导致错误。在基巴纳的无痛实验室输入这些信息后,我得到的错误如下:

def paths = new String[3];
paths[0]= '.com';
paths[1] = 'bar.com';
paths[2] = 'foo.bar.com';
doc['my_field'] = paths;  // does not work: '[Ljava.lang.String; cannot be cast to org.elasticsearch.index.fielddata.ScriptDocValues'
ctx.my_field = paths;  // does not compile: 'cannot resolve symbol [ctx.my_field]'
return doc['my_field'] == 'field_value';  // does not work: 'No field found for [my_field] in mapping'

doc['my_field'] == 'field_value' 尽管测试文档中存在该字段,但仍会抱怨,尽管 doc.containsKey('my_field') 确实返回 false

我应该如何访问和操作传入文档?我用的是ElasticSearch 7.12。

共有1个答案

上官季
2023-03-14

您可以使用设置处理器创建摄取管道,以将硬代码值添加到传入文档。

{
  "description" : "sets the value of count to 1",
  "set": {
    "field": "count",
    "value": 1
  }
}

无痛API有非常具体上下文。您正在使用< code>String[],这可能会导致问题,因此您需要使用< code>Arrays或< code > ArrayList 。你可以在这里查看无痛实验室的例子。

下面是我在无痛实验室尝试过的脚本,它可以正常工作:

def ctx = params.ctx;
ArrayList paths = new ArrayList();
paths.add('.com');
paths.add('bar.com');
paths.add('foo.bar.com');
ctx['my_field'] = paths;
return ctx

在参数选项卡中添加下面,我错过了在回答中添加这个。这是必需的,因为在实际的实现中,您将从上下文和更新上下文中获得值。

{
  "ctx":{
    "my_field":["test"]
  }
}
 类似资料:
  • 我正在尝试使用NodeJS v8在Firestore上创建一个引用文档。6.0。像这样 虽然ref是一个文档参考,但它会导致 错误:参数“data”不是有效文档。输入对象深度超过20层或包含一个循环。 有无论如何要做的NodeJS(管理)SDK? 此外,代码中使用的包是 和 输出 完整的错误消息是

  • 对于WebShop中的产品,我有以下ElasticSearch数据结构: 使用以下映射: 我创建了一个Elasticsearch查询,只过滤出正在销售的产品,这意味着:special_price必须低于价格,并且当前日期必须介于special_from_date和special_to_date之间。 这是我创建的无痛脚本: 一旦configurable_children中的一个符合销售产品的条件,

  • 问题内容: 我已经记录了一个上传excel的场景,在下一个后续请求中,excel中的那些记录将作为参数传递。 但是假设我需要更改excel,该请求将如何采用新值? 由于大量的值,参数化似乎不是答案。 请帮助。 问题答案: 如果需要从Excel文件中提取一些值并将其添加为HTTP请求参数,则可以使用以下方法。 下载Apache Tika二进制文件(tika-app-*。jar),并将其拖放到JMet

  • 问题内容: 但是,我可以仅在AWS(Elasticache)上创建Redis实例并将其端点添加到Django设置中吗?例如,使用Django- redis : 我怀疑以上情况可能会导致多个beantalk服务器实例出现问题。鉴于此,鉴于有一个显式编写的用于与AWS Elasticache for Memcache接口的Django包,我很想使用MemCache而不是Redis:django- el

  • 目前,我们正在使用Checkmarx扫描应用程序代码。不确定Checkmarx是否检测/扫描源代码中的任何硬编码密码。是否需要在Checkmarx服务器上添加任何额外的配置来检测密码?

  • 问题内容: 我有一个定义的编码(utf8)的输入文件,从中我创建了不同的文件,这些文件的名称和内容(再次是utf8)取自该输入文件。 我的问题是一个特定的Windows系统创建的文件没有正确的字符。这些文件的内容可读性很强,但名称却不可读。而是使用文件名。 在其他Windows系统上,一切正常。 可以在的第二个参数中设置文件内容的编码,但是似乎无法设置文件名的编码。 谢谢。 问题答案: 看到两个字