nidx-binding 6.9.1.post596__tar.gz → 6.9.1.post603__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/PKG-INFO +1 -1
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_protos/nidx.proto +15 -1
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_protos/nodewriter.proto +1 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_protos/pyproject.toml +1 -1
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_protos/src/lib.rs +1 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/data_store/v1.rs +1 -1
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/data_store/v2/paragraph_store.rs +13 -9
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/data_store/v2/quant_vector_store.rs +16 -8
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/data_store/v2/vector_store.rs +6 -6
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/data_store/v2.rs +1 -1
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/data_store.rs +1 -1
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/inverted_index/fst_index.rs +10 -5
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/inverted_index/map.rs +9 -4
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/inverted_index.rs +11 -4
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/searcher.rs +20 -33
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/segment.rs +24 -11
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/pyproject.toml +1 -1
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/api/grpc.rs +6 -2
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/segment_store.rs +1 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.config/nextest.toml +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-0cfce9b29547f8f5bafa6e440f86103be7b8c4ad2fd92db9ac223f4efbe23d10.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-1a561eed00f3dbe868bf5030059793300209179dc8fb73e4b57a54b5e81262fe.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-1d3fca2682e25a01143da92285297f134a6a105a96f64d87e0db3abb219855e4.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-249b3b57c27a71baa823f1fe0f0bba9c9af36f61c28f731e58beea60ec48e687.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-24cb6b683daa42d7125f862e25943ab4be7bf275cd8739f8da4859d701795e1a.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-263c8fce6db5b03bbd012fafdba6943cbee6ed7eb8976cdef4f5b01dde7ca6fd.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-2a5d92fb1638df830a4477a7cdf24e6db6b43034b7bbe74fdfb63e8afe2c4071.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-2b065a363f58caed60e3706603c1260dbf5a4c795604a5b68edda22eb07fec1b.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-3fc3cb39934683de8cd475ce1368c8373453eb1e01f81587d66b9d14b109ce6e.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-48f33b77b7c1633467b0b2efcaa1d3c207e7757e4f1d83b40d15e6ca365f7771.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-4ae09f2c08e2f324bee01bb8487a8f37678a1c5e9d327339235c50d4921a8949.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-4d7a76fa413c9ef0ce2a47ac7bb7e01d3e6a2aabded9487d21010a53efee8852.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-4fcbdd6657c7dc9b60b3a563dd41711b3dbcf72ce063427b7a01f8cddf34c244.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-577109ac00ccfbd38ecaccab94116f2f46a4caf5612afa372cded197123c1e08.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-5db25f97d8578d6d78f2f6bd4b72cc82a9b1b82805c6422d967ac63b20d99db4.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-5ec3233a3a23e926055056d46bdde17836a633066dbb5f349502648cd3ea9a60.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-66edb6ea424d8681927dcddb6bac5f1239175f4775d1f40417ba15054b0c6f19.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-6f9c6d201c1b5712efb68c363bffd3e0169c11f2a8f925e8cd4e8808599ff7b4.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-733c3ebacc86f444bf5e2dd79ade660c291e88a00fc09b722f6e2e191545874c.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-7a3bf27c330c468a596e8a297cf7d8b192e31e67ecc5177c1267f579e8e247c7.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-7a7e59e47b30b12237511fd3d7da2d17b0471ad2b006af48d6a6f587c779692b.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-7dcbb33312cc9f11ae3a6d73b1ace017a9f19a8bf8f10304fc57977c8efeadff.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-7efa7c0d747afc4b6aed0586ff846c27839c3213ff7ee9f30c89b0d0f17e60e3.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-8493140d788604d498a4e48da4158708572ccc9d60185290a00d549cc84533db.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-8493bb0059b013eaca42fd10cd7d04f0d06a8acaed379eff0d23f3229edde9ee.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-87996b3d6c7a2195438d7038015b06949102bce8c7b8cd8db1f83aaf23cbe489.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-8d33717587c6ee8f5fc339a80b1212a73d6c03e45856b1d55457fc8074709dd0.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-8f096d8171b89f9615d18f95d696dc9e4fb3674e103161a713cdc806f7a68506.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-917732a56ee04bf3a6e127319dda8225210869c82f9828d878162394dba4e078.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-95fe4ef93ee90733db1b67ed7987f80b5aac792f1590b979c68b418d1599eb98.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-9b67658569b343d8b4b61ae0a7dc721f367f2ba33c7b69b9e68bfd5c9bff5206.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-9c8062ea55d070afef68309e58fa987eb37fda44e1efbf68c8ba2af7846cc968.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-a06e1d9f6f95e4c4c2b98310ebddcc9d963cc033582bf2e945e8bf3a301b4247.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-a55265c9b07bd1399961a6f1e757201fd0eebe868ddaf96437111113d80fce92.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-a60ec2f66f1e7b84189e5b089f2087a29ff6a64326a3743dea935bbc58ee77fa.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-a891a37be5c2d7cce775c2dd33726b0318fd3839beab222a1b22bc6174604207.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-a945191bb4b3e37d6823ed3ad499339d007d69983105de8567777d9daf517b28.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-abe9f7832f2bd799ac44008da031e8d8ab52d4f5fbfc2a7e3974e8873bae55b2.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-aca588cca57a85e4d7fcc40c23cd87e57d53d11ca550d78e7e3d5e39e524fcd3.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-b02f8aafc00a7724510772ac41269e368c5bccf03ef7b4590e0ef6fd1a1bf64f.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-b742e17cabe2d64617e9aa64bafc782172f7a4f8023d1b54f952a0fb39f6b2b8.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-b94e349dbc0daec57f8f8f6e9e2dffb06100b1bb2b41d297c9f3b191da37a83d.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-bd9afa22994aba671dbf7b5f89b53c2ee02f53c0442a81265786a6d52d08512f.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-be60554eca98a5899efc6b49785cecd6444a6d39afed9e4a884ce2dbf162012c.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-bf49702b506c9a1650ece1f8e8d9f14834a902f8caefafe30ded55e2790f2188.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-bfcd21ed704cd305db5c17fcdec7d92aa4ac501913c9c9514d8ff92928c0c7e7.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-c3ab694650f49a75b146fb877a92e48c4f20f0d99f70f8ec859fbb763b01a1e5.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-c55542bb9fae544d87fae6f30e0fe8a9088d12075f4442ab4fe2fcd05e472234.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-cb29a6556d35ac630ee0aa885dd7341cf9573bd3efd216ff8a887b87686b03db.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-d0a1f341a89f5f14696b10baa72db9d95551c2b7e5fc67308fd52dc03dd98a92.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-d2ad0a0ca2649c9e4873cfcc1fc66d2d07cc45d0f65c560b06d7b5f592f4fa8a.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-d6cfe78eb635ba0b89ca4021a4dc8182d18ab5b197f30149cd28488eba4c1df5.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-d729b56dea00e49dcdba8cf0001e2811da27351eabe98212db3b589f18fc6f32.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-d9658bfd4e7170b41d03f2ddf2446d0bf54171c0d39d53bf20af2b8437f2ec48.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-dbba7b3d3289425bae711aedbf73fbc3699f857f86f84d95c3b556d05c5658b0.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-dcb96b649d6d63a58efd5d445453a4f3d7869a56ff714b69bedf3d616a0473ca.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-ebd876fbf5362a5900e75bc05f2f11c73c406ef7da4e95097fc6a1c3d1b8bc54.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-eef5cc6bce1cc14eba8f3e68971724ef181e88cffcedd74673615f2026b89a62.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/.sqlx/query-ef56d5fefc5774040d1ee397beadb475f6af02768c22f0e583c74062e2e821ce.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/Cargo.lock +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/Cargo.toml +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/README.md +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/migrations/20241007163501_initial.sql +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/migrations/20241211120039_merge_job_priority.sql +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/migrations/20241211121159_basic_indexes.sql +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/migrations/20241212151105_check_segment_records.sql +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/migrations/20250110145554_in_flight_messages.sql +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_binding/Cargo.toml +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_binding/src/lib.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/Cargo.toml +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/src/fuzzy_query.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/src/lib.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/src/query_io.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/src/query_parser/fuzzy_parser.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/src/query_parser/keyword_parser.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/src/query_parser/stop_words.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/src/query_parser/tokenizer.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/src/query_parser.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/src/reader.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/src/request_types.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/src/resource_indexer.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/src/schema.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/src/search_query.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/src/search_response.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/src/set_query.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/README.md +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/ar.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/az.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/bn.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/ca.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/ch.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/da.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/de.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/el.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/en.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/es.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/eu.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/extract.py +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/fi.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/fr.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/he.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/hu.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/id.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/it.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/kk.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/ne.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/nl.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/no.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/pt.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/ro.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/ru.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/sl.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/sv.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/tg.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/stop_words/tr.json +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/tests/common/mod.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_paragraph/tests/reader.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_protos/Cargo.toml +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_protos/build.py +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_protos/build.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_protos/nodereader.proto +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_protos/noderesources.proto +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_relation/Cargo.toml +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_relation/src/graph_collector.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_relation/src/graph_query_parser.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_relation/src/io_maps.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_relation/src/lib.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_relation/src/reader.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_relation/src/resource_indexer.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_relation/src/schema.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_relation/src/top_unique_n.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_relation/tests/common/mod.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_relation/tests/test_graph_query_parser_search.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_relation/tests/test_graph_search.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_relation/tests/test_writer.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_tantivy/Cargo.toml +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_tantivy/src/index_reader.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_tantivy/src/lib.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_tantivy/src/utils.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_tests/Cargo.toml +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_tests/src/graph.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_tests/src/lib.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_text/Cargo.toml +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_text/src/lib.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_text/src/prefilter.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_text/src/query_io.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_text/src/reader.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_text/src/request_types.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_text/src/resource_indexer.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_text/src/schema.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_text/src/search_query.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_text/tests/common/mod.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_text/tests/test_deletions.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_text/tests/test_flow.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_text/tests/test_search.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_text/tests/test_streaming.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_types/Cargo.toml +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_types/src/lib.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_types/src/prefilter.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_types/src/query_language.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/Cargo.toml +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/config.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/data_store/v1/node.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/data_store/v1/store.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/data_store/v1/trie.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/data_store/v1/trie_ram.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/data_types.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/formula.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/hnsw/disk_hnsw.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/hnsw/ops_hnsw.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/hnsw/params.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/hnsw/ram_hnsw.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/hnsw.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/indexer.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/lib.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/multivector.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/query_io.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/request_types.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/segment/tests.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/utils.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/vector_types/dense_f32.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/vector_types/mod.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/vector_types/rabitq.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/tests/common/mod.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/tests/test_basic_search.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/tests/test_hidden.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/tests/test_maxsim.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/api/shards.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/api.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/control.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/errors.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/grpc_server.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/import_export.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/indexer.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/lib.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/main.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/metadata/deletion.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/metadata/index.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/metadata/index_request.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/metadata/merge_job.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/metadata/segment.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/metadata/shard.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/metadata.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/metrics.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/scheduler/audit_task.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/scheduler/log_merge.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/scheduler/merge_task.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/scheduler/metrics_task.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/scheduler/purge_tasks.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/scheduler/vector_merge.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/scheduler.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/searcher/grpc.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/searcher/index_cache.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/searcher/query_language.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/searcher/query_planner.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/searcher/shard_search.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/searcher/shard_selector.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/searcher/shard_suggest.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/searcher/streams.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/searcher/sync.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/searcher.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/settings.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/telemetry/duration_layer.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/telemetry/log_format.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/telemetry/middleware.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/telemetry.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/tool.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/utilization_tracker.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/src/worker.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/tests/common/mod.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/tests/common/services.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/tests/test_date_range_search.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/tests/test_search_filtering.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/tests/test_search_relations.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/tests/test_search_sorting.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/tests/test_searcher_cluster.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/tests/test_security_search.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/tests/test_shards.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/tests/test_shards_api.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/tests/test_suggest.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/tests/test_synced_searcher.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/tests/test_vector_normalization.rs +0 -0
- {nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/tests/test_vectorsets.rs +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nidx_binding
|
|
3
|
-
Version: 6.9.1.
|
|
3
|
+
Version: 6.9.1.post603
|
|
4
4
|
Classifier: Programming Language :: Rust
|
|
5
5
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
6
6
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
@@ -7,10 +7,10 @@ import "nidx_protos/nodewriter.proto";
|
|
|
7
7
|
|
|
8
8
|
service NidxApi {
|
|
9
9
|
rpc GetShard(nodereader.GetShardRequest) returns (noderesources.Shard) {}
|
|
10
|
-
|
|
11
10
|
rpc NewShard(nodewriter.NewShardRequest) returns (noderesources.ShardCreated) {}
|
|
12
11
|
rpc DeleteShard(noderesources.ShardId) returns (noderesources.ShardId) {}
|
|
13
12
|
rpc ListShards(noderesources.EmptyQuery) returns (noderesources.ShardIds) {}
|
|
13
|
+
rpc ConfigureShards(ShardsConfig) returns (noderesources.EmptyQuery) {}
|
|
14
14
|
|
|
15
15
|
rpc AddVectorSet(nodewriter.NewVectorSetRequest) returns (nodewriter.OpStatus) {}
|
|
16
16
|
rpc RemoveVectorSet(noderesources.VectorSetID) returns (nodewriter.OpStatus) {}
|
|
@@ -43,3 +43,17 @@ message Notification {
|
|
|
43
43
|
}
|
|
44
44
|
Action action = 6;
|
|
45
45
|
}
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
message ShardsConfig {
|
|
49
|
+
repeated ShardConfig configs = 1;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
message ShardConfig {
|
|
53
|
+
string shard_id = 1;
|
|
54
|
+
|
|
55
|
+
// Pre-warm is a feature to minimize cold starts on searches. It'll keep
|
|
56
|
+
// disk data in memory to avoid IO latency, at expenses of RAM usage. Use
|
|
57
|
+
// with care.
|
|
58
|
+
bool prewarm_enabled = 2;
|
|
59
|
+
}
|
|
@@ -10,7 +10,7 @@ build-backend = "pdm.backend"
|
|
|
10
10
|
|
|
11
11
|
[project]
|
|
12
12
|
name = "nidx_protos"
|
|
13
|
-
version = "6.9.1.
|
|
13
|
+
version = "6.9.1.post603"
|
|
14
14
|
license = "AGPL-3.0-or-later"
|
|
15
15
|
description = "Protobuf definitions for nucliadb/nidx"
|
|
16
16
|
authors = [{ name = "Nuclia", email = "nucliadb@nuclia.com" }]
|
|
@@ -98,7 +98,7 @@ impl DataStoreV1 {
|
|
|
98
98
|
{
|
|
99
99
|
let advice = match reason {
|
|
100
100
|
OpenReason::Create => memmap2::Advice::Sequential,
|
|
101
|
-
OpenReason::Search => memmap2::Advice::Random,
|
|
101
|
+
OpenReason::Search { .. } => memmap2::Advice::Random,
|
|
102
102
|
};
|
|
103
103
|
nodes.advise(advice)?;
|
|
104
104
|
}
|
|
@@ -19,7 +19,11 @@
|
|
|
19
19
|
//
|
|
20
20
|
|
|
21
21
|
use memmap2::Mmap;
|
|
22
|
-
use std::{
|
|
22
|
+
use std::{
|
|
23
|
+
fs::File,
|
|
24
|
+
io::{BufWriter, Write as _},
|
|
25
|
+
path::Path,
|
|
26
|
+
};
|
|
23
27
|
|
|
24
28
|
use crate::{
|
|
25
29
|
VectorR,
|
|
@@ -86,7 +90,7 @@ impl ParagraphStore {
|
|
|
86
90
|
pos.advise(memmap2::Advice::WillNeed)?;
|
|
87
91
|
let advice = match reason {
|
|
88
92
|
OpenReason::Create => memmap2::Advice::Sequential,
|
|
89
|
-
OpenReason::Search => memmap2::Advice::Random,
|
|
93
|
+
OpenReason::Search { .. } => memmap2::Advice::Random,
|
|
90
94
|
};
|
|
91
95
|
data.advise(advice)?;
|
|
92
96
|
}
|
|
@@ -112,8 +116,8 @@ impl ParagraphStore {
|
|
|
112
116
|
}
|
|
113
117
|
|
|
114
118
|
pub struct ParagraphStoreWriter {
|
|
115
|
-
data: File
|
|
116
|
-
pos: File
|
|
119
|
+
data: BufWriter<File>,
|
|
120
|
+
pos: BufWriter<File>,
|
|
117
121
|
data_pos: u32,
|
|
118
122
|
addr: u32,
|
|
119
123
|
}
|
|
@@ -121,8 +125,8 @@ pub struct ParagraphStoreWriter {
|
|
|
121
125
|
impl ParagraphStoreWriter {
|
|
122
126
|
pub fn new(path: &Path) -> std::io::Result<Self> {
|
|
123
127
|
Ok(Self {
|
|
124
|
-
pos: File::create(path.join(FILENAME_POS))
|
|
125
|
-
data: File::create(path.join(FILENAME_DATA))
|
|
128
|
+
pos: BufWriter::new(File::create(path.join(FILENAME_POS))?),
|
|
129
|
+
data: BufWriter::new(File::create(path.join(FILENAME_DATA))?),
|
|
126
130
|
data_pos: 0,
|
|
127
131
|
addr: 0,
|
|
128
132
|
})
|
|
@@ -159,9 +163,9 @@ impl ParagraphStoreWriter {
|
|
|
159
163
|
Ok(self.addr)
|
|
160
164
|
}
|
|
161
165
|
|
|
162
|
-
pub fn close(self) -> std::io::Result<()> {
|
|
163
|
-
self.data.
|
|
164
|
-
self.pos.
|
|
166
|
+
pub fn close(&mut self) -> std::io::Result<()> {
|
|
167
|
+
self.data.flush()?;
|
|
168
|
+
self.pos.flush()?;
|
|
165
169
|
Ok(())
|
|
166
170
|
}
|
|
167
171
|
}
|
|
@@ -19,8 +19,12 @@
|
|
|
19
19
|
//
|
|
20
20
|
|
|
21
21
|
use lazy_static::lazy_static;
|
|
22
|
-
use memmap2::Mmap;
|
|
23
|
-
use std::{
|
|
22
|
+
use memmap2::{Mmap, MmapOptions};
|
|
23
|
+
use std::{
|
|
24
|
+
fs::File,
|
|
25
|
+
io::{BufWriter, Write as _},
|
|
26
|
+
path::Path,
|
|
27
|
+
};
|
|
24
28
|
|
|
25
29
|
use crate::{
|
|
26
30
|
data_store::{OpenReason, VectorAddr},
|
|
@@ -37,13 +41,17 @@ pub struct QuantVectorStore {
|
|
|
37
41
|
|
|
38
42
|
impl QuantVectorStore {
|
|
39
43
|
pub fn open(path: &Path, vector_len_bytes: usize, reason: &OpenReason) -> std::io::Result<Self> {
|
|
40
|
-
let
|
|
44
|
+
let mut options = MmapOptions::new();
|
|
45
|
+
if matches!(reason, OpenReason::Search { prewarm: true }) {
|
|
46
|
+
options.populate();
|
|
47
|
+
}
|
|
48
|
+
let data = unsafe { options.map(&File::open(path.join(FILENAME))?)? };
|
|
41
49
|
|
|
42
50
|
#[cfg(not(target_os = "windows"))]
|
|
43
51
|
{
|
|
44
52
|
let advice = match reason {
|
|
45
53
|
OpenReason::Create => memmap2::Advice::Sequential,
|
|
46
|
-
OpenReason::Search => memmap2::Advice::Random,
|
|
54
|
+
OpenReason::Search { .. } => memmap2::Advice::Random,
|
|
47
55
|
};
|
|
48
56
|
data.advise(advice)?;
|
|
49
57
|
}
|
|
@@ -86,13 +94,13 @@ impl QuantVectorStore {
|
|
|
86
94
|
}
|
|
87
95
|
|
|
88
96
|
pub struct QuantVectorStoreWriter {
|
|
89
|
-
output: File
|
|
97
|
+
output: BufWriter<File>,
|
|
90
98
|
}
|
|
91
99
|
|
|
92
100
|
impl QuantVectorStoreWriter {
|
|
93
101
|
pub fn new(path: &Path) -> std::io::Result<Self> {
|
|
94
102
|
Ok(Self {
|
|
95
|
-
output: File::create(path.join(FILENAME))
|
|
103
|
+
output: BufWriter::new(File::create(path.join(FILENAME))?),
|
|
96
104
|
})
|
|
97
105
|
}
|
|
98
106
|
|
|
@@ -100,7 +108,7 @@ impl QuantVectorStoreWriter {
|
|
|
100
108
|
self.output.write_all(vector)
|
|
101
109
|
}
|
|
102
110
|
|
|
103
|
-
pub fn close(self) -> std::io::Result<()> {
|
|
104
|
-
self.output.
|
|
111
|
+
pub fn close(&mut self) -> std::io::Result<()> {
|
|
112
|
+
self.output.flush()
|
|
105
113
|
}
|
|
106
114
|
}
|
|
@@ -22,7 +22,7 @@ use lazy_static::lazy_static;
|
|
|
22
22
|
use memmap2::Mmap;
|
|
23
23
|
use std::{
|
|
24
24
|
fs::File,
|
|
25
|
-
io::{Seek, SeekFrom, Write as _},
|
|
25
|
+
io::{BufWriter, Seek, SeekFrom, Write as _},
|
|
26
26
|
path::Path,
|
|
27
27
|
};
|
|
28
28
|
|
|
@@ -60,7 +60,7 @@ impl VectorStore {
|
|
|
60
60
|
{
|
|
61
61
|
let advice = match reason {
|
|
62
62
|
OpenReason::Create => memmap2::Advice::Sequential,
|
|
63
|
-
OpenReason::Search => memmap2::Advice::Random,
|
|
63
|
+
OpenReason::Search { .. } => memmap2::Advice::Random,
|
|
64
64
|
};
|
|
65
65
|
data.advise(advice)?;
|
|
66
66
|
}
|
|
@@ -119,7 +119,7 @@ impl VectorStore {
|
|
|
119
119
|
}
|
|
120
120
|
|
|
121
121
|
pub struct VectorStoreWriter {
|
|
122
|
-
output: File
|
|
122
|
+
output: BufWriter<File>,
|
|
123
123
|
addr: u32,
|
|
124
124
|
padding_bytes: usize,
|
|
125
125
|
}
|
|
@@ -127,7 +127,7 @@ pub struct VectorStoreWriter {
|
|
|
127
127
|
impl VectorStoreWriter {
|
|
128
128
|
pub fn new(path: &Path, vector_type: &VectorType) -> std::io::Result<Self> {
|
|
129
129
|
Ok(Self {
|
|
130
|
-
output: File::create(path.join(FILENAME))
|
|
130
|
+
output: BufWriter::new(File::create(path.join(FILENAME))?),
|
|
131
131
|
addr: 0,
|
|
132
132
|
padding_bytes: padding_bytes(vector_type),
|
|
133
133
|
})
|
|
@@ -151,7 +151,7 @@ impl VectorStoreWriter {
|
|
|
151
151
|
Ok((first_addr, last_addr))
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
-
pub fn close(self) -> std::io::Result<()> {
|
|
155
|
-
self.output.
|
|
154
|
+
pub fn close(mut self) -> std::io::Result<()> {
|
|
155
|
+
self.output.flush()
|
|
156
156
|
}
|
|
157
157
|
}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
use std::{collections::HashSet, fs::File, io::BufWriter, path::Path, sync::Arc};
|
|
21
21
|
|
|
22
22
|
use fst::{Automaton, IntoStreamer, Map, Streamer};
|
|
23
|
-
use memmap2::Mmap;
|
|
23
|
+
use memmap2::{Mmap, MmapOptions};
|
|
24
24
|
|
|
25
25
|
use crate::VectorR;
|
|
26
26
|
|
|
@@ -59,9 +59,14 @@ pub struct FstIndexReader {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
impl FstIndexReader {
|
|
62
|
-
pub fn open(path: &Path, map_reader: Arc<InvertedMapReader
|
|
62
|
+
pub fn open(path: &Path, map_reader: Arc<InvertedMapReader>, prewarm: bool) -> VectorR<Self> {
|
|
63
|
+
let mut options = MmapOptions::new();
|
|
64
|
+
if prewarm {
|
|
65
|
+
options.populate();
|
|
66
|
+
}
|
|
67
|
+
|
|
63
68
|
Ok(Self {
|
|
64
|
-
fst: Map::new(unsafe {
|
|
69
|
+
fst: Map::new(unsafe { options.map(&File::open(path)?)? })?,
|
|
65
70
|
map_reader,
|
|
66
71
|
})
|
|
67
72
|
}
|
|
@@ -132,8 +137,8 @@ mod tests {
|
|
|
132
137
|
map_writer.finish()?;
|
|
133
138
|
|
|
134
139
|
// Check the map has the same contents we initialized
|
|
135
|
-
let map_reader = Arc::new(InvertedMapReader::open(tmp_map.path())?);
|
|
136
|
-
let reader = FstIndexReader::open(tmp.path(), map_reader)?;
|
|
140
|
+
let map_reader = Arc::new(InvertedMapReader::open(tmp_map.path(), false)?);
|
|
141
|
+
let reader = FstIndexReader::open(tmp.path(), map_reader, false)?;
|
|
137
142
|
|
|
138
143
|
for (key, value) in entries {
|
|
139
144
|
let indexed = reader.get(&key);
|
{nidx_binding-6.9.1.post596 → nidx_binding-6.9.1.post603}/nidx_vector/src/inverted_index/map.rs
RENAMED
|
@@ -23,7 +23,7 @@ use std::{
|
|
|
23
23
|
path::Path,
|
|
24
24
|
};
|
|
25
25
|
|
|
26
|
-
use memmap2::Mmap;
|
|
26
|
+
use memmap2::{Mmap, MmapOptions};
|
|
27
27
|
use stream_vbyte::{decode::decode, encode::encode, scalar::Scalar};
|
|
28
28
|
|
|
29
29
|
use crate::VectorR;
|
|
@@ -67,9 +67,14 @@ pub struct InvertedMapReader {
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
impl InvertedMapReader {
|
|
70
|
-
pub fn open(path: &Path) -> VectorR<Self> {
|
|
70
|
+
pub fn open(path: &Path, prewarm: bool) -> VectorR<Self> {
|
|
71
|
+
let mut options = MmapOptions::new();
|
|
72
|
+
if prewarm {
|
|
73
|
+
options.populate();
|
|
74
|
+
}
|
|
75
|
+
|
|
71
76
|
Ok(Self {
|
|
72
|
-
data: unsafe {
|
|
77
|
+
data: unsafe { options.map(&File::open(path)?)? },
|
|
73
78
|
})
|
|
74
79
|
}
|
|
75
80
|
|
|
@@ -120,7 +125,7 @@ mod tests {
|
|
|
120
125
|
writer.finish()?;
|
|
121
126
|
|
|
122
127
|
// Check the map has the same contents we initialized
|
|
123
|
-
let reader = InvertedMapReader::open(tmp.path())?;
|
|
128
|
+
let reader = InvertedMapReader::open(tmp.path(), false)?;
|
|
124
129
|
for i in 0..20 {
|
|
125
130
|
let indexed = reader.get(indexes[i]);
|
|
126
131
|
assert_eq!(indexed, entries[i]);
|
|
@@ -151,6 +151,10 @@ pub fn build_indexes(work_path: &Path, data_store: &impl DataStore) -> VectorR<(
|
|
|
151
151
|
Ok(())
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
+
pub struct OpenOptions {
|
|
155
|
+
pub prewarm: bool,
|
|
156
|
+
}
|
|
157
|
+
|
|
154
158
|
pub struct InvertedIndexes {
|
|
155
159
|
field_index: FstIndexReader,
|
|
156
160
|
label_index: FstIndexReader,
|
|
@@ -166,10 +170,13 @@ impl InvertedIndexes {
|
|
|
166
170
|
path.join(file::INDEX_MAP).exists()
|
|
167
171
|
}
|
|
168
172
|
|
|
169
|
-
pub fn open(work_path: &Path, records: usize) -> VectorR<Self> {
|
|
170
|
-
let map = Arc::new(InvertedMapReader::open(
|
|
171
|
-
|
|
172
|
-
|
|
173
|
+
pub fn open(work_path: &Path, records: usize, options: OpenOptions) -> VectorR<Self> {
|
|
174
|
+
let map = Arc::new(InvertedMapReader::open(
|
|
175
|
+
&work_path.join(file::INDEX_MAP),
|
|
176
|
+
options.prewarm,
|
|
177
|
+
)?);
|
|
178
|
+
let field_index = FstIndexReader::open(&work_path.join(file::FIELD_INDEX), map.clone(), options.prewarm)?;
|
|
179
|
+
let label_index = FstIndexReader::open(&work_path.join(file::LABEL_INDEX), map, options.prewarm)?;
|
|
173
180
|
|
|
174
181
|
Ok(Self {
|
|
175
182
|
field_index,
|
|
@@ -156,10 +156,11 @@ impl<'a> Fssc<'a> {
|
|
|
156
156
|
buff: HashSet::with_capacity(size),
|
|
157
157
|
}
|
|
158
158
|
}
|
|
159
|
-
fn add(&mut self, candidate: ScoredParagraph<'a>, vector:
|
|
160
|
-
if !self.with_duplicates && self.seen.contains(
|
|
159
|
+
fn add(&mut self, candidate: ScoredParagraph<'a>, vector: &[u8]) {
|
|
160
|
+
if !self.with_duplicates && self.seen.contains(vector) {
|
|
161
161
|
return;
|
|
162
162
|
} else if !self.with_duplicates {
|
|
163
|
+
let vector = vector.to_vec();
|
|
163
164
|
self.seen.insert(vector);
|
|
164
165
|
}
|
|
165
166
|
|
|
@@ -260,37 +261,23 @@ impl Searcher {
|
|
|
260
261
|
let min_score = request.min_score();
|
|
261
262
|
let mut ffsv = Fssc::new(request.no_results(), with_duplicates);
|
|
262
263
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
.
|
|
267
|
-
.
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
let addr = candidate.paragraph();
|
|
281
|
-
let paragraph = open_segment.get_paragraph(addr);
|
|
282
|
-
(
|
|
283
|
-
ScoredParagraph::new(open_segment, addr, paragraph, candidate.score()),
|
|
284
|
-
candidate.vector().to_vec(),
|
|
285
|
-
)
|
|
286
|
-
})
|
|
287
|
-
.collect()
|
|
288
|
-
})
|
|
289
|
-
.collect()
|
|
290
|
-
});
|
|
291
|
-
|
|
292
|
-
for (paragraph, vector) in results {
|
|
293
|
-
ffsv.add(paragraph, vector);
|
|
264
|
+
for open_segment in &self.open_segments {
|
|
265
|
+
// Skip this segment if it doesn't match the segment filter
|
|
266
|
+
if !segment_filter
|
|
267
|
+
.as_ref()
|
|
268
|
+
.is_none_or(|f| segment_matches(f, open_segment.tags()))
|
|
269
|
+
{
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
let partial_solution =
|
|
273
|
+
open_segment.search(query, filter, with_duplicates, no_results, &self.config, min_score);
|
|
274
|
+
|
|
275
|
+
for candidate in partial_solution {
|
|
276
|
+
let addr = candidate.paragraph();
|
|
277
|
+
let paragraph = open_segment.get_paragraph(addr);
|
|
278
|
+
let scored_paragraph = ScoredParagraph::new(open_segment, addr, paragraph, candidate.score());
|
|
279
|
+
ffsv.add(scored_paragraph, candidate.vector());
|
|
280
|
+
}
|
|
294
281
|
}
|
|
295
282
|
|
|
296
283
|
Ok(ffsv.into())
|
|
@@ -24,13 +24,13 @@ mod tests;
|
|
|
24
24
|
use crate::config::{VectorConfig, flags};
|
|
25
25
|
use crate::data_store::{DataStore, DataStoreV1, DataStoreV2, OpenReason, ParagraphRef, VectorRef};
|
|
26
26
|
use crate::formula::Formula;
|
|
27
|
-
use crate::hnsw::*;
|
|
28
27
|
use crate::inverted_index::{FilterBitSet, InvertedIndexes, build_indexes};
|
|
29
28
|
use crate::vector_types::rabitq;
|
|
30
29
|
use crate::{ParagraphAddr, VectorAddr, VectorErr, VectorR, VectorSegmentMeta, VectorSegmentMetadata};
|
|
30
|
+
use crate::{hnsw::*, inverted_index};
|
|
31
31
|
use core::f32;
|
|
32
32
|
use io::{BufWriter, Write};
|
|
33
|
-
use memmap2::Mmap;
|
|
33
|
+
use memmap2::{Mmap, MmapOptions};
|
|
34
34
|
use std::cmp::Reverse;
|
|
35
35
|
use std::collections::HashSet;
|
|
36
36
|
use std::fs::File;
|
|
@@ -48,9 +48,12 @@ mod file_names {
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
pub fn open(metadata: VectorSegmentMetadata, config: &VectorConfig) -> VectorR<OpenSegment> {
|
|
51
|
+
// TODO: we should get this flag from the VectorConfig or some other place
|
|
52
|
+
let prewarm = false;
|
|
53
|
+
|
|
51
54
|
let path = &metadata.path;
|
|
52
55
|
let data_store: Box<dyn DataStore> = if DataStoreV1::exists(path)? {
|
|
53
|
-
let data_store = DataStoreV1::open(path, &config.vector_type, OpenReason::Search)?;
|
|
56
|
+
let data_store = DataStoreV1::open(path, &config.vector_type, OpenReason::Search { prewarm })?;
|
|
54
57
|
// Build the index at runtime if they do not exist. This can
|
|
55
58
|
// be removed once we have migrated all existing indexes
|
|
56
59
|
if !InvertedIndexes::exists(path) {
|
|
@@ -58,7 +61,7 @@ pub fn open(metadata: VectorSegmentMetadata, config: &VectorConfig) -> VectorR<O
|
|
|
58
61
|
}
|
|
59
62
|
Box::new(data_store)
|
|
60
63
|
} else {
|
|
61
|
-
let data_store = DataStoreV2::open(path, &config.vector_type, OpenReason::Search)?;
|
|
64
|
+
let data_store = DataStoreV2::open(path, &config.vector_type, OpenReason::Search { prewarm })?;
|
|
62
65
|
// Build the index at runtime if they do not exist. This can
|
|
63
66
|
// be removed once we have migrated all existing indexes
|
|
64
67
|
if !InvertedIndexes::exists(path) {
|
|
@@ -66,9 +69,13 @@ pub fn open(metadata: VectorSegmentMetadata, config: &VectorConfig) -> VectorR<O
|
|
|
66
69
|
}
|
|
67
70
|
Box::new(data_store)
|
|
68
71
|
};
|
|
69
|
-
let hnsw_file = File::open(path.join(file_names::HNSW))?;
|
|
70
72
|
|
|
71
|
-
let
|
|
73
|
+
let hnsw_file = File::open(path.join(file_names::HNSW))?;
|
|
74
|
+
let mut index_options = MmapOptions::new();
|
|
75
|
+
if prewarm {
|
|
76
|
+
index_options.populate();
|
|
77
|
+
}
|
|
78
|
+
let index = unsafe { index_options.map(&hnsw_file)? };
|
|
72
79
|
|
|
73
80
|
// Telling the OS our expected access pattern
|
|
74
81
|
#[cfg(not(target_os = "windows"))]
|
|
@@ -77,7 +84,7 @@ pub fn open(metadata: VectorSegmentMetadata, config: &VectorConfig) -> VectorR<O
|
|
|
77
84
|
index.advise(memmap2::Advice::WillNeed)?;
|
|
78
85
|
}
|
|
79
86
|
|
|
80
|
-
let inverted_indexes = InvertedIndexes::open(path, metadata.records)?;
|
|
87
|
+
let inverted_indexes = InvertedIndexes::open(path, metadata.records, inverted_index::OpenOptions { prewarm })?;
|
|
81
88
|
let alive_bitset = FilterBitSet::new(metadata.records, true);
|
|
82
89
|
|
|
83
90
|
Ok(OpenSegment {
|
|
@@ -180,8 +187,6 @@ fn merge_indexes<DS: DataStore + 'static>(
|
|
|
180
187
|
index.advise(memmap2::Advice::Random)?;
|
|
181
188
|
}
|
|
182
189
|
|
|
183
|
-
build_indexes(segment_path, &data_store)?;
|
|
184
|
-
|
|
185
190
|
let metadata = VectorSegmentMetadata {
|
|
186
191
|
path: segment_path.to_path_buf(),
|
|
187
192
|
records: data_store.stored_paragraph_count() as usize,
|
|
@@ -191,7 +196,11 @@ fn merge_indexes<DS: DataStore + 'static>(
|
|
|
191
196
|
};
|
|
192
197
|
|
|
193
198
|
build_indexes(segment_path, &data_store)?;
|
|
194
|
-
let inverted_indexes = InvertedIndexes::open(
|
|
199
|
+
let inverted_indexes = InvertedIndexes::open(
|
|
200
|
+
segment_path,
|
|
201
|
+
merged_vectors_count as usize,
|
|
202
|
+
inverted_index::OpenOptions { prewarm: false },
|
|
203
|
+
)?;
|
|
195
204
|
let alive_bitset = FilterBitSet::new(metadata.records, true);
|
|
196
205
|
|
|
197
206
|
Ok(OpenSegment {
|
|
@@ -291,7 +300,11 @@ fn create_indexes<DS: DataStore + 'static>(
|
|
|
291
300
|
};
|
|
292
301
|
|
|
293
302
|
build_indexes(path, &data_store)?;
|
|
294
|
-
let inverted_indexes = InvertedIndexes::open(
|
|
303
|
+
let inverted_indexes = InvertedIndexes::open(
|
|
304
|
+
path,
|
|
305
|
+
vector_count as usize,
|
|
306
|
+
inverted_index::OpenOptions { prewarm: false },
|
|
307
|
+
)?;
|
|
295
308
|
let alive_bitset = FilterBitSet::new(metadata.records, true);
|
|
296
309
|
|
|
297
310
|
Ok(OpenSegment {
|
|
@@ -13,7 +13,7 @@ classifiers = [
|
|
|
13
13
|
"Programming Language :: Python :: Implementation :: CPython",
|
|
14
14
|
"Programming Language :: Python :: Implementation :: PyPy",
|
|
15
15
|
]
|
|
16
|
-
version = "6.9.1.
|
|
16
|
+
version = "6.9.1.post603"
|
|
17
17
|
|
|
18
18
|
[project.urls]
|
|
19
19
|
Homepage = "https://nuclia.com"
|
|
@@ -23,8 +23,6 @@ use std::io::Write;
|
|
|
23
23
|
use std::str::FromStr;
|
|
24
24
|
use std::sync::Arc;
|
|
25
25
|
|
|
26
|
-
use crate::errors::NidxError;
|
|
27
|
-
use crate::metadata::{Index, IndexId, IndexKind, Shard};
|
|
28
26
|
use axum::body::{Body, Bytes};
|
|
29
27
|
use axum::extract::{Path, State};
|
|
30
28
|
use axum::http::StatusCode;
|
|
@@ -41,6 +39,8 @@ use tracing::error;
|
|
|
41
39
|
use uuid::Uuid;
|
|
42
40
|
|
|
43
41
|
use crate::api::shards;
|
|
42
|
+
use crate::errors::NidxError;
|
|
43
|
+
use crate::metadata::{Index, IndexId, IndexKind, Shard};
|
|
44
44
|
use crate::{NidxMetadata, Settings, import_export};
|
|
45
45
|
|
|
46
46
|
#[derive(Clone)]
|
|
@@ -139,6 +139,10 @@ impl NidxApi for ApiServer {
|
|
|
139
139
|
}))
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
+
async fn configure_shards(&self, _request: Request<ShardsConfig>) -> Result<Response<EmptyQuery>> {
|
|
143
|
+
Ok(Response::new(EmptyQuery {}))
|
|
144
|
+
}
|
|
145
|
+
|
|
142
146
|
async fn add_vector_set(&self, request: Request<NewVectorSetRequest>) -> Result<Response<OpStatus>> {
|
|
143
147
|
let request = request.into_inner();
|
|
144
148
|
let Some(VectorSetId {
|
|
@@ -107,6 +107,7 @@ pub async fn download_segment(
|
|
|
107
107
|
|
|
108
108
|
let temp_dir2 = temp_dir.clone();
|
|
109
109
|
let mut tar = tar::Archive::new(reader);
|
|
110
|
+
tar.set_preserve_mtime(false); // We don't care about metadata and we can save a few syscalls
|
|
110
111
|
let result = tokio::task::spawn_blocking(move || tar.unpack(temp_dir2)).await?;
|
|
111
112
|
|
|
112
113
|
if let Err(e) = result {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|