如何针对聚合术语对相同架构的嵌套对象进行过滤

时间:2019-05-10 10:13:58

标签: elasticsearch spring-data-elasticsearch

这是我的数据的快速摘要。

name: Parent1
children:
  name:Child1
  gender:M
  favToy:Hammer

name: Parent2
children:
  name:Child2
  gender:M
  favToy:Bottle

  name:Child1
  gender:M
  favToy:Cloth

这是我的查询即时消息,用于建立以下内容的列表 favToy,其中child.name = Child1。

SearchQuery searchQuery = new NativeSearchQueryBuilder()
    .withQuery(
        QueryBuilders.nestedQuery(
            "customData",
            new BoolQueryBuilder()
                .must(QueryBuilders.termQuery("child.name", "Child1"))
                .must(QueryBuilders.termQuery("child.gender", "M"))
            , ScoreMode.None)
    )
    .withIndices(EVENT_INDEX_NAME).withTypes("parent")
    .addAggregation(AggregationBuilders.terms("values").field("child.favToy"))
    .build();

我得到的列表是

Hammer,
Bottle

我应该得到的清单是

Hammer,
Cloth

我认为这是由于Parent2具有多个子对象,并且favToy的值错误而已在聚合存储桶中收集的。有没有一种方法可以对aggregationBuilder进行过滤或使用查询?或者我可以在这里使用其他聚合方法。

0 个答案:

没有答案