Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法从弹性搜索响应获取数据_Java_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

Java 无法从弹性搜索响应获取数据

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

我正在尝试使用上述代码从SearchResponse类检索数据:

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"
               ]
            }
         },
         ...

您注意到,在
点击
中,您有
字段
,其中返回了搜索请求中指定的字段。

看起来您差不多到了。每次点击时,不是获取标题,而是获取_源对象,然后从该源对象获取标题字段