Получить обязательное поле от Elasticsearch
У меня есть следующие поля в моем поиске
"_source": {
"@timestamp":
"cpu_stat_s": {
"temp_in_celsius":
"model_name":,
"cpu_MHz_String": ,
"cache_size_string":
},
"memory_stat_s": {
"total_memory": ,
"swap_total": ,
"swap_free": ,
"used": ,
"free": ,
"swap_used":
},
"process_stat_s": [
{
"process_name": ,
"mem_in_use":,
"process_pid":
}
]
Я просто хочу получить предположим, что поля cpu_stat_s и memory_stat_s из эластичного поиска, используя Java API, я искал через фильтры запросов, а также сделал
String source="{\"query\":\"ether_stat_s\"}";
SearchResponse response = client.prepareSearch("cn_*")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setFrom(0).setSize(10).setExplain(true)
.setPostFilter(FilterBuilders.rangeFilter("@timestamp").from(TIMESTAMP_FROM).to(TIMESTAMP_TO)).**setSource(source).**execute().actionGet();
Но я получил все поля вместо обязательных.
Я могу сделать это, получив все поля, а затем использовать цикл for и получить ответ из источника, но это приведет к увеличению времени процессора в миллиардах записей. Я новичок в упругом поиске и, следовательно, был бы очень полезен, если кто-то мог бы помочь мне
1 ответ
Решение
После, наконец, дополнительных исследований я нашел ответ
SearchResponse response = client.prepareSearch("cn_*")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setFrom(0).setSize(10).setExplain(true)
.setPostFilter(FilterBuilders.rangeFilter("@timestamp").from(TIMESTAMP_FROM).to(TIMESTAMP_TO))
.setFetchSource(new String[]{"ether_stat_s"}, null)
.execute()
.actionGet();