kotlin elasticsearch 更新类型不匹配

问题描述 投票:0回答:1

我正在尝试在我的 kotlin 项目中使用 elasticsearch 低级客户端。 对于文档更新插入,我运行以下函数。

elasticClient.update({
            u->u.index("myindex").id("currentid").upsert(searchEntry)
        },searchEntry::class.java)

但是当我写入 SAM 时,出现以下错误。 类型不匹配。

Type mismatch.
Required:
ObjectBuilder<UpdateRequest<CapturedType(out AccountSearchEntry)!, TypeVariable(TPartialDocument)!>!>!
Found:
UpdateRequest.Builder<CapturedType(out (AccountSearchEntry..AccountSearchEntry?)), TypeVariable(TPartialDocument)!>!

我正在关注官方文档,但我不知道为什么会发生这种情况。 文档是基于Java的,那么在Kotlin中使用有什么区别吗?

java kotlin elasticsearch
1个回答
0
投票

update
函数与 Kotlin 的 SAM(单一抽象方法)转换一起使用的方式似乎可能存在问题。在 Kotlin 中,SAM 转换允许您使用具有单个抽象方法的函数式接口或 Java 接口作为 lambda 表达式。然而,看起来 lambda 表达式中可能存在一些不匹配。

这是应该与 SAM 转换一起使用的代码的修改版本:

elasticClient.update(
    UpdateRequest("myindex", "currentid").upsert(searchEntry),
    searchEntry::class.java
)

在此版本中,我直接使用

UpdateRequest
构造函数来创建
UpdateRequest
实例,这应该可以解决类型不匹配问题。

如果您使用 Kotlin Elasticsearch 客户端中的

update
函数,请务必确保函数参数和类型与 Kotlin API 的预期一致。官方文档和示例可能主要关注 Java,因此使用 Kotlin 时可能会存在细微差别。

如果您仍然遇到问题,请考虑检查 Elasticsearch 客户端库与您的 Kotlin 版本的版本兼容性,并查找在 Kotlin 中使用 Elasticsearch 客户端的任何特定 Kotlin 示例或文档。您可能需要调整 Java 示例以适应 Kotlin 的语法和约定。

© www.soinside.com 2019 - 2024. All rights reserved.