【问题标题】:Unable to retrieve nested objects using ElasticSearch Java API无法使用 ElasticSearch Java API 检索嵌套对象
【发布时间】:2014-05-09 10:23:03
【问题描述】:

在使用 JAVA API 从 elasticsearch 搜索记录时,我想获取嵌套对象。我使用 addFields 方法获取特定字段,但无法检索嵌套对象值。

使用 Elastic 搜索 1.1.1 版

我的代码:

我有一个包含 countryIdcountryNamestates 字段的文档。 States 是一个嵌套的文档列表,它会有状态列表。

   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"}

问题: - 结果文档大小为零。无法搜索任何数据。如果我从给定字段中删除嵌套对象列表(状态),则能够搜索文档并获取字段值。

【问题讨论】:

  • 您是否返回了 0 个文档或一些文档但没有字段?

标签: java elasticsearch


【解决方案1】:

您需要在查询中使用以下内容: 使用 setFetchSource(String[] include_fields, String[] exclude_fields);

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

SearchRequestBuilder builder = client.prepareSearch("tests").setTypes("country")
        .setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setFetchSource(new String[]{"states","countryName"},new String[]{});

您可以在结果中迭代它们。

HTH, RR。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 2015-03-13
    • 1970-01-01
    相关资源
    最近更新 更多