Java 无法从弹性搜索响应获取数据
我正在尝试使用上述代码从SearchResponse类检索数据:Java 无法从弹性搜索响应获取数据,java,
elasticsearch,Java,
elasticsearch,我正在尝试使用上述代码从SearchResponse类检索数据: SearchHits searchHits = searchResponse.getHits(); for (SearchHit searchHit : searchHits) { SearchHitField title = searchHit.field("title"); System.out.println(title.getValue().toString()); } 但是我在title.getValu
SearchHits searchHits = searchResponse.getHits();
for (SearchHit searchHit : searchHits) {
SearchHitField title = searchHit.field("title");
System.out.println(title.getValue().toString());
}
但是我在title.getValue()函数中得到一个空指针异常。“title”字段肯定在那里,我可以通过打印搜索响应来验证这一点,该响应提供以下输出:
{
"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()检索数据,但我想知道为什么上面的解决方案不起作用。我认为您必须在请求中指定
.fields(fields)
,才能访问fields
部分
例如,如果您有如下查询:
{
"query": {
"match_all": {}
}
}
{
"query": {
"match_all": {}
},
"fields": ["my_field"]
}
您可以在结果的点击部分找到一些字段(\u id
,\u type
…,\u source
)。
但是,如果你有这样的东西:
{
"query": {
"match_all": {}
}
}
{
"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"
]
}
},
...
您注意到,在点击
中,您有字段
,其中返回了搜索请求中指定的字段。看起来您差不多到了。每次点击时,不是获取标题,而是获取_源对象,然后从该源对象获取标题字段