Anonymous avatar Anonymous committed f9fc36e

Do not ignore filters that match no results.

Comments (0)

Files changed (2)

src/whoosh/collectors.py

         _allow = self._allow
         _restrict = self._restrict
 
-        if _allow or _restrict:
+        if _allow is not None or _restrict is not None:
             filtered_count = self.filtered_count
             for sub_docnum in child.matches():
                 global_docnum = self.offset + sub_docnum
-                if ((_allow and global_docnum not in _allow)
-                    or (_restrict and global_docnum in _restrict)):
+                if ((_allow is not None and global_docnum not in _allow)
+                    or (_restrict is not None and global_docnum in _restrict)):
                     filtered_count += 1
                     continue
                 child.collect(sub_docnum)

tests/test_collector.py

         r = s.search(query.Term("text", u("charlie")))
         assert [hit["id"] for hit in r] == [1, 3]
         assert len(r) == 2
+
+
+def test_filter_that_matches_no_document():
+    schema = fields.Schema(id=fields.STORED, text=fields.TEXT)
+    ix = RamStorage().create_index(schema)
+    w = ix.writer()
+    w.add_document(id=1, text=u("alfa bravo charlie"))
+    w.add_document(id=2, text=u("alfa bravo delta"))
+    w.commit()
+
+    with ix.searcher() as s:
+        r = s.search(
+            query.Every(),
+            filter=query.Term("text", u("echo")))
+        assert [hit["id"] for hit in r] == []
+        assert len(r) == 0
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.