protected String isFilteredByTaskName(List<DataSetOp> ops) {
    for (DataSetOp dataSetOp : ops) {
      if (dataSetOp.getType().equals(DataSetOpType.FILTER)) {
        List<ColumnFilter> filters = ((DataSetFilter) dataSetOp).getColumnFilterList();

        for (ColumnFilter filter : filters) {

          if (filter instanceof CoreFunctionFilter) {
            CoreFunctionFilter coreFilter = ((CoreFunctionFilter) filter);
            if (filter.getColumnId().toUpperCase().equals(COLUMN_NAME.toUpperCase())
                && ((CoreFunctionFilter) filter).getType() == CoreFunctionType.EQUALS_TO) {

              List parameters = coreFilter.getParameters();
              if (parameters.size() > 0) {
                return parameters.get(0).toString();
              }
            }
          }
        }
      }
    }

    return null;
  }
  protected Query buildColumnCoreFunctionFilter(
      CoreFunctionFilter filter, DataSetMetadata metadata) {
    String columnId = filter.getColumnId();
    ColumnType columnType = metadata.getColumnType(columnId);
    ElasticSearchDataSetDef def = (ElasticSearchDataSetDef) metadata.getDefinition();

    Query result = null;

    CoreFunctionType type = filter.getType();
    List params = filter.getParameters();

    if (CoreFunctionType.IS_NULL.equals(type)) {

      result = new Query(Query.Type.NOT);
      Query existResult = new Query(columnId, Query.Type.EXISTS);
      result.setParam(Query.Parameter.FILTER.name(), existResult);

    } else if (CoreFunctionType.NOT_NULL.equals(type)) {

      result = new Query(columnId, Query.Type.EXISTS);

    } else if (CoreFunctionType.EQUALS_TO.equals(type)) {

      Object value = formatValue(def, columnId, params.get(0));

      if (ColumnType.LABEL.equals(columnType)) {
        result = new Query(columnId, Query.Type.TERM);
      } else {
        result = new Query(columnId, Query.Type.MATCH);
      }
      result.setParam(Query.Parameter.VALUE.name(), value);

    } else if (CoreFunctionType.LIKE_TO.equals(type)) {

      Object value = formatValue(def, columnId, params.get(0));

      if (value != null) {

        if (ColumnType.NUMBER.equals(columnType) || ColumnType.DATE.equals(columnType)) {
          throw new RuntimeException(
              "The operator LIKE can be applied only for LABEL or TEXT column types. The column ["
                  + columnId
                  + "] is type ["
                  + columnType.name()
                  + "}.");
        }

        // TEXT or LABEL columns.
        String indexType = def.getPattern(columnId);
        if (indexType == null || indexType.trim().length() == 0) {
          // Default ELS index type for String fields is ANALYZED.
          indexType = FieldMappingResponse.IndexType.ANALYZED.name();
        }

        // Replace Dashbuilder wildcard characters by the ones used in ELS wildcard query.
        boolean caseSensitive = params.size() < 2 || Boolean.parseBoolean(params.get(1).toString());
        boolean isFieldAnalyzed =
            FieldMappingResponse.IndexType.ANALYZED.name().equalsIgnoreCase(indexType);

        // Case un-sensitive is not supported for not_analyzed string fields.
        if (!isFieldAnalyzed && !caseSensitive) {
          throw new RuntimeException(
              "Case unsensitive is not supported for not_analyzed string fields. Field: ["
                  + columnId
                  + "].");
        }

        String pattern = utils.transformPattern(value.toString());
        boolean isLowerCaseExpandedTerms = isFieldAnalyzed && (!caseSensitive);
        result = new Query(columnId, Query.Type.QUERY_STRING);
        result.setParam(Query.Parameter.DEFAULT_FIELD.name(), columnId);
        result.setParam(Query.Parameter.DEFAULT_OPERATOR.name(), "AND");
        result.setParam(Query.Parameter.QUERY.name(), pattern);
        result.setParam(Query.Parameter.LOWERCASE_EXPANDED_TERMS.name(), isLowerCaseExpandedTerms);
      }

    } else if (CoreFunctionType.NOT_EQUALS_TO.equals(type)) {

      Object value = formatValue(def, columnId, params.get(0));

      if (ColumnType.LABEL.equals(columnType)) {
        Query resultMatch = new Query(columnId, Query.Type.TERM);
        resultMatch.setParam(Query.Parameter.VALUE.name(), value);
        result = new Query(columnId, Query.Type.NOT);
        result.setParam(Query.Parameter.FILTER.name(), resultMatch);
      } else {
        Query resultMatch = new Query(columnId, Query.Type.MATCH);
        resultMatch.setParam(Query.Parameter.VALUE.name(), value);
        result = new Query(columnId, Query.Type.BOOL);
        result.setParam(Query.Parameter.MUST_NOT.name(), asList(resultMatch));
      }

    } else if (CoreFunctionType.LOWER_THAN.equals(type)) {

      Object value = formatValue(def, columnId, params.get(0));
      result = new Query(columnId, Query.Type.RANGE);
      result.setParam(Query.Parameter.LT.name(), value);

    } else if (CoreFunctionType.LOWER_OR_EQUALS_TO.equals(type)) {

      Object value = formatValue(def, columnId, params.get(0));
      result = new Query(columnId, Query.Type.RANGE);
      result.setParam(Query.Parameter.LTE.name(), value);

    } else if (CoreFunctionType.GREATER_THAN.equals(type)) {

      Object value = formatValue(def, columnId, params.get(0));
      result = new Query(columnId, Query.Type.RANGE);
      result.setParam(Query.Parameter.GT.name(), value);

    } else if (CoreFunctionType.GREATER_OR_EQUALS_TO.equals(type)) {

      Object value = formatValue(def, columnId, params.get(0));
      result = new Query(columnId, Query.Type.RANGE);
      result.setParam(Query.Parameter.GTE.name(), value);

    } else if (CoreFunctionType.BETWEEN.equals(type)) {

      Object value0 = formatValue(def, columnId, params.get(0));
      Object value1 = formatValue(def, columnId, params.get(1));
      result = new Query(columnId, Query.Type.RANGE);
      result.setParam(Query.Parameter.GT.name(), value0);
      result.setParam(Query.Parameter.LT.name(), value1);

    } else if (CoreFunctionType.TIME_FRAME.equals(type)) {

      TimeFrame timeFrame = TimeFrame.parse(params.get(0).toString());
      if (timeFrame != null) {
        java.sql.Date past = new java.sql.Date(timeFrame.getFrom().getTimeInstant().getTime());
        java.sql.Date future = new java.sql.Date(timeFrame.getTo().getTimeInstant().getTime());
        result = new Query(columnId, Query.Type.RANGE);
        result.setParam(Query.Parameter.GTE.name(), past);
        result.setParam(Query.Parameter.LTE.name(), future);
      }

    } else {
      throw new IllegalArgumentException("Core function type not supported: " + type);
    }

    return result;
  }