como combinar um valor de matriz por sua chave em um par de valores-chave elasticsearch array?

Eu tenho uma matriz dekey value pares. É possível exatamente o valor de correspondência dekey e depois verifique sevaluevalor do intervalo?

Exemplo: no documento abaixooracle_props é uma matriz com nome, pares de valores. Eu preciso verificar se tem"oracle_cursors" chave e verifique se seu valor é menor que 1000.

GET /eg/message/_percolate
{
   "doc": {
      "client": {
         "name": "Athena",
         "version": 1,
         "db": {
            "@type": "Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 64bit",
            "oracle_props": [
               {
                  "@name": "open_cursors",
                  "@value": 4000
               },
               {
                  "@name": "USER_ROLE_PRIVS_COUNT",
                  "@value": 1
               },
               {
                  "@name": "CREATE_PERMISSION",
                  "@value": "Y"
               }
            ]
         }
      }
   }
}

Abaixo está o meu coador.

Também preciso verificar o seguinte para que ele retorne3 como resultado

"client.name" deve ser "Athena""client.db. @ type" deve ser "Oracle" e, em seguida, vá em frente e verifique os pontos abaixoO campo "client.db.oracle_props. @ name" não foi encontradoverifique se possui a chave "oracle_cursors" e verifique se o valor é <1000

1 e 2 são e operações e qualquer um de 3 ou 4 satisfaz isso deve resultar3. Preciso de ajuda com o ponto 4, abaixo está minha consulta. Sugira também se existe uma maneira melhor.

PUT /eg/.percolator/3
{
   "query": {
      "filtered": {
         "filter": {
            "or": [
               {
                  "missing": {
                     "field": "client.db.oracle_props.@name"
                  }
               }
            ]
         },
         "query": {
            "bool": {
               "must": [
                  {
                     "match": {
                        "client.name": "Athena"
                     }
                  },
                  {
                     "match": {
                        "client.db.@type": "Oracle"
                     }
                  }
               ]
            }
         }
      }
   }
}

Atualizar

Posso ter algo como abaixo

{
     "match": {
                    "client.db.oracle_props[name='open_cursors'].value": 4000
                 }
              }

Mais tentativas

eu seguiconsulta aninhada elasticsearch e alterou o mapeamento paranestedtype re-indexando. Alguém pode encontrar problema por que estou recebendonested: NullPointerException;?

PUT /eg/.percolator/3
{
   "nested" : {
        "path" : "client.db.oracle_props",
        "score_mode" : "avg",
        "query" : {
            "bool" : {
                "must" : [
                    {
                        "match" : {"client.db.oracle_props.@name" : "open_cursors"}
                    },
                    {
                        "range" : {"client.db.oracle_props.@value" : {"lt" : 4000}}
                    }
                ]
            }
        }
    }
}

mudança de mapeamento

...
"properties": {
               "@type": {
                  "type": "string"
               },
               "oracle_props": {
                   "type" : "nested",
                  "properties": {
                     "@name": {
                        "type": "string"
                     },
                     "@value": {
                        "type": "long"
                     }
                  }
               }
            }
...

questionAnswers(2)

yourAnswerToTheQuestion