@Override
  public int getResultSize() {
    int accumulator;
    if (resultSize == null) {
      ClusteredQueryCommand command = ClusteredQueryCommand.getResultSize(hSearchQuery, cache);

      ClusteredQueryInvoker invoker = new ClusteredQueryInvoker(cache, asyncExecutor);
      List<QueryResponse> responses = invoker.broadcast(command);

      accumulator = 0;
      for (QueryResponse response : responses) {
        accumulator += response.getResultSize();
      }
      resultSize = Integer.valueOf(accumulator);
    } else {
      accumulator = resultSize.intValue();
    }
    return accumulator;
  }
  private HashMap<UUID, ClusteredTopDocs> broadcastQuery(ClusteredQueryCommand command) {
    ClusteredQueryInvoker invoker = new ClusteredQueryInvoker(cache, asyncExecutor);

    HashMap<UUID, ClusteredTopDocs> topDocsResponses = new HashMap<UUID, ClusteredTopDocs>();
    int resultSize = 0;
    List<QueryResponse> responses = invoker.broadcast(command);

    for (Object response : responses) {
      QueryResponse queryResponse = (QueryResponse) response;
      ClusteredTopDocs topDocs =
          new ClusteredTopDocs(queryResponse.getTopDocs(), queryResponse.getNodeUUID());

      resultSize += queryResponse.getResultSize();
      topDocs.setNodeAddress(queryResponse.getAddress());
      topDocsResponses.put(queryResponse.getNodeUUID(), topDocs);
    }

    this.resultSize = resultSize;
    return topDocsResponses;
  }