1

我正在创建一个 ElasticSearch 本机脚本,并且正在努力获取List<String>文档中某些字段的值。

这是我尝试过的:

List<String> tmp = ((ScriptDocValues.Strings) doc().get("my_field")).getValues();

这是抛出的异常:

java.lang.NoSuchMethodError: org.elasticsearch.index.fielddata.ScriptDocValues$Strings.getValues()Lorg/elasticsearch/index/fielddata/util/StringArrayRef;

鉴于此模块的代码,我无法弄清楚为什么它不起作用...

4

1 回答 1

1

您使用旧版本的 elasticsearch(0.20.x 或更早版本)编译代码,而不是您在运行时使用的版本(0.90.x)。

您得到的错误表明 not found 方法具有StringArrayRef返回类型。看起来很奇怪,因为您将结果分配给 a List<String>,但在编译时有效,因为该类在从 elasticsearch 代码库中删除之前StringArrayRef扩展。AbstractList<String>我猜这个方法在几个月前完成的 fielddata 重构过程中被删除了。您在 master 和 0.90.x 上看到的方法现在返回一个List<String>. 只需更新您的 elasticsearch 依赖项(使用您在运行时使用的相同),重新编译,您应该一切顺利!

于 2013-06-11T18:44:49.107 回答