elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

无法使用ElasticSearch Java API检索嵌套对象

无法使用ElasticSearch Java API检索嵌套对象,java,elasticsearch,Java,elasticsearch,在使用JavaAPI从elasticsearch搜索记录时,我希望得到嵌套对象。我使用了addFields方法来获取特定字段,但无法检索嵌套的对象值 使用弹性搜索版本1.1.1 我的代码: 我有一个文档,其字段为countryId、countryName和states。状态是一个嵌套的文档列表,它将具有状态列表 SearchRequestBuilder builder = client.prepareSearch("tests").setTypes("country")

在使用JavaAPI从elasticsearch搜索记录时,我希望得到嵌套对象。我使用了addFields方法来获取特定字段,但无法检索嵌套的对象值

使用弹性搜索版本1.1.1

我的代码:

我有一个文档,其字段为countryIdcountryNamestates。状态是一个嵌套的文档列表,它将具有状态列表

   SearchRequestBuilder builder = client.prepareSearch("tests").setTypes("country")
            .setSearchType(SearchType.DFS_QUERY_THEN_FETCH).addFields("countryName", "states");


    MatchQueryBuilder mqb;

    mqb = QueryBuilders.matchPhrasePrefixQuery("name", "ind");
    builder.setQuery(mqb);

    SearchResponse response = builder.execute().actionGet();
    SearchHit[] documents = response.getHits().getHits();

    System.out.println(documents.length);
我想获取states(嵌套对象)和countryName值

 {"states" : ["stateId" : "1000", "name" : "Kerala"], ["stateId" : "1001", "name" : "Tamil Nadu"]} 
 {"countryName" : "India"}
问题:
-结果文档大小为零。无法搜索任何数据。如果从给定字段中删除嵌套对象列表(状态),则可以搜索文档并获取字段值。

您需要在查询中使用以下内容: 使用setFetchSource(字符串[]包含\个字段,字符串[]排除\个字段)

嵌套字段不是叶字段,它们需要直接从源中检索。 代码:

您可以在结果中对它们进行迭代

嗯,,
RR.

您是否取回了0个文档或一些文档但没有字段?
SearchRequestBuilder builder = client.prepareSearch("tests").setTypes("country")
        .setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setFetchSource(new String[]{"states","countryName"},new String[]{});