public void execute(DocumentMap dm) {
        init(dm);
        while (true) {
            if ((limit != 0) && (candidates.size() == limit)) {
                return;
            }
            candidate = indexGlobal.nextSubscript(candidate);
            if (candidate.equals("")) {
                break;
            }
            if (query.apply(candidate)) {
                continue;
            }

            if (uniqueIndex) {
                candidates.add(indexGlobal.getString(candidate));
            } else {
                ValueList indexList = indexGlobal.getList(candidate);
                for (int i=0;i<indexList.length();i++) {
                    candidates.add(indexList.getNextString());
                }
            }
        }
    }