Can I limit the search on sub items based on other fields of subitems?

Hello guys I'm new in elastic and here comes the doubt.

When querying a json index, I need to find in an array of complex objects a string only in some array items.

In example:

considering the following info I need to query a text value on "partes.Nome" field, only in items with 78 value in field partes.IdTipoParticipacao and with the values 44 and 1 on IdAreaAtuacao field.

My problem is that when i query for a text contained on partes.IdTipoParticipacao with the value 14 it still returns me a value.

Can I limit the search on sub items based on other fields of subitems?

If I search Benício Lucca Caleb Alves it still return though partes.IdTipoParticipacao equals 14

POST indicedocs/_doc/17C9CA74-1E3D-4A63-A7B3-FA8FD3FF70BF
{
  "Id" : "17C9CA74-1E3D-4A63-A7B3-FA8FD3FF70BF",
  "NivelSigilo" : 0,
  "Numero" : "040700000052022",
  "IdAreaAtuacao" : 7,
  "NumeroFormatado" : "0407.0000005/2022",
  "observacao" : "A teoria da irredutibilidade garante a contribuição de um grupo importante na determinação do processo de comunicação como um todo. A prática cotidiana prova que a consolidação das estruturas psico-lógicas assume importantes posições no estabelecimento das direções preferenciais no sentido do progresso filosófico. Nunca é demais lembrar o peso e o significado destes problemas, uma vez que o conceito de diáthesis e os princípios fundamentais de rhytmos e arrythmiston facilita a criação do sistema de formação de quadros que corresponde às necessidades lógico-estruturais.",
  "partes" : [
	{
	  "IdTipoParticipacao" : 14,
	  "TipoParte" : 0,
	  "Participacao" : "Interessado",
	  "Policial" : "Não",
	  "CPF" : "23315018154",
	  "CPFFormatado" : "233.150.181-54",
	  "Nome" : "Benício Lucca Caleb Alves",
	  "Nacionalidade" : "Brasileira"
	},
	{
	  "IdTipoParticipacao" : 78,
	  "TipoParte" : 0,
	  "Nome" : "Emilly e Diogo Financeira Ltda",
	  "CNPJ" : "72217026000105",
	  "CNPJFormatado" : "72.217.026/0001-05"
	}
  ]
}
------------------------------------------------
GET indicedocs/_search
{
  "size":1001,
  "query": {
    
    "bool": {
      "must": [
        {
          "terms":{
             "partes.IdTipoParticipacao":[
                78
             ]
          }
        },
        {
           "query_string":{
              "query":"\"Benício Lucca Caleb Alves\"",
              "fields":[
                 "partes.Nome"
              ]
           }
        }
      ],
      "must_not": [
        {
          "terms":{
             "IdAreaAtuacao":[
                44,
                1
             ]
          }
        }
      ]
    }
  }
}
------------------------------------------------
"mappings" : {
  "properties" : {
	"Id" : {
	  "type" : "text",
	  "fields" : {
		"keyword" : {
		  "type" : "keyword",
		  "ignore_above" : 256
		}
	  }
	},
	"IdAreaAtuacao" : {
	  "type" : "long"
	},
	"NivelSigilo" : {
	  "type" : "long"
	},
	"Numero" : {
	  "type" : "text",
	  "fields" : {
		"keyword" : {
		  "type" : "keyword",
		  "ignore_above" : 256
		}
	  }
	},
	"NumeroFormatado" : {
	  "type" : "text",
	  "fields" : {
		"keyword" : {
		  "type" : "keyword",
		  "ignore_above" : 256
		}
	  }
	},
	"observacao" : {
	  "type" : "text",
	  "fields" : {
		"keyword" : {
		  "type" : "keyword",
		  "ignore_above" : 256
		}
	  }
	},
	"partes" : {
	  "properties" : {
		"CNPJ" : {
		  "type" : "text",
		  "fields" : {
			"keyword" : {
			  "type" : "keyword",
			  "ignore_above" : 256
			}
		  }
		},
		"CNPJFormatado" : {
		  "type" : "text",
		  "fields" : {
			"keyword" : {
			  "type" : "keyword",
			  "ignore_above" : 256
			}
		  }
		},
		"CPF" : {
		  "type" : "text",
		  "fields" : {
			"keyword" : {
			  "type" : "keyword",
			  "ignore_above" : 256
			}
		  }
		},
		"CPFFormatado" : {
		  "type" : "text",
		  "fields" : {
			"keyword" : {
			  "type" : "keyword",
			  "ignore_above" : 256
			}
		  }
		},
		"IdTipoParticipacao" : {
		  "type" : "long"
		},
		"Nacionalidade" : {
		  "type" : "text",
		  "fields" : {
			"keyword" : {
			  "type" : "keyword",
			  "ignore_above" : 256
			}
		  }
		},
		"Nome" : {
		  "type" : "text",
		  "fields" : {
			"keyword" : {
			  "type" : "keyword",
			  "ignore_above" : 256
			}
		  }
		},
		"Participacao" : {
		  "type" : "text",
		  "fields" : {
			"keyword" : {
			  "type" : "keyword",
			  "ignore_above" : 256
			}
		  }
		},
		"Policial" : {
		  "type" : "text",
		  "fields" : {
			"keyword" : {
			  "type" : "keyword",
			  "ignore_above" : 256
			}
		  }
		},
		"TipoParte" : {
		  "type" : "long"
		}
	  }
	}
  }
}

Hi @Carlos_Barros, Welcome to the community!
So if I understand correctly, you only want documents returned where IdTipoParticipacao is 78, but are getting docs with that field also being set to 14. From what I'm seeing, it's doing what you ask, because it's returning the entire document that matches your parameters. Documents with 78 and some other numbers will still be returned because the partes field is an array. It would most likely return results closer to what I believe you have in mind, if that field had only one IdTipoParticipacao field.

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.