nidx-binding 6.3.5.post246__tar.gz → 6.3.5.post271__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.3.5.post246 → nidx_binding-6.3.5.post271}/PKG-INFO +1 -1
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_protos/pyproject.toml +1 -1
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_text/src/lib.rs +42 -11
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_text/src/reader.rs +5 -82
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_text/src/resource_indexer.rs +4 -9
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_text/src/schema.rs +9 -27
- nidx_binding-6.3.5.post271/nidx_text/tests/test_deletions.rs +89 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/pyproject.toml +1 -1
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/import_export.rs +12 -13
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-0cfce9b29547f8f5bafa6e440f86103be7b8c4ad2fd92db9ac223f4efbe23d10.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-1a561eed00f3dbe868bf5030059793300209179dc8fb73e4b57a54b5e81262fe.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-1d3fca2682e25a01143da92285297f134a6a105a96f64d87e0db3abb219855e4.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-249b3b57c27a71baa823f1fe0f0bba9c9af36f61c28f731e58beea60ec48e687.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-24cb6b683daa42d7125f862e25943ab4be7bf275cd8739f8da4859d701795e1a.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-263c8fce6db5b03bbd012fafdba6943cbee6ed7eb8976cdef4f5b01dde7ca6fd.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-2a5d92fb1638df830a4477a7cdf24e6db6b43034b7bbe74fdfb63e8afe2c4071.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-2b065a363f58caed60e3706603c1260dbf5a4c795604a5b68edda22eb07fec1b.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-3fc3cb39934683de8cd475ce1368c8373453eb1e01f81587d66b9d14b109ce6e.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-48f33b77b7c1633467b0b2efcaa1d3c207e7757e4f1d83b40d15e6ca365f7771.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-4ae09f2c08e2f324bee01bb8487a8f37678a1c5e9d327339235c50d4921a8949.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-4d7a76fa413c9ef0ce2a47ac7bb7e01d3e6a2aabded9487d21010a53efee8852.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-4fcbdd6657c7dc9b60b3a563dd41711b3dbcf72ce063427b7a01f8cddf34c244.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-577109ac00ccfbd38ecaccab94116f2f46a4caf5612afa372cded197123c1e08.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-5db25f97d8578d6d78f2f6bd4b72cc82a9b1b82805c6422d967ac63b20d99db4.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-5ec3233a3a23e926055056d46bdde17836a633066dbb5f349502648cd3ea9a60.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-66edb6ea424d8681927dcddb6bac5f1239175f4775d1f40417ba15054b0c6f19.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-6f9c6d201c1b5712efb68c363bffd3e0169c11f2a8f925e8cd4e8808599ff7b4.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-733c3ebacc86f444bf5e2dd79ade660c291e88a00fc09b722f6e2e191545874c.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-77a245aed9f6f8b9fc643efbd4b1e2e8e99bbba085e3e75a4f29321cd7b2a25c.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-7a3bf27c330c468a596e8a297cf7d8b192e31e67ecc5177c1267f579e8e247c7.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-7a7e59e47b30b12237511fd3d7da2d17b0471ad2b006af48d6a6f587c779692b.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-7dcbb33312cc9f11ae3a6d73b1ace017a9f19a8bf8f10304fc57977c8efeadff.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-7efa7c0d747afc4b6aed0586ff846c27839c3213ff7ee9f30c89b0d0f17e60e3.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-8493140d788604d498a4e48da4158708572ccc9d60185290a00d549cc84533db.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-8493bb0059b013eaca42fd10cd7d04f0d06a8acaed379eff0d23f3229edde9ee.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-87996b3d6c7a2195438d7038015b06949102bce8c7b8cd8db1f83aaf23cbe489.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-8d33717587c6ee8f5fc339a80b1212a73d6c03e45856b1d55457fc8074709dd0.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-8f096d8171b89f9615d18f95d696dc9e4fb3674e103161a713cdc806f7a68506.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-917732a56ee04bf3a6e127319dda8225210869c82f9828d878162394dba4e078.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-95fe4ef93ee90733db1b67ed7987f80b5aac792f1590b979c68b418d1599eb98.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-9b67658569b343d8b4b61ae0a7dc721f367f2ba33c7b69b9e68bfd5c9bff5206.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-9c8062ea55d070afef68309e58fa987eb37fda44e1efbf68c8ba2af7846cc968.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-a06e1d9f6f95e4c4c2b98310ebddcc9d963cc033582bf2e945e8bf3a301b4247.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-a55265c9b07bd1399961a6f1e757201fd0eebe868ddaf96437111113d80fce92.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-a891a37be5c2d7cce775c2dd33726b0318fd3839beab222a1b22bc6174604207.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-a945191bb4b3e37d6823ed3ad499339d007d69983105de8567777d9daf517b28.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-abe9f7832f2bd799ac44008da031e8d8ab52d4f5fbfc2a7e3974e8873bae55b2.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-aca588cca57a85e4d7fcc40c23cd87e57d53d11ca550d78e7e3d5e39e524fcd3.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-b02f8aafc00a7724510772ac41269e368c5bccf03ef7b4590e0ef6fd1a1bf64f.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-b742e17cabe2d64617e9aa64bafc782172f7a4f8023d1b54f952a0fb39f6b2b8.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-b94e349dbc0daec57f8f8f6e9e2dffb06100b1bb2b41d297c9f3b191da37a83d.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-bd9afa22994aba671dbf7b5f89b53c2ee02f53c0442a81265786a6d52d08512f.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-be60554eca98a5899efc6b49785cecd6444a6d39afed9e4a884ce2dbf162012c.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-bf49702b506c9a1650ece1f8e8d9f14834a902f8caefafe30ded55e2790f2188.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-bfcd21ed704cd305db5c17fcdec7d92aa4ac501913c9c9514d8ff92928c0c7e7.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-c3ab694650f49a75b146fb877a92e48c4f20f0d99f70f8ec859fbb763b01a1e5.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-c55542bb9fae544d87fae6f30e0fe8a9088d12075f4442ab4fe2fcd05e472234.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-cb29a6556d35ac630ee0aa885dd7341cf9573bd3efd216ff8a887b87686b03db.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-d0a1f341a89f5f14696b10baa72db9d95551c2b7e5fc67308fd52dc03dd98a92.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-d2ad0a0ca2649c9e4873cfcc1fc66d2d07cc45d0f65c560b06d7b5f592f4fa8a.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-d6cfe78eb635ba0b89ca4021a4dc8182d18ab5b197f30149cd28488eba4c1df5.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-d729b56dea00e49dcdba8cf0001e2811da27351eabe98212db3b589f18fc6f32.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-d9658bfd4e7170b41d03f2ddf2446d0bf54171c0d39d53bf20af2b8437f2ec48.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-dbba7b3d3289425bae711aedbf73fbc3699f857f86f84d95c3b556d05c5658b0.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-dcb96b649d6d63a58efd5d445453a4f3d7869a56ff714b69bedf3d616a0473ca.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-ebd876fbf5362a5900e75bc05f2f11c73c406ef7da4e95097fc6a1c3d1b8bc54.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-eef5cc6bce1cc14eba8f3e68971724ef181e88cffcedd74673615f2026b89a62.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/.sqlx/query-ef56d5fefc5774040d1ee397beadb475f6af02768c22f0e583c74062e2e821ce.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/Cargo.lock +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/Cargo.toml +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/README.md +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/migrations/20241007163501_initial.sql +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/migrations/20241211120039_merge_job_priority.sql +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/migrations/20241211121159_basic_indexes.sql +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/migrations/20241212151105_check_segment_records.sql +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/migrations/20250110145554_in_flight_messages.sql +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_binding/Cargo.toml +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_binding/src/lib.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/Cargo.toml +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/src/fuzzy_query.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/src/lib.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/src/query_io.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/src/reader.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/src/request_types.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/src/resource_indexer.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/src/schema.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/src/search_query.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/src/search_response.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/src/set_query.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/src/stop_words.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/README.md +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/ar.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/az.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/bn.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/ca.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/ch.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/da.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/de.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/el.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/en.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/es.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/eu.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/extract.py +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/fi.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/fr.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/he.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/hu.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/id.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/it.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/kk.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/ne.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/nl.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/no.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/pt.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/ro.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/ru.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/sl.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/sv.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/tg.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/stop_words/tr.json +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/tests/common/mod.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_paragraph/tests/reader.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_protos/Cargo.toml +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_protos/build.py +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_protos/build.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_protos/src/lib.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_protos/src/nidx.proto +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_relation/Cargo.toml +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_relation/src/graph_collector.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_relation/src/graph_query_parser.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_relation/src/io_maps.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_relation/src/lib.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_relation/src/reader.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_relation/src/resource_indexer.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_relation/src/schema.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_relation/src/top_unique_n.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_relation/tests/common/mod.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_relation/tests/test_graph_query_parser_search.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_relation/tests/test_graph_search.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_relation/tests/test_reader.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_relation/tests/test_writer.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_tantivy/Cargo.toml +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_tantivy/src/index_reader.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_tantivy/src/lib.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_tests/Cargo.toml +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_tests/src/graph.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_tests/src/lib.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_text/Cargo.toml +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_text/src/prefilter.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_text/src/query_io.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_text/src/request_types.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_text/src/search_query.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_text/tests/common/mod.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_text/tests/test_flow.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_text/tests/test_search.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_text/tests/test_streaming.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_types/Cargo.toml +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_types/src/lib.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_types/src/prefilter.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_types/src/query_language.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/Cargo.toml +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/config.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/data_point/disk_hnsw.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/data_point/mod.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/data_point/node.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/data_point/ops_hnsw.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/data_point/params.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/data_point/ram_hnsw.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/data_point/tests.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/data_point_provider/mod.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/data_point_provider/reader.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/data_types/data_store.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/data_types/mod.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/data_types/trie.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/data_types/trie_ram.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/formula/mod.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/indexer.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/inverted_index/fst_index.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/inverted_index/map.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/inverted_index.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/lib.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/query_io.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/request_types.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/utils.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/vector_types/dense_f32.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/src/vector_types/mod.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/tests/common/mod.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/tests/test_basic_search.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/nidx_vector/tests/test_hidden.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/api/grpc.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/api/shards.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/api.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/control.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/errors.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/grpc_server.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/indexer.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/lib.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/main.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/metadata/deletion.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/metadata/index.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/metadata/index_request.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/metadata/merge_job.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/metadata/segment.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/metadata/shard.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/metadata.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/metrics.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/scheduler/audit_task.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/scheduler/log_merge.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/scheduler/merge_task.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/scheduler/metrics_task.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/scheduler/purge_tasks.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/scheduler/vector_merge.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/scheduler.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/searcher/grpc.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/searcher/index_cache.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/searcher/query_language.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/searcher/query_planner.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/searcher/shard_search.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/searcher/shard_selector.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/searcher/shard_suggest.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/searcher/streams.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/searcher/sync.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/searcher.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/segment_store.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/settings.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/telemetry/duration_layer.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/telemetry/log_format.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/telemetry/middleware.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/telemetry.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/tool.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/utilization_tracker.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/src/worker.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/tests/common/mod.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/tests/common/services.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/tests/test_date_range_search.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/tests/test_search_filtering.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/tests/test_search_relations.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/tests/test_search_sorting.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/tests/test_searcher_cluster.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/tests/test_security_search.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/tests/test_shards.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/tests/test_shards_api.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/tests/test_suggest.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/tests/test_synced_searcher.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/tests/test_vector_normalization.rs +0 -0
- {nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/tests/test_vectorsets.rs +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: nidx_binding
|
3
|
-
Version: 6.3.5.
|
3
|
+
Version: 6.3.5.post271
|
4
4
|
Classifier: Programming Language :: Rust
|
5
5
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
6
6
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
@@ -4,7 +4,7 @@ build-backend = "pdm.backend"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "nidx_protos"
|
7
|
-
version = "6.3.5.
|
7
|
+
version = "6.3.5.post271"
|
8
8
|
license = { text = "AGPL" }
|
9
9
|
description = "Protobuf definitions for nucliadb/nidx"
|
10
10
|
authors = [ { name = "Nuclia", email = "nucliadb@nuclia.com" }]
|
@@ -37,7 +37,7 @@ use prefilter::PreFilterRequest;
|
|
37
37
|
use reader::TextReaderService;
|
38
38
|
use resource_indexer::index_document;
|
39
39
|
use schema::TextSchema;
|
40
|
-
|
40
|
+
use schema::encode_field_id_bytes;
|
41
41
|
use serde::{Deserialize, Serialize};
|
42
42
|
use tantivy::indexer::merge_indices;
|
43
43
|
use tantivy::schema::Field;
|
@@ -46,7 +46,8 @@ use tantivy::{
|
|
46
46
|
directory::MmapDirectory,
|
47
47
|
query::{Query, TermSetQuery},
|
48
48
|
};
|
49
|
-
use tracing
|
49
|
+
use tracing::*;
|
50
|
+
use uuid::Uuid;
|
50
51
|
|
51
52
|
pub use request_types::DocumentSearchRequest;
|
52
53
|
|
@@ -74,12 +75,38 @@ fn default_version() -> u64 {
|
|
74
75
|
|
75
76
|
pub struct TextIndexer;
|
76
77
|
|
77
|
-
pub struct TextDeletionQueryBuilder
|
78
|
+
pub struct TextDeletionQueryBuilder {
|
79
|
+
resource_uuid: Field,
|
80
|
+
encoded_field_id_bytes: Field,
|
81
|
+
}
|
78
82
|
impl DeletionQueryBuilder for TextDeletionQueryBuilder {
|
79
83
|
fn query<'a>(&self, keys: impl Iterator<Item = &'a String>) -> Box<dyn Query> {
|
80
|
-
Box::new(TermSetQuery::new(
|
81
|
-
keys
|
82
|
-
|
84
|
+
Box::new(TermSetQuery::new(keys.filter_map(|k| {
|
85
|
+
// Our keys can be resource ids or encoded field ids (e.g: uuid/t/text)
|
86
|
+
// match the corresponding tantivy field
|
87
|
+
let is_field = k.len() > 32;
|
88
|
+
if is_field {
|
89
|
+
let Ok(uuid) = Uuid::parse_str(&k[0..32]) else {
|
90
|
+
error!(?k, "Invalid deletion key in nidx_text");
|
91
|
+
return None;
|
92
|
+
};
|
93
|
+
let field_id = &k[33..];
|
94
|
+
Some(Term::from_field_bytes(
|
95
|
+
self.encoded_field_id_bytes,
|
96
|
+
&encode_field_id_bytes(uuid, field_id)[..],
|
97
|
+
))
|
98
|
+
} else {
|
99
|
+
Some(Term::from_field_bytes(self.resource_uuid, k.as_bytes()))
|
100
|
+
}
|
101
|
+
})))
|
102
|
+
}
|
103
|
+
}
|
104
|
+
impl TextDeletionQueryBuilder {
|
105
|
+
fn new(schema: &TextSchema) -> Self {
|
106
|
+
TextDeletionQueryBuilder {
|
107
|
+
resource_uuid: schema.schema.get_field("uuid").unwrap(),
|
108
|
+
encoded_field_id_bytes: schema.schema.get_field("encoded_field_id_bytes").unwrap(),
|
109
|
+
}
|
83
110
|
}
|
84
111
|
}
|
85
112
|
|
@@ -99,7 +126,7 @@ impl TextIndexer {
|
|
99
126
|
}
|
100
127
|
|
101
128
|
pub fn deletions_for_resource(&self, resource: &nidx_protos::Resource) -> Vec<String> {
|
102
|
-
|
129
|
+
resource.texts_to_delete.clone()
|
103
130
|
}
|
104
131
|
|
105
132
|
#[instrument(name = "text::merge", skip_all)]
|
@@ -109,8 +136,9 @@ impl TextIndexer {
|
|
109
136
|
config: TextConfig,
|
110
137
|
open_index: impl OpenIndexMetadata<TantivyMeta>,
|
111
138
|
) -> anyhow::Result<TantivySegmentMetadata> {
|
112
|
-
let
|
113
|
-
let query_builder = TextDeletionQueryBuilder(
|
139
|
+
let text_schema = TextSchema::new(config.version);
|
140
|
+
let query_builder = TextDeletionQueryBuilder::new(&text_schema);
|
141
|
+
let schema = text_schema.clone().schema;
|
114
142
|
let index = open_index_with_deletions(schema, open_index, query_builder)?;
|
115
143
|
|
116
144
|
let output_index = merge_indices(&[index], MmapDirectory::open(work_dir)?)?;
|
@@ -134,8 +162,11 @@ impl TextSearcher {
|
|
134
162
|
#[instrument(name = "text::open", skip_all)]
|
135
163
|
pub fn open(config: TextConfig, open_index: impl OpenIndexMetadata<TantivyMeta>) -> anyhow::Result<Self> {
|
136
164
|
let schema = TextSchema::new(config.version);
|
137
|
-
let index =
|
138
|
-
|
165
|
+
let index = open_index_with_deletions(
|
166
|
+
schema.schema.clone(),
|
167
|
+
open_index,
|
168
|
+
TextDeletionQueryBuilder::new(&schema),
|
169
|
+
)?;
|
139
170
|
|
140
171
|
Ok(Self {
|
141
172
|
reader: TextReaderService {
|
@@ -35,14 +35,12 @@ use nidx_protos::{
|
|
35
35
|
};
|
36
36
|
use nidx_types::prefilter::{FieldId, PrefilterResult};
|
37
37
|
use tantivy::collector::{Collector, Count, FacetCollector, FacetCounts, SegmentCollector, TopDocs};
|
38
|
-
use tantivy::columnar::
|
39
|
-
use tantivy::fastfield::FacetReader;
|
38
|
+
use tantivy::columnar::Column;
|
40
39
|
use tantivy::query::{AllQuery, BooleanQuery, Query, QueryParser, TermQuery};
|
41
40
|
use tantivy::schema::Value;
|
42
41
|
use tantivy::schema::*;
|
43
42
|
use tantivy::{DocAddress, Index, IndexReader, Searcher};
|
44
43
|
use tracing::*;
|
45
|
-
use uuid::Uuid;
|
46
44
|
|
47
45
|
fn facet_count(facet: &str, facets_count: &FacetCounts) -> Vec<FacetResult> {
|
48
46
|
facets_count
|
@@ -90,78 +88,6 @@ impl Debug for TextReaderService {
|
|
90
88
|
}
|
91
89
|
}
|
92
90
|
|
93
|
-
struct FieldUuidSegmentCollector {
|
94
|
-
uuid_reader: BytesColumn,
|
95
|
-
field_reader: FacetReader,
|
96
|
-
results: Vec<FieldId>,
|
97
|
-
}
|
98
|
-
|
99
|
-
impl SegmentCollector for FieldUuidSegmentCollector {
|
100
|
-
type Fruit = Vec<FieldId>;
|
101
|
-
|
102
|
-
fn collect(&mut self, doc: tantivy::DocId, _score: tantivy::Score) {
|
103
|
-
let uuid_ord = self.uuid_reader.term_ords(doc).next().unwrap();
|
104
|
-
let mut uuid_bytes = Vec::new();
|
105
|
-
self.uuid_reader.ord_to_bytes(uuid_ord, &mut uuid_bytes).unwrap();
|
106
|
-
|
107
|
-
let mut facet_ords = self.field_reader.facet_ords(doc);
|
108
|
-
let mut facet = Facet::root();
|
109
|
-
self.field_reader
|
110
|
-
.facet_from_ord(facet_ords.next().unwrap(), &mut facet)
|
111
|
-
.expect("field facet not found");
|
112
|
-
|
113
|
-
if let Ok(resource_id) = Uuid::parse_str(std::str::from_utf8(&uuid_bytes).unwrap()) {
|
114
|
-
self.results.push(FieldId {
|
115
|
-
resource_id,
|
116
|
-
field_id: facet.to_path_string(),
|
117
|
-
});
|
118
|
-
}
|
119
|
-
}
|
120
|
-
|
121
|
-
fn harvest(self) -> Self::Fruit {
|
122
|
-
self.results
|
123
|
-
}
|
124
|
-
}
|
125
|
-
|
126
|
-
struct FieldUuidCollector;
|
127
|
-
|
128
|
-
impl Collector for FieldUuidCollector {
|
129
|
-
type Fruit = Vec<FieldId>;
|
130
|
-
|
131
|
-
type Child = FieldUuidSegmentCollector;
|
132
|
-
|
133
|
-
fn for_segment(
|
134
|
-
&self,
|
135
|
-
_segment_local_id: tantivy::SegmentOrdinal,
|
136
|
-
segment: &tantivy::SegmentReader,
|
137
|
-
) -> tantivy::Result<Self::Child> {
|
138
|
-
let uuid_reader = segment.fast_fields().bytes("uuid")?.unwrap();
|
139
|
-
let field_reader = segment.facet_reader("field")?;
|
140
|
-
Ok(FieldUuidSegmentCollector {
|
141
|
-
uuid_reader,
|
142
|
-
field_reader,
|
143
|
-
results: vec![],
|
144
|
-
})
|
145
|
-
}
|
146
|
-
|
147
|
-
fn requires_scoring(&self) -> bool {
|
148
|
-
false
|
149
|
-
}
|
150
|
-
|
151
|
-
fn merge_fruits(
|
152
|
-
&self,
|
153
|
-
segment_fruits: Vec<<Self::Child as tantivy::collector::SegmentCollector>::Fruit>,
|
154
|
-
) -> tantivy::Result<Self::Fruit> {
|
155
|
-
Ok(segment_fruits
|
156
|
-
.into_iter()
|
157
|
-
.reduce(|mut a, mut b| {
|
158
|
-
a.append(&mut b);
|
159
|
-
a
|
160
|
-
})
|
161
|
-
.unwrap_or_default())
|
162
|
-
}
|
163
|
-
}
|
164
|
-
|
165
91
|
struct FieldUuidSegmentCollectorV2 {
|
166
92
|
encoded_field_id_reader: Column,
|
167
93
|
results: Vec<FieldId>,
|
@@ -186,9 +112,9 @@ impl SegmentCollector for FieldUuidSegmentCollectorV2 {
|
|
186
112
|
}
|
187
113
|
}
|
188
114
|
|
189
|
-
struct
|
115
|
+
struct FieldUuidCollector;
|
190
116
|
|
191
|
-
impl Collector for
|
117
|
+
impl Collector for FieldUuidCollector {
|
192
118
|
type Fruit = Vec<FieldId>;
|
193
119
|
|
194
120
|
type Child = FieldUuidSegmentCollectorV2;
|
@@ -263,11 +189,8 @@ impl TextReaderService {
|
|
263
189
|
|
264
190
|
let prefilter_query: Box<dyn Query> = Box::new(BooleanQuery::intersection(subqueries));
|
265
191
|
let searcher = self.reader.searcher();
|
266
|
-
let docs_fulfilled =
|
267
|
-
|
268
|
-
} else {
|
269
|
-
searcher.search(&prefilter_query, &FieldUuidCollector)?
|
270
|
-
};
|
192
|
+
let docs_fulfilled = searcher.search(&prefilter_query, &FieldUuidCollector)?;
|
193
|
+
|
271
194
|
// If none of the fields match the pre-filter, thats all the query planner needs to know.
|
272
195
|
if docs_fulfilled.is_empty() {
|
273
196
|
return Ok(PrefilterResult::None);
|
@@ -80,16 +80,11 @@ pub fn index_document(
|
|
80
80
|
field_doc.add_facet(schema.field, facet_field);
|
81
81
|
field_doc.add_text(schema.text, &text_info.text);
|
82
82
|
|
83
|
-
|
84
|
-
|
85
|
-
field_doc.add_u64(encoded_field_id, d);
|
86
|
-
}
|
87
|
-
}
|
88
|
-
|
89
|
-
if let Some(encoded_field_id_bytes) = schema.encoded_field_id_bytes {
|
90
|
-
let encoded = encode_field_id_bytes(resource_uuid, field);
|
91
|
-
field_doc.add_bytes(encoded_field_id_bytes, encoded.as_slice());
|
83
|
+
for d in encode_field_id(resource_uuid, &format!("/{field}")) {
|
84
|
+
field_doc.add_u64(schema.encoded_field_id, d);
|
92
85
|
}
|
86
|
+
let encoded = encode_field_id_bytes(resource_uuid, field);
|
87
|
+
field_doc.add_bytes(schema.encoded_field_id_bytes, encoded.as_slice());
|
93
88
|
|
94
89
|
for label in text_info.labels.iter() {
|
95
90
|
let facet = Facet::from(label.as_str());
|
@@ -45,8 +45,8 @@ pub struct TextSchema {
|
|
45
45
|
pub groups_public: Field,
|
46
46
|
pub groups_with_access: Field,
|
47
47
|
|
48
|
-
pub encoded_field_id:
|
49
|
-
pub encoded_field_id_bytes:
|
48
|
+
pub encoded_field_id: Field,
|
49
|
+
pub encoded_field_id_bytes: Field,
|
50
50
|
}
|
51
51
|
|
52
52
|
pub fn timestamp_to_datetime_utc(timestamp: &nidx_protos::prost_types::Timestamp) -> DateTime {
|
@@ -54,7 +54,7 @@ pub fn timestamp_to_datetime_utc(timestamp: &nidx_protos::prost_types::Timestamp
|
|
54
54
|
}
|
55
55
|
|
56
56
|
impl TextSchema {
|
57
|
-
pub fn new(
|
57
|
+
pub fn new(_version: u64) -> Self {
|
58
58
|
let mut sb = Schema::builder();
|
59
59
|
let num_options: NumericOptions = NumericOptions::default().set_indexed().set_fast();
|
60
60
|
|
@@ -81,30 +81,12 @@ impl TextSchema {
|
|
81
81
|
let groups_public = sb.add_u64_field("groups_public", num_options);
|
82
82
|
let groups_with_access = sb.add_facet_field("groups_with_access", facet_options);
|
83
83
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
// v3: Field ID encoded as array of u64 for faster retrieval during prefilter
|
91
|
-
// Using a bytes field is slow due to tantivy's implementation being slow with many unique values.
|
92
|
-
// A better implementation is tracked in https://github.com/quickwit-oss/tantivy/issues/2090
|
93
|
-
// The INDEXED flag is unnecessary here, and this is backwards compatible code until we remove it in v4.
|
94
|
-
Some(sb.add_u64_field("encoded_field_id", FAST | INDEXED))
|
95
|
-
} else if version == 2 {
|
96
|
-
// v2 did not have the field indexed
|
97
|
-
Some(sb.add_u64_field("encoded_field_id", FAST))
|
98
|
-
} else {
|
99
|
-
None
|
100
|
-
};
|
101
|
-
|
102
|
-
let encoded_field_id_bytes = if version >= 4 {
|
103
|
-
// v4: Field ID encoded as array of u8 for faster deletions
|
104
|
-
Some(sb.add_bytes_field("encoded_field_id_bytes", INDEXED))
|
105
|
-
} else {
|
106
|
-
None
|
107
|
-
};
|
84
|
+
// v4: Field ID encoded as array of u64 for faster retrieval during prefilter
|
85
|
+
// Using a bytes field is slow due to tantivy's implementation being slow with many unique values.
|
86
|
+
// A better implementation is tracked in https://github.com/quickwit-oss/tantivy/issues/2090
|
87
|
+
let encoded_field_id = sb.add_u64_field("encoded_field_id", FAST);
|
88
|
+
// v4: Field ID encoded as array of u8 for faster deletions
|
89
|
+
let encoded_field_id_bytes = sb.add_bytes_field("encoded_field_id_bytes", INDEXED);
|
108
90
|
|
109
91
|
let schema = sb.build();
|
110
92
|
|
@@ -0,0 +1,89 @@
|
|
1
|
+
// Copyright (C) 2021 Bosutech XXI S.L.
|
2
|
+
//
|
3
|
+
// nucliadb is offered under the AGPL v3.0 and as commercial software.
|
4
|
+
// For commercial licensing, contact us at info@nuclia.com.
|
5
|
+
//
|
6
|
+
// AGPL:
|
7
|
+
// This program is free software: you can redistribute it and/or modify
|
8
|
+
// it under the terms of the GNU Affero General Public License as
|
9
|
+
// published by the Free Software Foundation, either version 3 of the
|
10
|
+
// License, or (at your option) any later version.
|
11
|
+
//
|
12
|
+
// This program is distributed in the hope that it will be useful,
|
13
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
// GNU Affero General Public License for more details.
|
16
|
+
//
|
17
|
+
// You should have received a copy of the GNU Affero General Public License
|
18
|
+
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
+
//
|
20
|
+
|
21
|
+
mod common;
|
22
|
+
use common::TestOpener;
|
23
|
+
use nidx_protos::TextInformation;
|
24
|
+
use nidx_tests::minimal_resource;
|
25
|
+
use nidx_text::{DocumentSearchRequest, TextConfig, TextIndexer, TextSearcher};
|
26
|
+
use tempfile::tempdir;
|
27
|
+
|
28
|
+
#[test]
|
29
|
+
fn test_texts_deletions() -> anyhow::Result<()> {
|
30
|
+
// Create a resource with a couple of fields
|
31
|
+
let mut resource = minimal_resource("shard".to_string());
|
32
|
+
resource.texts.insert(
|
33
|
+
"a/title".to_string(),
|
34
|
+
TextInformation {
|
35
|
+
text: "The little prince".to_string(),
|
36
|
+
..Default::default()
|
37
|
+
},
|
38
|
+
);
|
39
|
+
resource.texts.insert(
|
40
|
+
"a/summary".to_string(),
|
41
|
+
TextInformation {
|
42
|
+
text: "A story about a little prince".to_string(),
|
43
|
+
..Default::default()
|
44
|
+
},
|
45
|
+
);
|
46
|
+
let rid = resource.resource.clone().unwrap().uuid.clone();
|
47
|
+
let segment_dir = tempdir()?;
|
48
|
+
let meta1 = TextIndexer
|
49
|
+
.index_resource(segment_dir.path(), TextConfig::default(), &resource)?
|
50
|
+
.unwrap();
|
51
|
+
|
52
|
+
// Search to validate that both fields are indexed
|
53
|
+
let searcher = TextSearcher::open(
|
54
|
+
TextConfig::default(),
|
55
|
+
TestOpener::new(vec![(meta1.clone(), 1i64.into())], vec![]),
|
56
|
+
)?;
|
57
|
+
let result = searcher.search(&DocumentSearchRequest {
|
58
|
+
result_per_page: 20,
|
59
|
+
..Default::default()
|
60
|
+
})?;
|
61
|
+
assert_eq!(result.results.len(), 2);
|
62
|
+
|
63
|
+
// Search with resource deletion
|
64
|
+
let searcher = TextSearcher::open(
|
65
|
+
TextConfig::default(),
|
66
|
+
TestOpener::new(vec![(meta1.clone(), 1i64.into())], vec![(rid.clone(), 2i64.into())]),
|
67
|
+
)?;
|
68
|
+
let result = searcher.search(&DocumentSearchRequest {
|
69
|
+
result_per_page: 20,
|
70
|
+
..Default::default()
|
71
|
+
})?;
|
72
|
+
assert_eq!(result.results.len(), 0);
|
73
|
+
|
74
|
+
// Search with field deletion
|
75
|
+
let searcher = TextSearcher::open(
|
76
|
+
TextConfig::default(),
|
77
|
+
TestOpener::new(
|
78
|
+
vec![(meta1.clone(), 1i64.into())],
|
79
|
+
vec![(format!("{rid}/a/title"), 2i64.into())],
|
80
|
+
),
|
81
|
+
)?;
|
82
|
+
let result = searcher.search(&DocumentSearchRequest {
|
83
|
+
result_per_page: 20,
|
84
|
+
..Default::default()
|
85
|
+
})?;
|
86
|
+
assert_eq!(result.results.len(), 1);
|
87
|
+
|
88
|
+
Ok(())
|
89
|
+
}
|
@@ -13,7 +13,7 @@ classifiers = [
|
|
13
13
|
"Programming Language :: Python :: Implementation :: CPython",
|
14
14
|
"Programming Language :: Python :: Implementation :: PyPy",
|
15
15
|
]
|
16
|
-
version = "6.3.5.
|
16
|
+
version = "6.3.5.post271"
|
17
17
|
|
18
18
|
[project.urls]
|
19
19
|
Homepage = "https://nuclia.com"
|
@@ -306,12 +306,15 @@ mod tests {
|
|
306
306
|
);
|
307
307
|
|
308
308
|
let storage_source = Arc::new(object_store::memory::InMemory::new());
|
309
|
+
let mut resource = little_prince(kbid.to_string(), None);
|
310
|
+
// Add some random deletions to test the import
|
311
|
+
resource.paragraphs_to_delete.push("1".to_string());
|
309
312
|
index_resource(
|
310
313
|
&meta_source,
|
311
314
|
storage_source.clone(),
|
312
315
|
&tempfile::env::temp_dir(),
|
313
316
|
&shard.id.to_string(),
|
314
|
-
|
317
|
+
resource.clone(),
|
315
318
|
123i64.into(),
|
316
319
|
)
|
317
320
|
.await?;
|
@@ -323,12 +326,10 @@ mod tests {
|
|
323
326
|
.await?,
|
324
327
|
3
|
325
328
|
);
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
1
|
331
|
-
);
|
329
|
+
let deletions_count = sqlx::query_scalar!("SELECT COUNT(*) AS \"cnt!\" FROM deletions")
|
330
|
+
.fetch_one(&meta_source.pool)
|
331
|
+
.await?;
|
332
|
+
assert!(deletions_count >= 1, "Expected at least one deletion");
|
332
333
|
|
333
334
|
// Create destination DB
|
334
335
|
let config_dest = Postgres::test_context(&TestArgs::new("test_export_and_import_dest")).await?;
|
@@ -346,12 +347,10 @@ mod tests {
|
|
346
347
|
let shard_dest = Shard::get(&meta_dest.pool, shard.id).await?;
|
347
348
|
assert_eq!(shard_dest.kbid, shard.kbid);
|
348
349
|
assert_eq!(Index::for_shard(&meta_dest.pool, shard.id).await?.len(), 3);
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
1
|
354
|
-
);
|
350
|
+
let after_deletions_count = sqlx::query_scalar!("SELECT COUNT(*) AS \"cnt!\" FROM deletions")
|
351
|
+
.fetch_one(&meta_dest.pool)
|
352
|
+
.await?;
|
353
|
+
assert_eq!(after_deletions_count, deletions_count);
|
355
354
|
|
356
355
|
let all_segments = Segment::in_indexes(&meta_dest.pool, &index_ids).await?;
|
357
356
|
assert_eq!(all_segments.len(), 3);
|
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
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{nidx_binding-6.3.5.post246 → nidx_binding-6.3.5.post271}/migrations/20241007163501_initial.sql
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|