当前位置: 首页 > 面试题库 >

将Elastic Search字段转换为数组

宋康安
2023-03-14
问题内容

在elasticsearch中,如果您的文档具有预先存在的数组

"movies": [
     "Back to the Future"
]

然后您更新它以添加更多类似的电影

{
  "script" : "ctx._source.movies += tag",
  "params" : {
    "tag" : "Pulp Fiction"
  }      
}

然后将值添加到该字段。效果很好…但是,如果该领域并非一开始就很麻烦,而是看起来像这样,该怎么办

"movies": "Back to the Future"

如果运行相同的脚本,将得到以下结果

"movies":"Back to the FuturePulpFiction"

因此,我的问题是如何利用这个现有字段并将其“转换”为数组,以告诉elasticsearch我想将其视为数组?


问题答案:

您可以改用此脚本。它检查是否movies为数组,如果不是,则创建一个

{
  "script" : "if (ctx._source.movies.getClass().isArray()) { ctx._source.movies += tag } else { ctx._source.movies = [ctx._source.movies, tag] }",
  "params" : {
    "tag" : "Pulp Fiction"
  }      
}

另一种较短的方法是始终分配一个数组,然后使用Groovy的Collection.flatten()方法对其进行“展平”

{
  "script" : "ctx._source.movies = [ctx._source.movies, tag].flatten()",
  "params" : {
    "tag" : "Pulp Fiction"
  }      
}


 类似资料:
  • 问题内容: 我正在将整个数据库访问层从Hibernate重写为JOOQ,并且遇到以下问题。 使用@Formula批注对JPA模型之一进行批注,如下所示: 在代码的后面,对数据库进行JPA查询,该数据库将 Fee5 与参数进行比较: 上面的查询如何转换为JOOQ DSL? 问题答案: 我设法通过以下JOOQ查询解决了该问题:

  • 问题内容: 我正在尝试将整数字段转换为实际的日期字段。有人创建了一个“日期”字段,只粘贴了一个实际上是整数的“日期”。我正在尝试将其转换为实际日期。 我尝试了以下无济于事: 问题答案: 简单转换为日期可能有效 退货 如果您的数据可疑,则也可以使用Try_Convert() 退货

  • 假设我已将以下对象序列化为json字符串: 现在我想反序列化它,但是我想把名称分成两个字段,和。我该怎么做呢? 我希望最终的结果是类似于: 这对Gson有可能吗?

  • 语境 我有控制器测试。我试图将对象UserDto转换为Json,使用的是Gson。 问题 Gson无法转换类型为LocalDate的字段生日。它向我显示错误消息:无法读取HTTP消息:org。springframework。http。转换器。HttpMessageNoteableException:JSON解析错误:意外标记(START\u对象),预期值\u字符串:预期数组或字符串。;嵌套异常为c

  • 我在文档中有一个字段是ipv4的字符串表示形式(“1.2.3.4”),该字段的名称是“originating_ip”。我正在尝试使用无痛语言的脚本字段,以便添加一个新字段(originating_ip_calc)以获得所述IPv4的int(长)表示形式。 下面的脚本在groovy中工作(从我的理解来看,这基本上应该是一样的),但似乎在这个特定的情况下几乎不是。 我也在看这个问题,正如你从上面的代码

  • 问题内容: 我有一个接收a的函数,但是我所拥有的a是进行此转换的最佳方法是什么? 我想我可以走很长一段路,然后将其放入字符串并放入字节中,但这听起来很难看,而且我认为还有更好的方法可以做到。 问题答案: 我同意Brainstorm的方法:假设您要传递机器友好的二进制表示形式,请使用该库。OP建议可能会有一些开销。纵观源的实施,我看到它做了一些运行时的决策最大的灵活性。 对?Write()接受一个非