MongoDB-style filter predicates on the query API. $eq, $gt, $in, the usual suspects. Filtering is a different problem than returning metadata -- return is a lookup AFTER you have results, filtering changes WHICH results you get. Had to wire it all the way through. Coordinator parses the filter, sends it to workers, workers apply it against the binary index during search, not after.
Test suite caught 2 edge cases on its first run. $in with a single-element array was being flattened to $eq somewhere in the coordinator's predicate normalization, which then failed type-checking on the worker side. And $gt on string fields was doing lexicographic comparison on the raw bytes instead of the decoded strings. Both fixed in appx 10 minutes once the tests pointed at them.
Which is either validating or terrifying. Depends on the day.
