Skip to content

0.4.0

Latest

Choose a tag to compare

@g4197 g4197 released this 22 Jun 11:47

v0.4.0

Milvus-compatible collection engine

The Python document/collection layer was replaced by a native C++ CollectionStore (src/server/collection_store.{h,cpp}). It owns schema metadata, scalar encoding, filter compilation, the SSD-backed graph index, and a RocksDB-backed (id, tag, document) doc store. The same engine backs both Milvus-compatible entry points:

  • In-process MilvusClient (pipeann/milvus.py) is a thin row/column shim over CollectionStore; its URI is a local directory.
  • C++ gRPC server (src/server/milvus_server.cpp) speaks the Milvus wire protocol, so stock Milvus SDKs can connect without PipeANN-specific client code.

New

  • CollectionStore C++ engine and its pipeann.C.CollectionStore pybind binding (src/python/pycollection.cpp).
  • Milvus-style collection CRUD, insert/upsert, search, scalar query, get, delete, count, flush, index creation, and load/release stubs through MilvusClient and the gRPC server.
  • Native SQL-like filter strings for search(filter=...), query(filter=...), delete(filter=...), and count(filter=...). Supported syntax includes comparisons, in / not in, between, like, array_contains, array_contains_all, array_contains_any, and, or, not, and parentheses.
  • Scalar field encoding for VARCHAR, integer, boolean, float/double, and integer-array fields. Float/double filter literals are rewritten to the order-preserving integer encoding used by range indexes.
  • StringPrefixSelector, StringSuffixSelector, and StringLikeSelector for LIKE filtering, alongside StringEqSelector.
  • field_codec.h scalar encode/decode coverage in tests/test_field_codec.cpp, Milvus quickstart coverage in tests_py/test_milvus_quickstart.py, and gRPC end-to-end coverage in tests_py/test_grpc_server_e2e.py.
  • pipeann-server / python -m pipeann.server launcher for the bundled pipeann_milvus_server binary.

Low-level filter config

  • pipeann::dsl::compile(sql, schema) now accepts the same SQL-like expression string used by the Milvus layer.
  • pipeann::dsl::CompiledFilter returns the selector, literal attribute template, slot_map, and var_field_type. Literal filters are ready to search immediately.
  • $$var placeholders remain available for C++ benchmark and low-level IndexPipeANN workflows. bind_row and bind_batch_per_var fill those slots, including .spmat batch binding.
  • DynamicIndex::load_filter_from_json(config_path) and IndexPipeANN.load_filter_from_json(config_path) consume {attr_indexes, filter, bindings} where filter is a SQL-like expression string, then return one Attributes row per bound query.

Breaking

  • Removed the PipeANN-specific Python Client (pipeann/client.py) and Collection (pipeann/collection.py). Use MilvusClient in-process or any Milvus SDK against the gRPC server.
  • Removed the SQLite-backed Python document/metadata layer. Collection metadata and documents now live in the native engine and RocksDB doc store.
  • Removed the LangChain (PipeANNVectorStore) and Qdrant FastAPI integrations that depended on the deleted Collection layer.
  • Collection.compile_filter, Collection.hybrid_query, and
    Collection.filter_query no longer exists. Use MilvusClient.search / MilvusClient.query with a SQL-like filter= string, or low-level IndexPipeANN selectors for direct index workflows.
  • Removed parse_selector_from_json and load_selector_from_config (include/filter/selector.h) and pipeann::load_base_attr_from_config (include/filter/attribute.h). Use load_filter_from_json with the {attr_indexes, filter, bindings} config.
  • The legacy {"base": ..., "query": {...}} filtered-search config no longer loads; scripts/attr_config/*.json, tests/search_disk_index_filtered.cpp, and tests/utils/compute_groundtruth.cpp use the new config schema.