code: public static ValueMatcher makeValueMatcher(
        final ColumnSelectorFactory columnSelectorFactory,
        final String columnName,
        final DruidPredicateFactory predicateFactory
    )
    {
      final ColumnCapabilities capabilities = columnSelectorFactory.getColumnCapabilities(columnName);
  
      // This should be folded into the ValueMatcherColumnSelectorStrategy once that can handle LONG typed columns.
      if (capabilities != null && capabilities.getType() == ValueType.LONG) {
        return getLongPredicateMatcher(
            columnSelectorFactory.makeColumnValueSelector(columnName),
            predicateFactory.makeLongPredicate()
        );
      }
  
      final ColumnSelectorPlus<ValueMatcherColumnSelectorStrategy> selector =
          DimensionHandlerUtils.createColumnSelectorPlus(
              ValueMatcherColumnSelectorStrategyFactory.instance(),
              DefaultDimensionSpec.of(columnName),
              columnSelectorFactory
          );
  
      return selector.getColumnSelectorStrategy().makeValueMatcher(selector.getSelector(), predicateFactory);
    }
docs: Create a ValueMatcher that applies a predicate to row values.
  <p>
  The caller provides a predicate factory that can create a predicate for each value type supported by Druid.
  See {@link DruidPredicateFactory} for more information.
  <p>
  When creating the ValueMatcher, the ValueMatcherFactory implementation should decide what type of predicate
  to create from the predicate factory based on the ValueType of the specified dimension.
  
  @param columnSelectorFactory Selector for columns.
  @param columnName            The column to filter.
  @param predicateFactory      Predicate factory
  
  @return An object that applies a predicate to row values