Elasticsearch Java API不返回命中字段

Joh*_*ohn 3 java elasticsearch elasticsearch-java-api

我对弹性搜索的java api有问题.

当我像这样搜索时:

MatchQueryBuilder query = QueryBuilders.matchQuery("_type", "booking");

SearchResponse searchResponse = client.prepareSearch().setQuery(query).execute().actionGet();

for (SearchHit hit : searchResponse.getHits()){
    Map<String, SearchHitField> fields = hit.getFields();
    System.out.println(fields.size());
}
Run Code Online (Sandbox Code Playgroud)

我的回答从来没有字段,有人可以帮助我吗? 在此输入图像描述

我在用:

elasticsearch java api 1.4.0 elasticsearch 1.4.0

我的数据看起来像

{
  "_index": "bookings",
  "_type": "booking",
  "_id": "50245171",
  "_score": 1,
  "_source": {
    "field1": "value1",
    "field2": "value2",
    "field3": "value3",
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

Slo*_*omo 5

您是否尝试过将.addFields()添加到查询中?

SearchResponse searchResponse = client.prepareSearch().setQuery(query).addFields("field1", "field2",...).execute().actionGet();
Run Code Online (Sandbox Code Playgroud)

我不确定所有细节,但我相信elasticsearch会尽可能少地向您发送数据.这是有道理的,因为它应该快速而轻盈.

无论如何,您是否有机会索引预订对象?因为如果您再次需要整个对象,您还可以获取源并将其转换回原始的Booking对象.例如:

ObjectMapper mapper = new ObjectMapper();
Booking booking = mapper.readValue(hit.getSourceAsString(), Booking.class);
Run Code Online (Sandbox Code Playgroud)

ObjectMapper来自com.fasterxml.jackson.databind.ObjectMapper(我认为应该包含在elasticsearch中).