首页 > 解决方案 > 使用 Java api 进行弹性搜索查询

问题描述

当找到一个与该值匹配的值返回整个嵌套对象时,我如何现在只返回匹配的对象与我的代码?

  private def queryBuilder(
      field: String,
      value: String,
      parent: Option[String] = None
  ): BoolQueryBuilder = {
    val boolQuery: BoolQueryBuilder = QueryBuilders.boolQuery()
    parent match {
      case Some(parentName) =>
        boolQuery.filter(
          QueryBuilders
            .nestedQuery(
              parentName,
              QueryBuilders
                .boolQuery()
                .must(QueryBuilders.matchQuery(field, value)),
              ScoreMode.None
            )
        )
      case None => boolQuery.must(QueryBuilders.matchQuery(field, value))
    }
  }

标签: javascalaelasticsearch

解决方案


为了只返回匹配的嵌套文档,您可以添加inner_hit到嵌套查询中。

例如

{
  "query": {
    "nested": {
      "path": "nested_field",
      "query": {
        "match": { "nested_field.field1": "value_to_match" }
      },
      "inner_hits": {} 
    }
  }
}

作为回应,您会发现inner_hits仅包含匹配嵌套文档的部分。


推荐阅读