docs: @SuppressWarnings("nls") // Do beans need escaping or will that be done 'automatically'. Test it. Strings do, but probably only quotes?
      private Client lookupClient(String orgId, String clientId, String version) {
          String query = "{" +
                  "  \"query\": {" +
                  "        \"bool\": {" +
                  "            \"filter\": [{" +
                  "                    \"term\": {" +
                  "                        \"organizationId\": ? " + // orgId
                  "                    }" +
                  "          }," +
                  "          {" +
                  "                    \"term\": {" +
                  "                        \"clientId\": ? " + // clientId
                  "                    }" +
                  "          }," +
                  "          {" +
                  "                    \"term\": {" +
                  "                        \"version\": ? " + // version
                  "          }" +
                  "      }" +
                  "            ]" +
                  "    }" +
                  "  }" +
                  "}";
  
          String escaped = ESUtils.queryWithEscapedArgs(query, orgId, clientId, version);
          try {
              Search search = new Search.Builder(escaped)
                      .addIndex(getIndexName())
                      .addType("client")
                      .build();
              SearchResult response = getClient().execute(search);
              if (!response.isSucceeded()) {
                  throw new RuntimeException(response.getErrorMessage());
              }
              if (response.getTotal() < 1) {
                  throw new IOException();
              }
              Hit<Client,Void> hit = response.getFirstHit(Client.class);
              return hit.source;
          } catch (IOException e) {
              throw new ClientNotFoundException(Messages.i18n.format("ESRegistry.ClientNotFound"), e);  //$NON-NLS-1$
          }
      }