anchor.diff:      {
           String[] facetInfo = _facetInfoMap.get(field);
           if (facetInfo != null) {
  -            return (expectedType.equals(facetInfo[0]) || "custom".equals(facetInfo[0]));
  +            Set<String> compatibleTypes = _compatibleFacetTypes.get(expectedType);
  +            return (expectedType.equals(facetInfo[0]) ||
  +                    "custom".equals(facetInfo[0]) ||
  +                    (compatibleTypes != null && compatibleTypes.contains(facetInfo[0])));
           }
           else {
               return true;
  
positive.code:             if (!verifyFacetType(col, "range")) {
                  throw new FailedPredicateException(input, 
                                                     "between_predicate",
                                                     "Non-range facet column \"" + col + "\" cannot be used in BETWEEN predicates.");
              }
  
              if (!verifyFieldDataType(col, new Object[]{$val1.val, $val2.val})) {
  
negative.code:         _supportedClasses.add("String");
          _supportedClasses.add("System");
  
          _compatibleFacetTypes = new HashMap<String, Set<String>>();
          _compatibleFacetTypes.put("range", new HashSet<String>(Arrays.asList(new String[]
                                                                 {
                                                                     "simple",
                                                                     "multi"
                                                                 })));
      }
  
      public BQLParser(TokenStream input, Map<String, String[]> facetInfoMap)
  