X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=logical_search.py;h=0cfbc8d22624bffe9bc227e3ffde0abc0f313053;hb=24b9bcb2a4b74d2c242c8b4172f295b57c09b46d;hp=2cbe0c781f4ba7889e1b3bcc05373c66a427888e;hpb=21451d4bda8e23771515c3a581aad9d8b81f5997;p=python_utils.git diff --git a/logical_search.py b/logical_search.py index 2cbe0c7..0cfbc8d 100644 --- a/logical_search.py +++ b/logical_search.py @@ -106,6 +106,8 @@ class Corpus(object): {1} >>> c.query('*') {1, 2, 3} + >>> c.query('*:*') + {1, 2, 3} """ def __init__(self) -> None: @@ -158,7 +160,6 @@ class Corpus(object): def get_docids_by_exact_tag(self, tag: str) -> Set[str]: """Return the set of docids that have a particular tag.""" - return self.docids_by_tag[tag] def get_docids_by_searching_tags(self, tag: str) -> Set[str]: @@ -213,8 +214,6 @@ class Corpus(object): tag1 and key:* """ - if query == '*': - return set(self.documents_by_docid.keys()) try: root = self._parse_query(query) except ParseError as e: @@ -361,12 +360,22 @@ class Node(object): key, value = tag.split(":") except ValueError as v: raise ParseError(f'Invalid key:value syntax at "{tag}"') from v - if value == "*": - r = self.corpus.get_docids_with_property(key) + if key == '*': + r = set() + for s in self.corpus.docids_by_tag.values(): + r.update(s) else: - r = self.corpus.get_docids_by_property(key, value) + if value == '*': + r = self.corpus.get_docids_with_property(key) + else: + r = self.corpus.get_docids_by_property(key, value) else: - r = self.corpus.get_docids_by_exact_tag(tag) + if tag == '*': + r = set() + for s in self.corpus.docids_by_tag.values(): + r.update(s) + else: + r = self.corpus.get_docids_by_exact_tag(tag) retval.update(r) else: raise ParseError(f"Unexpected query {tag}")