X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=logical_search.py;h=0cfbc8d22624bffe9bc227e3ffde0abc0f313053;hb=24b9bcb2a4b74d2c242c8b4172f295b57c09b46d;hp=b6d7479879010d6ea40ef813d03e84574ead7e55;hpb=532df2c5b57c7517dfb3dddd8c1358fbadf8baf3;p=python_utils.git diff --git a/logical_search.py b/logical_search.py index b6d7479..0cfbc8d 100644 --- a/logical_search.py +++ b/logical_search.py @@ -104,6 +104,10 @@ class Corpus(object): ... ) >>> c.query('author:Scott and important') {1} + >>> c.query('*') + {1, 2, 3} + >>> c.query('*:*') + {1, 2, 3} """ def __init__(self) -> None: @@ -156,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]: @@ -357,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}")