Предоставление ответа в форме REST API, который вы можете преобразовать в формат c#, так как я не знаком с его синтаксисом, и это было бы полезно для людей, которые не ищут языковые c ответы.
Протестировано это с вашими примерами данных, ниже приведено рабочее решение .
Индекс Def
{
"student": {
"properties": {
"firstName": {
"type": "string"
},
"id": {
"type": "integer"
},
"lastName": {
"type": "string"
},
"subjects": {
"type": "nested",
"properties": {
"id": {
"type": "integer"
},
"subjectName": {
"type": "string"
}
}
}
}
}
}
** Индексный образец делает c, который не имеет opster
либо subject
и firstname
**
{
"firstName": "Isuru",
"lastName": "foo",
"id": 1,
"subjects": [
{
"id": 100,
"subjectName": "math"
},
{
"id": 101,
"subjectName": "opster"
}
]
}
Индексирует другой do c, который не имеет opster
в любой теме
{
"firstName": "opster",
"lastName": "tel aviv",
"id": 1,
"subjects": [
{
"id": 100,
"subjectName": "math"
},
{
"id": 101,
"subjectName": "science"
}
]
}
Поисковый запрос, пожалуйста, измените must
на should
в соответствии с вашими требованиями
{
"query": {
"bool": {
"should": [ --> note
{
"match": {
"firstName": "opster"
}
},
{
"nested": {
"path": "subjects",
"query": {
"bool": {
"must": [ -->note
{
"match": {
"subjects.subjectName": "opster"
}
}
]
}
}
}
}
]
}
}
}
Результат поиска
"hits": [
{
"_index": "nested",
"_type": "student",
"_id": "1",
"_score": 0.39103588,
"_source": {
"firstName": "opster",
"lastName": "tel aviv",
"id": 1,
"subjects": [
{
"id": 100,
"subjectName": "math"
},
{
"id": 101,
"subjectName": "science"
}
]
}
},
{
"_index": "nested",
"_type": "student",
"_id": "2",
"_score": 0.39103588,
"_source": {
"firstName": "Isuru",
"lastName": "foo",
"id": 1,
"subjects": [
{
"id": 100,
"subjectName": "math"
},
{
"id": 101,
"subjectName": "opster"
}
]
}
}
]