Как я могу фильтровать вложенные объекты одной и той же схемы для агрегированных терминов - PullRequest
0 голосов
/ 10 мая 2019

вот краткое изложение моих данных.

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? или, возможно, другой метод агрегации я могу использовать здесь.

...