Как использовать JestResult.getSourceAsObjectList для отображения поля «@timestamp»? На самом деле, я не могу понять, как сопоставить любое поле с именем, начинающимся с «@». Он получает значение «null».JestResult.getSourceAsObjectList - для «@timestamp» или, по-видимому, любое поле, начинающееся с «@»
Например, если запрос возвращает 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. getSourceAsObjectList для отображения json-поля с именем, начинающимся с «@»?
Примечание: Это для
<dependency>
<groupId>io.searchbox</groupId>
<artifactId>jest</artifactId>
<version>0.1.4</version>
</dependency>