我正在尝试使用上面的代码从SearchResponse类中检索数据:
SearchHits searchHits = searchResponse.getHits();
for (SearchHit searchHit : searchHits) {
SearchHitField title = searchHit.field("title");
System.out.println(title.getValue().toString());
}
但是我在title.getValue()函数中得到一个空指针异常。 "标题"字段肯定存在,我可以通过打印提供以下输出的搜索响应来验证:
{
"took" : 13,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 1.0,
"hits" : [ {
"_index" : "myIndex",
"_type" : "myTye",
"_id" : "5c849b0f-d72d-4cc9-9b8c-e1201f888f94",
"_score" : 2.4181843,
"_source":{"esId":"100200153", "title":"Book 1"}
}
}
我知道我可以使用searchHit.getSource()检索数据,但我想知道为什么上述解决方案也不起作用。
答案 0 :(得分:0)
我认为您必须在请求中指定.fields(fields)
才能访问fields
部分。
例如,如果您有这样的查询:
{
"query": {
"match_all": {}
}
}
您会在结果的hits
部分中获得一些字段(_id
,_type
...,_source
)。
但是,如果你有这样的事情:
{
"query": {
"match_all": {}
},
"fields": ["my_field"]
}
你得到了不同的结果:
"hits": {
"total": 2,
"max_score": 1,
"hits": [
{
"_index": "test_malformed",
"_type": "test",
"_id": "1",
"_score": 1,
"fields": {
"my_field": [
"whatever"
]
}
},
...
您注意到,在hits
您有fields
,其中返回了搜索请求中指定的字段。
答案 1 :(得分:0)
看起来你几乎就在那里。在每次点击时,不是获取标题,而是获取_source对象,然后获取该源对象的标题字段。