访问ElasticSearch本机脚本中的文档字符串值

时间:2013-06-11 17:56:34

标签: java elasticsearch

我正在创建一个ElasticSearch本机脚本,我很难在我的doc中获得某个字段的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;

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

1 个答案:

答案 0 :(得分:1)

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

您得到的错误表明找不到的方法具有StringArrayRef返回类型。由于您将结果分配给List<String>,这似乎很奇怪,但是在StringArrayRef类扩展AbstractList<String>之后,它在编译时起作用,之后它从elasticsearch代码库中删除。我想这个方法在几个月前完成的fielddata重构过程中被删除了。您在master和0.90.x上看到的方法现在返回List<String>。只需更新你的elasticsearch依赖项(使用你在运行时使用的相同),重新编译就可以了!你好了!