Generally, matches_values? needs to check if *any* of the values are out of range--I would wrap this with values.any? do |value| ... end.

Also, can you add this function?

        def matches_doc?(doc)
          matches_values?(doc[DEFAULT_FIELD])
        end

It's an edge case of edge cases, but all the other query classes have them in case it they get invoked as the top level thing.