code: public static ValueMatcher makeValueMatcherGeneric(DimensionSelector selector, @Nullable String value)
    {
      IdLookup idLookup = selector.idLookup();
      if (idLookup != null) {
        return makeDictionaryEncodedValueMatcherGeneric(selector, idLookup.lookupId(value), value == null);
      } else if (selector.getValueCardinality() >= 0 && selector.nameLookupPossibleInAdvance()) {
        // Employ caching BitSet optimization
        return makeDictionaryEncodedValueMatcherGeneric(selector, Predicates.equalTo(value));
      } else {
        return makeNonDictionaryEncodedValueMatcherGeneric(selector, value);
      }
    }
docs: Generic implementation of {@link DimensionSelector#makeValueMatcher(String)}, uses {@link
  DimensionSelector#getRow()} of the given {@link DimensionSelector}. "Lazy" DimensionSelectors could delegate
  {@code makeValueMatcher()} to this method, but encouraged to implement {@code makeValueMatcher()} themselves,
  bypassing the {@link IndexedInts} abstraction.