parent = temp.get(parent);
	public Value eval(DocumentSet docs, NodeSet context, NodeProxy node) {		Expression path = getArgument(0);		NodeSet nodes = (NodeSet) path.eval(docs, context, null).getNodeList();		String[] terms = new String[getArgumentCount() - 1];		for (int i = 1; i < getArgumentCount(); i++)			terms[i - 1] =				getArgument(i).eval(docs, context, node).getStringValue();		DBBroker broker = null;		NodeSet[][] hits = new NodeSet[terms.length][];		try {			broker = pool.get();			for (int j = 0; j < terms.length; j++) {				String t[] = { terms[j] };				hits[j] =					broker.getNodesContaining(docs, t, DBBroker.MATCH_REGEXP);			}		} catch (EXistException e) {			e.printStackTrace();		} finally {			pool.release(broker);		}		long pid;		NodeProxy current;		NodeProxy parent;		NodeSet temp;		long start = System.currentTimeMillis();		for (int j = 0; j < hits.length; j++) {			temp = new ArraySet(100);			for (int k = 0; k < hits[j].length; k++) {				if (hits[j][k] == null)					continue;				for (Iterator i = hits[j][k].iterator(); i.hasNext();) {					current = (NodeProxy) i.next();					parent = nodes.parentWithChild(current, false, true);					if (parent != null) {						if (temp.contains(parent)) {							parent.addMatches(current.matches);						} else {							parent.addMatches(current.matches);							temp.add(parent);						}					}				}			}			hits[j][0] = temp;		}		// merge results		NodeSet t0 = null;		// merge results		NodeSet t1;		for (int j = 0; j < hits.length; j++) {			t1 = hits[j][0];			/*			 *  for(int k = 1; k < hits[j].length; k++)			 *  t1 = t1.union(hits[j][k]);			 */			if (t0 == null)				t0 = t1;			else				t0 =					(getOperatorType() == Constants.FULLTEXT_AND)						? t0.intersection(t1)						: t0.union(t1);		}		if (t0 == null)			t0 = new ArraySet(1);		return new ValueNodeSet(t0);	}