【发布时间】:2017-05-09 14:24:09
【问题描述】:
我正在运行 elasticsearch 2.3.4,但语法在 5.x 中似乎没有改变。
Multiget over curl 工作得很好。这是我的卷曲的样子:
curl 'localhost:9200/_mget' -d '{
"docs" : [
{
"_index" : "logs-2017-04-30",
"_id" : "e72927c2-751c-4b33-86de-44a494abf78f"
}
]
}'
当我想从该响应中提取“消息”字段时,我使用此请求:
curl 'localhost:9200/_mget' -d '{
"docs" : [
{
"_index" : "logs-2017-04-30",
"_id" : "e72927c2-751c-4b33-86de-44a494abf78f",
"fields" : ["message"]
}
]
}'
以上两个查询都返回了我正在寻找的日志和信息。
但是当我尝试像这样将它翻译成 Java 时:
MultiGetRequestBuilder request = client.prepareMultiGet();
request.add("logs-2017-04-30", null, "e72927c2-751c-4b33-86de-44a494abf78f");
MultiGetResponse mGetResponse = request.get();
for (MultiGetItemResponse itemResponse : mGetResponse.getResponses()) {
GetResponse response = itemResponse.getResponse();
logger.debug("Outputing object: " + ToStringBuilder.reflectionToString(response));
}
我似乎得到了空对象。当我尝试从看起来为空的 GetResponse 对象中获取消息字段时,什么都没有:
GetField field = response.getField("message");
我做错了什么?对 elasticsearch 进行休息调用证明日志存在,但我的 Java 调用在某种程度上是错误的。
【问题讨论】:
-
你为什么在
request.add("logs-2017-04-30", null, "e72927c2-751c-4b33-86de-44a494abf78f")的 java 请求中将type作为null提供?您应该提供类型或_all! -
@avr API 确实允许它为 null,github.com/elastic/elasticsearch/blob/master/core/src/main/java/…,但我返回并将类型添加到 curl 命令和 Java MultiGetRequestBuilder.add 命令并看到相同的行为。它适用于 curl 调用,但在 Java 调用中失败。
标签: elasticsearch elasticsearch-2.0 elasticsearch-5 elasticsearch-java-api