2013-06-11 49 views
1

我正在創建一個ElasticSearch本機腳本,並且我努力在我的文檔中獲得某個字段的List<String>值。在ElasticSearch本機腳本中訪問文檔字符串值

這裏是我的嘗試:

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這個模塊...

+0

如果你的類正在編譯,並且你在運行時有這樣的錯誤,那麼你可能在運行時在你的類路徑中有這個類的另一個(舊版本)...只是一個想法,我不知道... – Toilal

回答

1

你用老版本的ela編譯你的代碼sticsearch(0.20.x或更早版本)比你在運行時使用的版本(0.90.x)。

你得到的錯誤說未找到的方法有一個StringArrayRef返回類型。這似乎很奇怪,因爲您將結果分配給List<String>,但在編譯時起作用,因爲StringArrayRef類在從elasticsearch代碼庫中刪除之前擴展AbstractList<String>。我猜這個方法在幾個月前完成的fielddata重構期間被刪除了。您在master和0.90.x上看到的方法現在返回List<String>。只需更新您的elasticsearch依賴關係(使用您在運行時使用的相同內容),重新編譯並且您應該很樂意前往!

+0

完全正確。我忘了更改我的Maven依賴關係進行編譯...非常感謝! – Pierre