0
我已經成功地使用elasticsearch創建了一個索引,並且可以將那些確切的json有效載荷序列化回我的java應用程序。彈性搜索響應的限制字段,但仍然使用jackson序列化
for (SearchHit searchHit : searchResponse.getHits()) {
try {
result.getItems().add(objectMapper.readValue(searchHit.getSourceRef().streamInput(), Program.class));
} catch (IOException e) {
throw new IllegalArgumentException("Cannot marshall json", e);
}
}
我輸出到elasticsearch的有效載荷大小非常大,但是我想要的響應非常小。我也想讓客戶動態地包含或排除一些字段。所以我這樣做,其中字段是我想包括的字段數組。這很好,只有我要求的字段被返回,但是searchHit.getSourceRef現在是空的。有沒有辦法讓它只複製我通過傑克遜收錄的字段?或者我必須始終返回整個源對象?或者我必須寫一些映射代碼來翻譯(我真的想避免這種情況)?
SearchResponse searchResponse = transportClient.prepareSearch("programs")
.addFields(fields.toArray(new String[fields.size()]))
.setTypes("program")
.setQuery(query).setFrom(start).setSize(pageSize)
.execute().actionGet();
好吧,這是什麼,但我期望做的是讓該源只有我指定的字段。即保持其結構,但只與這些領域 –