Allow query for '*' that returns all docids.
[python_utils.git] / logical_search.py
index 41ed729fc15df80a4477d3094e4dc980869741aa..2cbe0c781f4ba7889e1b3bcc05373c66a427888e 100644 (file)
@@ -1,11 +1,14 @@
 #!/usr/bin/env python3
 
+# © Copyright 2021-2022, Scott Gasch
+
 """This is a module concerned with the creation of and searching of a
 corpus of documents.  The corpus is held in memory for fast
-searching."""
+searching.
 
-from __future__ import annotations
+"""
 
+from __future__ import annotations
 import enum
 import sys
 from collections import defaultdict
@@ -101,6 +104,8 @@ class Corpus(object):
     ...          )
     >>> c.query('author:Scott and important')
     {1}
+    >>> c.query('*')
+    {1, 2, 3}
     """
 
     def __init__(self) -> None:
@@ -183,7 +188,7 @@ class Corpus(object):
     def invert_docid_set(self, original: Set[str]) -> Set[str]:
         """Invert a set of docids."""
 
-        return set([docid for docid in self.documents_by_docid.keys() if docid not in original])
+        return {docid for docid in self.documents_by_docid if docid not in original}
 
     def get_doc(self, docid: str) -> Optional[Document]:
         """Given a docid, retrieve the previously added Document."""
@@ -208,6 +213,8 @@ 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: