Сопоставить документы с вложенными объектами, которые должны соответствовать условию - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть несколько объектов, хранящихся в упругом поиске, который содержит несколько списков других объектов.

Я пытаюсь выбрать объекты, в которых все вложенные объекты удовлетворяют хотя бы одному условию, из списка условий.

Большой объект, который содержит все вложенные объекты, выглядит следующим образом:

public  class TagSearch
{
    public List<SimpleValueTagMatch> SimpleValueTagMatches { get; set; }

    public List<LiteralTagMatch> LiteralTagMatches { get; set; }

    public List<NumericValueTagMatch> NumericValueTagMatches { get; set; }

    public List<DateTimeTagMatch> DateTimeTagMatches { get; set; }
}

И вложенный объект выглядит так:

public class LiteralTagMatch
{
    public string Name { get; set; }
}

Или вот так:

public class SimpleValueTagMatch
{
    public string Name { get; set; }

    public string Value { get; set; }
}

Я хочу найти все объекты TagSearch, у которых все вложенные объекты соответствуют хотя бы одному условию.

Условием в случае объекта LiteralTagMatch является наличие имени в списке имен, которые я передаю в качестве параметра в запрос.

Условием в случае SimpleValueTagMatch является то, что и имя, и значения находятся в 2 списках, которые я передаю в качестве параметра в запрос.

Ниже приведен пример запроса, но я хочу, чтобы все совпадения LiteralTag соответствовали из TagSearch:

        var results = client.Search<TagSearch>(s => s
        .Query(q => q
            .Nested(n => n
                .Path(p => p.LiteralTagMatches).Query(q2 => q2.Term(e => e.LiteralTagMatches.First().Name, "asda"))
            )
        )

Есть ли способ сделать это?

...