public EquationElement Solve(EquationElement eq, String resultKey){

		//List<EquationElement> keys = new ArrayList<EquationElement>();
		List<String> keys = new ArrayList<String>();

		for (EquationElement temp : eq.getMembers()) {

			if (temp.getOperation().toLowerCase().equals("element")){

				//if(eq.getMembers().indexOf(temp)==0){
				//	resultKey += temp.getTermcode();
				//}else{
				resultKey +=  temp.getTermcode() +":";
				//}

				//System.out.println("kli + " + temp.getTermcode());
				//System.out.println("key " + resultKey);	


				keys.add(temp.getTermcode());
				System.out.println("element added key   " + temp.getTermcode());
			}
			else if (temp.getOperation().toLowerCase().equals("and")||temp.getOperation().toLowerCase().equals("or")){
				EquationElement solution = this.Solve(temp, temp.getOperation() + ":");
				resultKey +=  solution.getTermcode();
				keys.add(solution.getTermcode());
				System.out.println("operator added key   " + solution.getTermcode());

			}
		}

		Object[] keysObject = keys.toArray(); 

		if(keysObject.length > 0){
			System.out.println("key object count  " + keysObject.length);
			System.out.println("key " + resultKey);
			this.redis.bitop(eq.getOperation(), resultKey, keysObject);
		}
		EquationElement returnEquationElement = new EquationElement("element", resultKey, null);
		return returnEquationElement;

	}