NEST Как найти поле в поддокументе - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть пример структуры документа JSON компании, такой как:

[
    {
        "id": "id1",
        "name": "company1",
        "employees": [
            {
                "name": "employee1",
                "education": "education1"
            },
            {
                "name": "employee2",
                "education": "education2"
            }
        ]
    }
]

, и я выполняю запросы, подобные этому:

GET companies/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "employees.education": {
              "value": "education1"
            }
          }
        },
        {
          "term": {
            "employees.education": {
              "value": "education2"
            }
          }
        }
      ]
    }
  }
}

Запрос строится с использованием NEST:

var filters = new List<Func<QueryContainerDescriptor<Company>, QueryContainer>>();

foreach (var education in educationsToFilter)
{
    filters.Add(fq => fq.Term(f => f.Employees.Suffix("education"), education));
}

var searchResponse = _client.Search<Company>(s => s
    .Query(q => q
        .Bool(bq => bq
            .Filter(filters)
        )
    )
);

Есть ли лучший способ найти поле термина вместо суффикс-метода? Я хотел бы более безопасный тип.

1 Ответ

0 голосов
/ 06 ноября 2019

Вы можете разрешить имя вложенного поля с помощью этого лямбда-выражения:

fq.Term(f => f.Employees.FirstOrDefault().Education, education)

Надеюсь, это поможет.

...