Elasticsearch Multi Get通过curl工作,但是通过JavaAPI没有返回结果
Elasticsearch Multi Get working through curl, but no results are returned through Java API
我是运行 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"
}
]
}'
当我想从该响应中拉出 "message" 字段时,我使用此请求:
curl 'localhost:9200/_mget' -d '{
"docs" : [
{
"_index" : "logs-2017-04-30",
"_id" : "e72927c2-751c-4b33-86de-44a494abf78f",
"fields" : ["message"]
}
]
}'
以上两个查询return我要找的日志和信息
但是当我尝试将其翻译成 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");
<--- returns null
我做错了什么?对 elasticsearch 进行 rest 调用证明日志存在,但我的 Java 调用不知何故是错误的。
documentation page for the Java multi get 完全跳过了检索 _source 字段之外的数据所需的额外语法。就像 REST API 一样,使用定位日志所需的最少信息进行多次获取 获取的相关信息非常有限 。为了通过 Java API 在 multi get 调用中从日志中获取特定字段,您必须将 MultiGetRequest.Item 传递给构建器。在执行请求之前,此项需要在其中指定您想要的字段。
这里是代码更改(为清楚起见分为多行),它导致我在进行查询时希望出现的字段:
MultiGetRequestBuilder request = client.prepareMultiGet();
MultiGetRequest.Item item = new MultiGetRequest.Item("logs-2017-04-30", "null", "e72927c2-751c-4b33-86de-44a494abf78f");
item.fields("message");
request.add(item);
MultiGetResponse mGetResponse = request.get();
现在我可以请求我之前指定的字段了:
GetField field = response.getField("message");
我是运行 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"
}
]
}'
当我想从该响应中拉出 "message" 字段时,我使用此请求:
curl 'localhost:9200/_mget' -d '{
"docs" : [
{
"_index" : "logs-2017-04-30",
"_id" : "e72927c2-751c-4b33-86de-44a494abf78f",
"fields" : ["message"]
}
]
}'
以上两个查询return我要找的日志和信息
但是当我尝试将其翻译成 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");
<--- returns null
我做错了什么?对 elasticsearch 进行 rest 调用证明日志存在,但我的 Java 调用不知何故是错误的。
documentation page for the Java multi get 完全跳过了检索 _source 字段之外的数据所需的额外语法。就像 REST API 一样,使用定位日志所需的最少信息进行多次获取 获取的相关信息非常有限 。为了通过 Java API 在 multi get 调用中从日志中获取特定字段,您必须将 MultiGetRequest.Item 传递给构建器。在执行请求之前,此项需要在其中指定您想要的字段。
这里是代码更改(为清楚起见分为多行),它导致我在进行查询时希望出现的字段:
MultiGetRequestBuilder request = client.prepareMultiGet();
MultiGetRequest.Item item = new MultiGetRequest.Item("logs-2017-04-30", "null", "e72927c2-751c-4b33-86de-44a494abf78f");
item.fields("message");
request.add(item);
MultiGetResponse mGetResponse = request.get();
现在我可以请求我之前指定的字段了:
GetField field = response.getField("message");