Я пытаюсь применить более одного фильтра к вложенному объекту и хочу вернуть только тот документ, который имеет все совпадения в одном объекте, а не из нескольких объектов.
Данные в упругом поиске
D1 document
"fields":[
{
"field_name": "test",
"field_value": "test",
"field_id": "123"
},
{
"field_name": "test1",
"field_value": "test1",
"field_id": "1231"
},
{
"field_name": "test2",
"field_value": "test2",
"field_id": "1232"
}]
D2 document
"fields":[
{
"field_name": "test1",
"field_value": "testda",
"field_id": "123a"
},
{
"field_name": "test1ad",
"field_value": "test1",
"field_id": "1231"
},
{
"field_name": "test2a",
"field_value": "test2a",
"field_id": "1231"
}]
Поля - это вложенный объект с отображением текста и ключевых слов
"fields": {
"type": "nested",
"properties": {
"field_id": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
},
"field_name": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
},
"field_value": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
}
}
}
Это мой эластичный поисковый запрос
GET myindex/_search
{
"query": {
"bool": {
"filter": {
"nested":{
"path":"fields",
"query":{
"bool":{
"must":{
"bool":{
"must":[{
"match":{
"field_id.raw": "1231"
}
},
{
"match":{
"field_value.raw": "test1"
}
},
{
"match":{
"field_name.raw": "test1"
}
}]
}
}
}
}
}
}
}
}
}
Я не получаю никакого ответа.И я хочу, чтобы возвращался только первый документ, поскольку он имеет соответствие в том же объекте, а не в документе 2, который также имеет соответствие, которое есть здесь и там.Заранее спасибо ...