Commits

Matt Chaput committed 00a347c Merge

Merged in astaric/whoosh (pull request #41)

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