def __init__(self, a, b): from whoosh.matching.binary import IntersectionMatcher self.a = a self.b = b WrappingMatcher.__init__(self, IntersectionMatcher(a, b))
def __init__(self, a, b): from whoosh.matching.binary import IntersectionMatcher self.a = a self.b = b self.child = IntersectionMatcher(a, b)
class RequireMatcher(WrappingMatcher): """Matches postings that are in both sub-matchers, but only uses scores from the first. """ def __init__(self, a, b): from whoosh.matching.binary import IntersectionMatcher self.a = a self.b = b self.child = IntersectionMatcher(a, b) def copy(self): return self.__class__(self.a.copy(), self.b.copy()) def supports_block_quality(self): return self.a.supports_block_quality() def replace(self, minquality=0): if not self.child.is_active(): # If one of the sub-matchers is inactive, go inactive return mcore.NullMatcher() elif minquality and self.a.max_quality() < minquality: # If the required matcher doesn't have a high enough max quality # to possibly contribute, return an inactive matcher return mcore.NullMatcher() new_a = self.a.replace(minquality) new_b = self.b.replace() if not new_a.is_active(): return mcore.NullMatcher() elif new_a is not self.a or new_b is not self.b: # If one of the sub-matchers changed, return a new Require return self.__class__(new_a, self.b) else: return self def max_quality(self): return self.a.max_quality() def block_quality(self): return self.a.block_quality() def skip_to_quality(self, minquality): skipped = self.a.skip_to_quality(minquality) self.child._find_next() return skipped def weight(self): return self.a.weight() def score(self): return self.a.score() def supports(self, astype): return self.a.supports(astype) def value(self): return self.a.value() def value_as(self, astype): return self.a.value_as(astype)