フィールド「@timestamp」をマップするために JestResult.getSourceAsObjectList をどのように使用しますか? 実際、「@」で始まる名前のフィールドをマップする方法がわかりません。「null」に設定され続けます。
たとえば、Elasticsearch クエリが返す場合
{
"_id": "Vhv2OE1SNSeSg285UYQRQ",
"@version": "1",
"@timestamp": "2014-12-19T01:18:06.454Z"
"type": "hdfs"
}
一致する POJO Java クラスがあります
import io.searchbox.annotations.JestId;
public class ElasticsearchLog {
@JestId
private String _id;
private String version;
private String timestamp;
private String type;
@Override
public String toString() {
return "ElasticsearchLog{" +
"_id='" + _id + '\'' +
", version='" + version + '\'' +
", timestamp='" + timestamp + '\'' +
", type='" + type + '\''
' }';
}
それからやって
import io.searchbox.client.JestClient;
import io.searchbox.client.JestClientFactory;
import io.searchbox.client.JestResult;
import io.searchbox.client.config.HttpClientConfig;
import io.searchbox.core.Search;
import java.util.List;
public class JESTClient {
public static void main(String[] args) throws Exception {
String clusterIP = "localhost";
String port = "9200";
//setup client
JestClientFactory factory = new JestClientFactory();
factory.setHttpClientConfig(new HttpClientConfig
.Builder("http://" + clusterIP + ":" + port)
.multiThreaded(true)
.build());
JestClient client = factory.getObject();
Search search = new Search.Builder("{ \"query\": { \"match_all\": {} } }")
.addIndex("_all")
.build();
JestResult result = client.execute(search);
List<ElasticsearchLog> resultLogs = result.getSourceAsObjectList(ElasticsearchLog.class);
for(ElasticsearchLog log: resultLogs){
System.out.println(log);
}
プリントアウト
ElasticsearchLog{_id='Vhv2OE1SNSeSg285UYQRQ', version='null', timestamp='null', type='hdfs'}
そのため、「@version」と「@timestamp」が正しくマッピングされていません。
JsonObject 自体は、「@」記号を使用しても問題ないようです。
import com.google.gson.JsonObject;
public static void main(String[] args){
JsonObject testy = new JsonObject();
testy.addProperty("@timestamp", "zzz");
System.out.println(testy.get("@timestamp"));
}
出力: "zzz"
JestResult の適切な使用法は何ですか。「@」で始まる名前のjsonフィールドをマップするgetSourceAsObjectList?
注:これは
<dependency>
<groupId>io.searchbox</groupId>
<artifactId>jest</artifactId>
<version>0.1.4</version>
</dependency>