nidx-binding 6.3.4.post178__tar.gz → 6.3.4.post183__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.4.post178 → nidx_binding-6.3.4.post183}/PKG-INFO +1 -1
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_protos/pyproject.toml +1 -1
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_relation/src/reader.rs +6 -134
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_relation/tests/test_reader.rs +1 -130
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_text/src/schema.rs +1 -1
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/pyproject.toml +1 -1
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/searcher/query_planner.rs +1 -4
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/tests/test_search_relations.rs +13 -194
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-0cfce9b29547f8f5bafa6e440f86103be7b8c4ad2fd92db9ac223f4efbe23d10.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-1a561eed00f3dbe868bf5030059793300209179dc8fb73e4b57a54b5e81262fe.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-1d3fca2682e25a01143da92285297f134a6a105a96f64d87e0db3abb219855e4.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-249b3b57c27a71baa823f1fe0f0bba9c9af36f61c28f731e58beea60ec48e687.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-24cb6b683daa42d7125f862e25943ab4be7bf275cd8739f8da4859d701795e1a.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-263c8fce6db5b03bbd012fafdba6943cbee6ed7eb8976cdef4f5b01dde7ca6fd.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-2a5d92fb1638df830a4477a7cdf24e6db6b43034b7bbe74fdfb63e8afe2c4071.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-2b065a363f58caed60e3706603c1260dbf5a4c795604a5b68edda22eb07fec1b.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-3fc3cb39934683de8cd475ce1368c8373453eb1e01f81587d66b9d14b109ce6e.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-48f33b77b7c1633467b0b2efcaa1d3c207e7757e4f1d83b40d15e6ca365f7771.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-4ae09f2c08e2f324bee01bb8487a8f37678a1c5e9d327339235c50d4921a8949.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-4d7a76fa413c9ef0ce2a47ac7bb7e01d3e6a2aabded9487d21010a53efee8852.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-4fcbdd6657c7dc9b60b3a563dd41711b3dbcf72ce063427b7a01f8cddf34c244.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-577109ac00ccfbd38ecaccab94116f2f46a4caf5612afa372cded197123c1e08.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-5db25f97d8578d6d78f2f6bd4b72cc82a9b1b82805c6422d967ac63b20d99db4.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-5ec3233a3a23e926055056d46bdde17836a633066dbb5f349502648cd3ea9a60.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-66edb6ea424d8681927dcddb6bac5f1239175f4775d1f40417ba15054b0c6f19.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-6f9c6d201c1b5712efb68c363bffd3e0169c11f2a8f925e8cd4e8808599ff7b4.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-733c3ebacc86f444bf5e2dd79ade660c291e88a00fc09b722f6e2e191545874c.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-77a245aed9f6f8b9fc643efbd4b1e2e8e99bbba085e3e75a4f29321cd7b2a25c.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-7a3bf27c330c468a596e8a297cf7d8b192e31e67ecc5177c1267f579e8e247c7.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-7a7e59e47b30b12237511fd3d7da2d17b0471ad2b006af48d6a6f587c779692b.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-7dcbb33312cc9f11ae3a6d73b1ace017a9f19a8bf8f10304fc57977c8efeadff.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-7efa7c0d747afc4b6aed0586ff846c27839c3213ff7ee9f30c89b0d0f17e60e3.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-8493140d788604d498a4e48da4158708572ccc9d60185290a00d549cc84533db.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-8493bb0059b013eaca42fd10cd7d04f0d06a8acaed379eff0d23f3229edde9ee.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-87996b3d6c7a2195438d7038015b06949102bce8c7b8cd8db1f83aaf23cbe489.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-8f096d8171b89f9615d18f95d696dc9e4fb3674e103161a713cdc806f7a68506.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-917732a56ee04bf3a6e127319dda8225210869c82f9828d878162394dba4e078.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-95fe4ef93ee90733db1b67ed7987f80b5aac792f1590b979c68b418d1599eb98.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-9b67658569b343d8b4b61ae0a7dc721f367f2ba33c7b69b9e68bfd5c9bff5206.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-9c8062ea55d070afef68309e58fa987eb37fda44e1efbf68c8ba2af7846cc968.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-a06e1d9f6f95e4c4c2b98310ebddcc9d963cc033582bf2e945e8bf3a301b4247.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-a55265c9b07bd1399961a6f1e757201fd0eebe868ddaf96437111113d80fce92.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-a891a37be5c2d7cce775c2dd33726b0318fd3839beab222a1b22bc6174604207.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-a945191bb4b3e37d6823ed3ad499339d007d69983105de8567777d9daf517b28.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-abe9f7832f2bd799ac44008da031e8d8ab52d4f5fbfc2a7e3974e8873bae55b2.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-aca588cca57a85e4d7fcc40c23cd87e57d53d11ca550d78e7e3d5e39e524fcd3.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-b02f8aafc00a7724510772ac41269e368c5bccf03ef7b4590e0ef6fd1a1bf64f.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-b742e17cabe2d64617e9aa64bafc782172f7a4f8023d1b54f952a0fb39f6b2b8.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-b94e349dbc0daec57f8f8f6e9e2dffb06100b1bb2b41d297c9f3b191da37a83d.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-bd9afa22994aba671dbf7b5f89b53c2ee02f53c0442a81265786a6d52d08512f.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-be60554eca98a5899efc6b49785cecd6444a6d39afed9e4a884ce2dbf162012c.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-bf49702b506c9a1650ece1f8e8d9f14834a902f8caefafe30ded55e2790f2188.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-bfb8ae2e860e451b0868a7b1b50a451d998b2105f9fdfd307b26a1775d145e9f.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-bfcd21ed704cd305db5c17fcdec7d92aa4ac501913c9c9514d8ff92928c0c7e7.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-c3ab694650f49a75b146fb877a92e48c4f20f0d99f70f8ec859fbb763b01a1e5.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-c55542bb9fae544d87fae6f30e0fe8a9088d12075f4442ab4fe2fcd05e472234.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-cb29a6556d35ac630ee0aa885dd7341cf9573bd3efd216ff8a887b87686b03db.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-d0a1f341a89f5f14696b10baa72db9d95551c2b7e5fc67308fd52dc03dd98a92.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-d2ad0a0ca2649c9e4873cfcc1fc66d2d07cc45d0f65c560b06d7b5f592f4fa8a.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-d6cfe78eb635ba0b89ca4021a4dc8182d18ab5b197f30149cd28488eba4c1df5.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-d729b56dea00e49dcdba8cf0001e2811da27351eabe98212db3b589f18fc6f32.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-d9658bfd4e7170b41d03f2ddf2446d0bf54171c0d39d53bf20af2b8437f2ec48.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-dbba7b3d3289425bae711aedbf73fbc3699f857f86f84d95c3b556d05c5658b0.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-dcb96b649d6d63a58efd5d445453a4f3d7869a56ff714b69bedf3d616a0473ca.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-ebd876fbf5362a5900e75bc05f2f11c73c406ef7da4e95097fc6a1c3d1b8bc54.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-eef5cc6bce1cc14eba8f3e68971724ef181e88cffcedd74673615f2026b89a62.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/.sqlx/query-ef56d5fefc5774040d1ee397beadb475f6af02768c22f0e583c74062e2e821ce.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/Cargo.lock +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/Cargo.toml +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/README.md +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/migrations/20241007163501_initial.sql +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/migrations/20241211120039_merge_job_priority.sql +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/migrations/20241211121159_basic_indexes.sql +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/migrations/20241212151105_check_segment_records.sql +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/migrations/20250110145554_in_flight_messages.sql +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_binding/Cargo.toml +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_binding/src/lib.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/Cargo.toml +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/src/fuzzy_query.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/src/lib.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/src/query_io.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/src/reader.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/src/request_types.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/src/resource_indexer.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/src/schema.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/src/search_query.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/src/search_response.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/src/set_query.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/src/stop_words.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/README.md +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/ar.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/az.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/bn.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/ca.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/ch.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/da.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/de.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/el.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/en.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/es.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/eu.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/extract.py +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/fi.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/fr.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/he.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/hu.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/id.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/it.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/kk.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/ne.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/nl.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/no.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/pt.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/ro.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/ru.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/sl.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/sv.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/tg.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/stop_words/tr.json +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/tests/common/mod.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_paragraph/tests/reader.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_protos/Cargo.toml +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_protos/build.py +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_protos/build.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_protos/src/lib.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_protos/src/nidx.proto +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_relation/Cargo.toml +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_relation/src/graph_collector.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_relation/src/graph_query_parser.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_relation/src/io_maps.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_relation/src/lib.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_relation/src/resource_indexer.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_relation/src/schema.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_relation/src/top_unique_n.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_relation/tests/common/mod.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_relation/tests/test_graph_query_parser_search.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_relation/tests/test_graph_search.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_relation/tests/test_writer.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_tantivy/Cargo.toml +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_tantivy/src/index_reader.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_tantivy/src/lib.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_tests/Cargo.toml +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_tests/src/graph.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_tests/src/lib.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_text/Cargo.toml +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_text/src/lib.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_text/src/prefilter.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_text/src/query_io.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_text/src/reader.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_text/src/request_types.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_text/src/resource_indexer.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_text/src/search_query.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_text/tests/common/mod.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_text/tests/test_flow.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_text/tests/test_search.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_text/tests/test_streaming.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_types/Cargo.toml +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_types/src/lib.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_types/src/prefilter.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_types/src/query_language.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/Cargo.toml +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/config.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/data_point/disk_hnsw.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/data_point/mod.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/data_point/node.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/data_point/ops_hnsw.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/data_point/params.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/data_point/ram_hnsw.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/data_point/tests.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/data_point_provider/mod.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/data_point_provider/reader.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/data_types/data_store.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/data_types/mod.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/data_types/trie.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/data_types/trie_ram.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/formula/mod.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/indexer.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/inverted_index/fst_index.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/inverted_index/map.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/inverted_index.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/lib.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/query_io.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/request_types.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/utils.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/vector_types/dense_f32.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/src/vector_types/mod.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/tests/common/mod.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/tests/test_basic_search.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_vector/tests/test_hidden.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/api/grpc.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/api/shards.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/api.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/control.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/errors.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/grpc_server.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/import_export.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/indexer.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/lib.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/main.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/metadata/deletion.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/metadata/index.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/metadata/index_request.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/metadata/merge_job.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/metadata/segment.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/metadata/shard.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/metadata.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/metrics.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/scheduler/audit_task.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/scheduler/log_merge.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/scheduler/merge_task.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/scheduler/metrics_task.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/scheduler/purge_tasks.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/scheduler/vector_merge.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/scheduler.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/searcher/grpc.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/searcher/index_cache.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/searcher/query_language.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/searcher/shard_search.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/searcher/shard_selector.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/searcher/shard_suggest.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/searcher/streams.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/searcher/sync.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/searcher.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/segment_store.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/settings.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/telemetry/duration_layer.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/telemetry/log_format.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/telemetry/middleware.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/telemetry.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/tool.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/src/worker.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/tests/common/mod.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/tests/common/services.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/tests/test_date_range_search.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/tests/test_search_filtering.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/tests/test_search_sorting.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/tests/test_searcher_cluster.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/tests/test_security_search.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/tests/test_shards.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/tests/test_shards_api.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/tests/test_suggest.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/tests/test_synced_searcher.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/tests/test_vector_normalization.rs +0 -0
- {nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/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.4.
|
3
|
+
Version: 6.3.4.post183
|
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.4.
|
7
|
+
version = "6.3.4.post183"
|
8
8
|
license = { text = "AGPL" }
|
9
9
|
description = "Protobuf definitions for nucliadb/nidx"
|
10
10
|
authors = [ { name = "Nuclia", email = "nucliadb@nuclia.com" }]
|
@@ -17,15 +17,13 @@
|
|
17
17
|
// You should have received a copy of the GNU Affero General Public License
|
18
18
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
19
|
//
|
20
|
-
use std::collections::HashSet;
|
21
20
|
use std::fmt::Debug;
|
22
21
|
use std::path::Path;
|
23
22
|
|
24
23
|
use nidx_protos::graph_search_request::QueryKind;
|
25
|
-
use nidx_protos::relation_prefix_search_request::Search;
|
26
24
|
use nidx_protos::{
|
27
|
-
EntitiesSubgraphResponse, GraphSearchRequest, GraphSearchResponse, RelationNode,
|
28
|
-
|
25
|
+
EntitiesSubgraphResponse, GraphSearchRequest, GraphSearchResponse, RelationNode, RelationSearchRequest,
|
26
|
+
RelationSearchResponse,
|
29
27
|
};
|
30
28
|
use nidx_types::prefilter::{FieldId, PrefilterResult};
|
31
29
|
use tantivy::collector::TopDocs;
|
@@ -36,7 +34,7 @@ use uuid::Uuid;
|
|
36
34
|
|
37
35
|
use crate::graph_collector::{Selector, TopUniqueCollector};
|
38
36
|
use crate::graph_query_parser::{
|
39
|
-
BoolGraphQuery, BoolNodeQuery, Expression,
|
37
|
+
BoolGraphQuery, BoolNodeQuery, Expression, GraphQuery, GraphQueryParser, Node, NodeQuery,
|
40
38
|
};
|
41
39
|
use crate::schema::{Schema, decode_node, decode_relation, encode_field_id};
|
42
40
|
use crate::top_unique_n::TopUniqueN;
|
@@ -107,7 +105,7 @@ impl RelationsReaderService {
|
|
107
105
|
pub fn relation_search(&self, request: &RelationSearchRequest) -> anyhow::Result<RelationSearchResponse> {
|
108
106
|
Ok(RelationSearchResponse {
|
109
107
|
subgraph: self.entities_subgraph_search(request)?,
|
110
|
-
prefix:
|
108
|
+
prefix: None,
|
111
109
|
})
|
112
110
|
}
|
113
111
|
|
@@ -383,133 +381,6 @@ impl RelationsReaderService {
|
|
383
381
|
|
384
382
|
Ok(Some(response))
|
385
383
|
}
|
386
|
-
|
387
|
-
fn prefix_search(&self, request: &RelationSearchRequest) -> anyhow::Result<Option<RelationPrefixSearchResponse>> {
|
388
|
-
let Some(prefix_request) = request.prefix.as_ref() else {
|
389
|
-
return Ok(None);
|
390
|
-
};
|
391
|
-
|
392
|
-
let Some(search) = &prefix_request.search else {
|
393
|
-
return Err(anyhow::anyhow!("Search terms needed"));
|
394
|
-
};
|
395
|
-
|
396
|
-
let query_parser = GraphQueryParser::new(&self.schema);
|
397
|
-
|
398
|
-
let mut source_q: Vec<(Occur, Box<dyn Query>)> = Vec::new();
|
399
|
-
let mut target_q: Vec<(Occur, Box<dyn Query>)> = Vec::new();
|
400
|
-
|
401
|
-
// Node filters: only search nodes with the specified type/subtype
|
402
|
-
let node_filters: Vec<Node> = prefix_request
|
403
|
-
.node_filters
|
404
|
-
.iter()
|
405
|
-
.map(|node_filter| Node {
|
406
|
-
node_type: Some(node_filter.node_type()),
|
407
|
-
node_subtype: node_filter.node_subtype.clone(),
|
408
|
-
..Default::default()
|
409
|
-
})
|
410
|
-
.collect();
|
411
|
-
|
412
|
-
if !node_filters.is_empty() {
|
413
|
-
source_q.push((
|
414
|
-
Occur::Must,
|
415
|
-
query_parser.parse(GraphQuery::NodeQuery(NodeQuery::SourceNode(Expression::Or(
|
416
|
-
node_filters.clone(),
|
417
|
-
)))),
|
418
|
-
));
|
419
|
-
target_q.push((
|
420
|
-
Occur::Must,
|
421
|
-
query_parser.parse(GraphQuery::NodeQuery(NodeQuery::DestinationNode(Expression::Or(
|
422
|
-
node_filters,
|
423
|
-
)))),
|
424
|
-
))
|
425
|
-
}
|
426
|
-
|
427
|
-
let searcher = self.reader.searcher();
|
428
|
-
// FIXME: we are using a topdocs collector to get prefix results from source and target
|
429
|
-
// nodes. However, we are deduplicating afterwards, and this means we could end up with less
|
430
|
-
// results although results may exist. As a quick fix, we increase here the limit of the
|
431
|
-
// collector. The proper solution would be implementing a custom collector for this task
|
432
|
-
let topdocs = TopDocs::with_limit(NUMBER_OF_RESULTS_SUGGEST * 2);
|
433
|
-
let schema = &self.schema;
|
434
|
-
|
435
|
-
match search {
|
436
|
-
// TODO: no longer used, we can remove it
|
437
|
-
Search::Query(query) => {
|
438
|
-
let mut prefix_nodes_q = Vec::new();
|
439
|
-
|
440
|
-
let words: Vec<_> = query.split_whitespace().collect();
|
441
|
-
for word in words {
|
442
|
-
prefix_nodes_q.push(Node {
|
443
|
-
value: Some(Term::FuzzyWord(FuzzyTerm {
|
444
|
-
value: word.to_string(),
|
445
|
-
fuzzy_distance: FUZZY_DISTANCE,
|
446
|
-
is_prefix: false,
|
447
|
-
})),
|
448
|
-
..Default::default()
|
449
|
-
});
|
450
|
-
}
|
451
|
-
|
452
|
-
// add fuzzy query for all prefixes
|
453
|
-
source_q.push((
|
454
|
-
Occur::Must,
|
455
|
-
query_parser.parse(GraphQuery::NodeQuery(NodeQuery::SourceNode(Expression::Or(
|
456
|
-
prefix_nodes_q.clone(),
|
457
|
-
)))),
|
458
|
-
));
|
459
|
-
target_q.push((
|
460
|
-
Occur::Must,
|
461
|
-
query_parser.parse(GraphQuery::NodeQuery(NodeQuery::DestinationNode(Expression::Or(
|
462
|
-
prefix_nodes_q,
|
463
|
-
)))),
|
464
|
-
));
|
465
|
-
}
|
466
|
-
Search::Prefix(prefix) => {
|
467
|
-
let normalized_prefix = schema.normalize(prefix);
|
468
|
-
let node_filter = Node {
|
469
|
-
value: Some(Term::Fuzzy(FuzzyTerm {
|
470
|
-
value: normalized_prefix.clone(),
|
471
|
-
fuzzy_distance: FUZZY_DISTANCE,
|
472
|
-
is_prefix: true,
|
473
|
-
})),
|
474
|
-
..Default::default()
|
475
|
-
};
|
476
|
-
source_q.push((
|
477
|
-
Occur::Must,
|
478
|
-
query_parser.parse(GraphQuery::NodeQuery(NodeQuery::SourceNode(Expression::Value(
|
479
|
-
node_filter.clone(),
|
480
|
-
)))),
|
481
|
-
));
|
482
|
-
target_q.push((
|
483
|
-
Occur::Must,
|
484
|
-
query_parser.parse(GraphQuery::NodeQuery(NodeQuery::DestinationNode(Expression::Value(
|
485
|
-
node_filter,
|
486
|
-
)))),
|
487
|
-
));
|
488
|
-
}
|
489
|
-
}
|
490
|
-
|
491
|
-
let source_prefix_query = BooleanQuery::new(source_q);
|
492
|
-
let target_prefix_query = BooleanQuery::new(target_q);
|
493
|
-
|
494
|
-
let mut response = RelationPrefixSearchResponse::default();
|
495
|
-
let mut results = HashSet::new();
|
496
|
-
for (_, source_res_addr) in searcher.search(&source_prefix_query, &topdocs)? {
|
497
|
-
let source_res_doc = searcher.doc(source_res_addr)?;
|
498
|
-
let relation_node = io_maps::source_to_relation_node(schema, &source_res_doc);
|
499
|
-
results.insert(HashedRelationNode(relation_node));
|
500
|
-
}
|
501
|
-
for (_, target_res_addr) in searcher.search(&target_prefix_query, &topdocs)? {
|
502
|
-
let target_res_doc = searcher.doc(target_res_addr)?;
|
503
|
-
let relation_node = io_maps::target_to_relation_node(schema, &target_res_doc);
|
504
|
-
results.insert(HashedRelationNode(relation_node));
|
505
|
-
}
|
506
|
-
response.nodes = results
|
507
|
-
.into_iter()
|
508
|
-
.take(NUMBER_OF_RESULTS_SUGGEST)
|
509
|
-
.map(Into::into)
|
510
|
-
.collect();
|
511
|
-
Ok(Some(response))
|
512
|
-
}
|
513
384
|
}
|
514
385
|
|
515
386
|
#[derive(Debug)]
|
@@ -546,7 +417,8 @@ impl std::hash::Hash for HashedRelationNode {
|
|
546
417
|
|
547
418
|
#[cfg(test)]
|
548
419
|
mod tests {
|
549
|
-
|
420
|
+
use std::collections::HashSet;
|
421
|
+
|
550
422
|
use super::*;
|
551
423
|
|
552
424
|
#[test]
|
{nidx_binding-6.3.4.post178 → nidx_binding-6.3.4.post183}/nidx_relation/tests/test_reader.rs
RENAMED
@@ -24,10 +24,8 @@ use std::collections::HashMap;
|
|
24
24
|
use nidx_protos::entities_subgraph_request::DeletedEntities;
|
25
25
|
use nidx_protos::relation::RelationType;
|
26
26
|
use nidx_protos::relation_node::NodeType;
|
27
|
-
use nidx_protos::relation_prefix_search_request::Search;
|
28
27
|
use nidx_protos::{
|
29
|
-
EntitiesSubgraphRequest, IndexRelations, RelationMetadata,
|
30
|
-
RelationSearchRequest, Resource, ResourceId,
|
28
|
+
EntitiesSubgraphRequest, IndexRelations, RelationMetadata, RelationSearchRequest, Resource, ResourceId,
|
31
29
|
};
|
32
30
|
use nidx_relation::{RelationConfig, RelationIndexer, RelationSearcher};
|
33
31
|
use tempfile::TempDir;
|
@@ -286,130 +284,3 @@ fn test_search_metadata() -> anyhow::Result<()> {
|
|
286
284
|
|
287
285
|
Ok(())
|
288
286
|
}
|
289
|
-
|
290
|
-
#[test]
|
291
|
-
fn test_prefix_search() -> anyhow::Result<()> {
|
292
|
-
let reader = create_reader()?;
|
293
|
-
|
294
|
-
let result = reader.search(&RelationSearchRequest {
|
295
|
-
prefix: Some(RelationPrefixSearchRequest {
|
296
|
-
search: Some(Search::Prefix("".to_string())),
|
297
|
-
..Default::default()
|
298
|
-
}),
|
299
|
-
..Default::default()
|
300
|
-
})?;
|
301
|
-
|
302
|
-
// max number of prefixes is fixed (to 20)
|
303
|
-
assert_eq!(result.prefix.unwrap().nodes.len(), 14);
|
304
|
-
|
305
|
-
let result = reader.search(&RelationSearchRequest {
|
306
|
-
prefix: Some(RelationPrefixSearchRequest {
|
307
|
-
search: Some(Search::Prefix("do".to_string())),
|
308
|
-
..Default::default()
|
309
|
-
}),
|
310
|
-
..Default::default()
|
311
|
-
})?;
|
312
|
-
|
313
|
-
assert_eq!(result.prefix.unwrap().nodes.len(), 2);
|
314
|
-
|
315
|
-
let result = reader.search(&RelationSearchRequest {
|
316
|
-
prefix: Some(RelationPrefixSearchRequest {
|
317
|
-
search: Some(Search::Prefix("ann".to_string())),
|
318
|
-
..Default::default()
|
319
|
-
}),
|
320
|
-
..Default::default()
|
321
|
-
})?;
|
322
|
-
|
323
|
-
assert_eq!(result.prefix.unwrap().nodes.len(), 3);
|
324
|
-
Ok(())
|
325
|
-
}
|
326
|
-
|
327
|
-
#[test]
|
328
|
-
fn test_prefix_query_search() -> anyhow::Result<()> {
|
329
|
-
let reader = create_reader()?;
|
330
|
-
|
331
|
-
let result = reader.search(&RelationSearchRequest {
|
332
|
-
prefix: Some(RelationPrefixSearchRequest {
|
333
|
-
search: Some(Search::Query("Films with James Bond played by Roger Moore".to_string())),
|
334
|
-
..Default::default()
|
335
|
-
}),
|
336
|
-
..Default::default()
|
337
|
-
})?;
|
338
|
-
assert_eq!(result.prefix.unwrap().nodes.len(), 1);
|
339
|
-
|
340
|
-
let result = reader.search(&RelationSearchRequest {
|
341
|
-
prefix: Some(RelationPrefixSearchRequest {
|
342
|
-
search: Some(Search::Query("Films with Jomes Bond played by Roger Moore".to_string())),
|
343
|
-
..Default::default()
|
344
|
-
}),
|
345
|
-
..Default::default()
|
346
|
-
})?;
|
347
|
-
assert_eq!(result.prefix.unwrap().nodes.len(), 1);
|
348
|
-
|
349
|
-
let result = reader.search(&RelationSearchRequest {
|
350
|
-
prefix: Some(RelationPrefixSearchRequest {
|
351
|
-
search: Some(Search::Query("Just Bond".to_string())),
|
352
|
-
..Default::default()
|
353
|
-
}),
|
354
|
-
..Default::default()
|
355
|
-
})?;
|
356
|
-
assert_eq!(result.prefix.unwrap().nodes.len(), 1);
|
357
|
-
|
358
|
-
let result = reader.search(&RelationSearchRequest {
|
359
|
-
prefix: Some(RelationPrefixSearchRequest {
|
360
|
-
search: Some(Search::Query("James Bond or Anastasia".to_string())),
|
361
|
-
..Default::default()
|
362
|
-
}),
|
363
|
-
..Default::default()
|
364
|
-
})?;
|
365
|
-
assert_eq!(result.prefix.unwrap().nodes.len(), 2);
|
366
|
-
|
367
|
-
Ok(())
|
368
|
-
}
|
369
|
-
|
370
|
-
#[test]
|
371
|
-
fn test_prefix_search_with_filters() -> anyhow::Result<()> {
|
372
|
-
let reader = create_reader()?;
|
373
|
-
|
374
|
-
let result = reader.search(&RelationSearchRequest {
|
375
|
-
prefix: Some(RelationPrefixSearchRequest {
|
376
|
-
search: Some(Search::Prefix("".to_string())),
|
377
|
-
node_filters: vec![RelationNodeFilter {
|
378
|
-
node_type: NodeType::Entity as i32,
|
379
|
-
node_subtype: Some("ANIMALS".to_string()),
|
380
|
-
}],
|
381
|
-
}),
|
382
|
-
..Default::default()
|
383
|
-
})?;
|
384
|
-
|
385
|
-
assert_eq!(result.prefix.unwrap().nodes.len(), 4);
|
386
|
-
|
387
|
-
let result = reader.search(&RelationSearchRequest {
|
388
|
-
prefix: Some(RelationPrefixSearchRequest {
|
389
|
-
search: Some(Search::Prefix("".to_string())),
|
390
|
-
node_filters: vec![RelationNodeFilter {
|
391
|
-
node_type: NodeType::Resource as i32,
|
392
|
-
node_subtype: None,
|
393
|
-
}],
|
394
|
-
}),
|
395
|
-
..Default::default()
|
396
|
-
})?;
|
397
|
-
|
398
|
-
assert_eq!(result.prefix.unwrap().nodes.len(), 1);
|
399
|
-
|
400
|
-
let result = reader.search(&RelationSearchRequest {
|
401
|
-
prefix: Some(RelationPrefixSearchRequest {
|
402
|
-
search: Some(Search::Prefix("".to_string())),
|
403
|
-
node_filters: vec![RelationNodeFilter {
|
404
|
-
node_type: NodeType::Resource as i32,
|
405
|
-
node_subtype: Some("foobarmissing".to_string()),
|
406
|
-
}],
|
407
|
-
}),
|
408
|
-
..Default::default()
|
409
|
-
})?;
|
410
|
-
|
411
|
-
// XXX WHY ISN'T THIS WORKING?
|
412
|
-
assert_eq!(result.prefix.unwrap().nodes.len(), 0);
|
413
|
-
|
414
|
-
Ok(())
|
415
|
-
}
|
@@ -84,7 +84,7 @@ impl TextSchema {
|
|
84
84
|
// Using a bytes field is slow due to tantivy's implementation being slow with many unique values.
|
85
85
|
// A better implementation is tracked in https://github.com/quickwit-oss/tantivy/issues/2090
|
86
86
|
let encoded_field_id = if version >= 2 {
|
87
|
-
Some(sb.add_u64_field("encoded_field_id", FAST))
|
87
|
+
Some(sb.add_u64_field("encoded_field_id", FAST | INDEXED))
|
88
88
|
} else {
|
89
89
|
None
|
90
90
|
};
|
@@ -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.4.
|
16
|
+
version = "6.3.4.post183"
|
17
17
|
|
18
18
|
[project.urls]
|
19
19
|
Homepage = "https://nuclia.com"
|
@@ -172,14 +172,11 @@ fn compute_vectors_request(search_request: &SearchRequest) -> anyhow::Result<Opt
|
|
172
172
|
}
|
173
173
|
|
174
174
|
fn compute_relations_request(search_request: &SearchRequest) -> Option<RelationSearchRequest> {
|
175
|
-
|
176
|
-
return None;
|
177
|
-
}
|
175
|
+
search_request.relation_subgraph.as_ref()?;
|
178
176
|
|
179
177
|
#[allow(deprecated)]
|
180
178
|
Some(RelationSearchRequest {
|
181
179
|
shard_id: search_request.shard.clone(),
|
182
|
-
prefix: search_request.relation_prefix.clone(),
|
183
180
|
subgraph: search_request.relation_subgraph.clone(),
|
184
181
|
})
|
185
182
|
}
|
@@ -31,13 +31,11 @@ use nidx_protos::graph_search_request::QueryKind;
|
|
31
31
|
use nidx_protos::prost_types::Timestamp;
|
32
32
|
use nidx_protos::relation::RelationType;
|
33
33
|
use nidx_protos::relation_node::NodeType;
|
34
|
-
use nidx_protos::relation_prefix_search_request::Search;
|
35
34
|
use nidx_protos::resource::ResourceStatus;
|
36
35
|
use nidx_protos::{
|
37
36
|
EntitiesSubgraphRequest, FilterExpression, GraphQuery, GraphSearchRequest, IndexMetadata, IndexRelation,
|
38
|
-
IndexRelations, NewShardRequest, Relation, RelationMetadata, RelationNode,
|
39
|
-
|
40
|
-
graph_query,
|
37
|
+
IndexRelations, NewShardRequest, Relation, RelationMetadata, RelationNode, RelationSearchRequest,
|
38
|
+
RelationSearchResponse, Resource, ResourceId, TextInformation, graph_query,
|
41
39
|
};
|
42
40
|
use nidx_protos::{SearchRequest, VectorIndexConfig};
|
43
41
|
use nidx_tests::graph::friendly_parse;
|
@@ -46,180 +44,6 @@ use sqlx::PgPool;
|
|
46
44
|
use tonic::Request;
|
47
45
|
use uuid::Uuid;
|
48
46
|
|
49
|
-
#[sqlx::test]
|
50
|
-
async fn test_search_relations_by_prefix(pool: PgPool) -> Result<(), Box<dyn std::error::Error>> {
|
51
|
-
let mut fixture = NidxFixture::new(pool).await?;
|
52
|
-
let shard_id = create_shard(&mut fixture).await?;
|
53
|
-
create_knowledge_graph(&mut fixture, shard_id.clone()).await;
|
54
|
-
fixture.wait_sync().await;
|
55
|
-
|
56
|
-
// --------------------------------------------------------------
|
57
|
-
// Test: prefixed search with empty term. Results are limited
|
58
|
-
// --------------------------------------------------------------
|
59
|
-
|
60
|
-
let response = relation_search(
|
61
|
-
&mut fixture,
|
62
|
-
RelationSearchRequest {
|
63
|
-
shard_id: shard_id.clone(),
|
64
|
-
prefix: Some(RelationPrefixSearchRequest {
|
65
|
-
search: Some(Search::Prefix(String::new())),
|
66
|
-
..Default::default()
|
67
|
-
}),
|
68
|
-
..Default::default()
|
69
|
-
},
|
70
|
-
)
|
71
|
-
.await?;
|
72
|
-
|
73
|
-
assert!(response.prefix.is_some());
|
74
|
-
let prefix_response = response.prefix.as_ref().unwrap();
|
75
|
-
let results = &prefix_response.nodes;
|
76
|
-
// This test will be removed soon, no need to update this
|
77
|
-
// // TODO this constants is spread between relations and paragraphs. It should
|
78
|
-
// // be in a single place and common for everyone
|
79
|
-
// const MAX_SUGGEST_RESULTS: usize = 20;
|
80
|
-
assert_eq!(results.len(), 15);
|
81
|
-
|
82
|
-
// --------------------------------------------------------------
|
83
|
-
// Test: prefixed search with "cat" term (some results)
|
84
|
-
// --------------------------------------------------------------
|
85
|
-
|
86
|
-
let response = relation_search(
|
87
|
-
&mut fixture,
|
88
|
-
RelationSearchRequest {
|
89
|
-
shard_id: shard_id.clone(),
|
90
|
-
prefix: Some(RelationPrefixSearchRequest {
|
91
|
-
search: Some(Search::Prefix("cat".to_string())),
|
92
|
-
node_filters: vec![RelationNodeFilter {
|
93
|
-
node_subtype: None,
|
94
|
-
node_type: NodeType::Entity as i32,
|
95
|
-
}],
|
96
|
-
}),
|
97
|
-
..Default::default()
|
98
|
-
},
|
99
|
-
)
|
100
|
-
.await?;
|
101
|
-
|
102
|
-
let expected = HashSet::from_iter(["Cat".to_string(), "Catwoman".to_string(), "Batman".to_string()]);
|
103
|
-
assert!(response.prefix.is_some());
|
104
|
-
let prefix_response = response.prefix.as_ref().unwrap();
|
105
|
-
let results = prefix_response
|
106
|
-
.nodes
|
107
|
-
.iter()
|
108
|
-
.map(|node| node.value.to_owned())
|
109
|
-
.collect::<HashSet<_>>();
|
110
|
-
assert_eq!(results, expected);
|
111
|
-
|
112
|
-
// --------------------------------------------------------------
|
113
|
-
// Test: prefixed search with "cat" and filters
|
114
|
-
// --------------------------------------------------------------
|
115
|
-
|
116
|
-
let response = relation_search(
|
117
|
-
&mut fixture,
|
118
|
-
RelationSearchRequest {
|
119
|
-
shard_id: shard_id.clone(),
|
120
|
-
prefix: Some(RelationPrefixSearchRequest {
|
121
|
-
search: Some(Search::Prefix("cat".to_string())),
|
122
|
-
node_filters: vec![RelationNodeFilter {
|
123
|
-
node_subtype: Some("animal".to_string()),
|
124
|
-
node_type: NodeType::Entity as i32,
|
125
|
-
}],
|
126
|
-
}),
|
127
|
-
..Default::default()
|
128
|
-
},
|
129
|
-
)
|
130
|
-
.await?;
|
131
|
-
|
132
|
-
let expected = HashSet::from_iter(["Cat".to_string()]);
|
133
|
-
assert!(response.prefix.is_some());
|
134
|
-
let prefix_response = response.prefix.as_ref().unwrap();
|
135
|
-
let results = prefix_response
|
136
|
-
.nodes
|
137
|
-
.iter()
|
138
|
-
.map(|node| node.value.to_owned())
|
139
|
-
.collect::<HashSet<_>>();
|
140
|
-
assert_eq!(results, expected);
|
141
|
-
|
142
|
-
let response = relation_search(
|
143
|
-
&mut fixture,
|
144
|
-
RelationSearchRequest {
|
145
|
-
shard_id: shard_id.clone(),
|
146
|
-
prefix: Some(RelationPrefixSearchRequest {
|
147
|
-
search: Some(Search::Prefix("cat".to_string())),
|
148
|
-
node_filters: vec![RelationNodeFilter {
|
149
|
-
node_subtype: Some("superhero".to_string()),
|
150
|
-
node_type: NodeType::Entity as i32,
|
151
|
-
}],
|
152
|
-
}),
|
153
|
-
..Default::default()
|
154
|
-
},
|
155
|
-
)
|
156
|
-
.await?;
|
157
|
-
|
158
|
-
let expected = HashSet::from_iter(["Catwoman".to_string()]);
|
159
|
-
assert!(response.prefix.is_some());
|
160
|
-
let prefix_response = response.prefix.as_ref().unwrap();
|
161
|
-
let results = prefix_response
|
162
|
-
.nodes
|
163
|
-
.iter()
|
164
|
-
.map(|node| node.value.to_owned())
|
165
|
-
.collect::<HashSet<_>>();
|
166
|
-
assert_eq!(results, expected);
|
167
|
-
|
168
|
-
// --------------------------------------------------------------
|
169
|
-
// Test: prefixed search with node filters and empty query
|
170
|
-
// --------------------------------------------------------------
|
171
|
-
|
172
|
-
let response = relation_search(
|
173
|
-
&mut fixture,
|
174
|
-
RelationSearchRequest {
|
175
|
-
shard_id: shard_id.clone(),
|
176
|
-
prefix: Some(RelationPrefixSearchRequest {
|
177
|
-
search: Some(Search::Prefix(String::new())),
|
178
|
-
node_filters: vec![RelationNodeFilter {
|
179
|
-
node_type: NodeType::Entity as i32,
|
180
|
-
node_subtype: Some("animal".to_string()),
|
181
|
-
}],
|
182
|
-
}),
|
183
|
-
..Default::default()
|
184
|
-
},
|
185
|
-
)
|
186
|
-
.await?;
|
187
|
-
|
188
|
-
let expected = HashSet::from_iter(["Cat".to_string()]);
|
189
|
-
assert!(response.prefix.is_some());
|
190
|
-
let prefix_response = response.prefix.as_ref().unwrap();
|
191
|
-
let results = prefix_response
|
192
|
-
.nodes
|
193
|
-
.iter()
|
194
|
-
.map(|node| node.value.to_owned())
|
195
|
-
.collect::<HashSet<_>>();
|
196
|
-
assert_eq!(results, expected);
|
197
|
-
|
198
|
-
// --------------------------------------------------------------
|
199
|
-
// Test: prefixed search with "zzz" term (empty results)
|
200
|
-
// --------------------------------------------------------------
|
201
|
-
|
202
|
-
let response = relation_search(
|
203
|
-
&mut fixture,
|
204
|
-
RelationSearchRequest {
|
205
|
-
shard_id: shard_id.clone(),
|
206
|
-
prefix: Some(RelationPrefixSearchRequest {
|
207
|
-
search: Some(Search::Prefix("zzz".to_string())),
|
208
|
-
..Default::default()
|
209
|
-
}),
|
210
|
-
..Default::default()
|
211
|
-
},
|
212
|
-
)
|
213
|
-
.await?;
|
214
|
-
|
215
|
-
assert!(response.prefix.is_some());
|
216
|
-
let prefix_response = response.prefix.as_ref().unwrap();
|
217
|
-
let results = &prefix_response.nodes;
|
218
|
-
assert!(results.is_empty());
|
219
|
-
|
220
|
-
Ok(())
|
221
|
-
}
|
222
|
-
|
223
47
|
#[sqlx::test]
|
224
48
|
async fn test_search_relations_neighbours(pool: PgPool) -> Result<(), Box<dyn std::error::Error>> {
|
225
49
|
let mut fixture = NidxFixture::new(pool).await?;
|
@@ -255,7 +79,6 @@ async fn test_search_relations_neighbours(pool: PgPool) -> Result<(), Box<dyn st
|
|
255
79
|
depth: Some(1),
|
256
80
|
..Default::default()
|
257
81
|
}),
|
258
|
-
..Default::default()
|
259
82
|
},
|
260
83
|
)
|
261
84
|
.await?;
|
@@ -284,7 +107,6 @@ async fn test_search_relations_neighbours(pool: PgPool) -> Result<(), Box<dyn st
|
|
284
107
|
depth: Some(1),
|
285
108
|
..Default::default()
|
286
109
|
}),
|
287
|
-
..Default::default()
|
288
110
|
},
|
289
111
|
)
|
290
112
|
.await?;
|
@@ -315,7 +137,6 @@ async fn test_search_relations_neighbours(pool: PgPool) -> Result<(), Box<dyn st
|
|
315
137
|
depth: Some(1),
|
316
138
|
..Default::default()
|
317
139
|
}),
|
318
|
-
..Default::default()
|
319
140
|
},
|
320
141
|
)
|
321
142
|
.await?;
|
@@ -336,7 +157,6 @@ async fn test_search_relations_neighbours(pool: PgPool) -> Result<(), Box<dyn st
|
|
336
157
|
depth: Some(1),
|
337
158
|
..Default::default()
|
338
159
|
}),
|
339
|
-
..Default::default()
|
340
160
|
},
|
341
161
|
)
|
342
162
|
.await?;
|
@@ -464,7 +284,7 @@ async fn test_graph_search_nodes(pool: PgPool) -> anyhow::Result<()> {
|
|
464
284
|
let nodes = &response.nodes;
|
465
285
|
assert_eq!(nodes.len(), 18);
|
466
286
|
|
467
|
-
//
|
287
|
+
// Limit by top_k
|
468
288
|
let response = fixture
|
469
289
|
.searcher_client
|
470
290
|
.graph_search(GraphSearchRequest {
|
@@ -472,25 +292,22 @@ async fn test_graph_search_nodes(pool: PgPool) -> anyhow::Result<()> {
|
|
472
292
|
query: Some(GraphQuery {
|
473
293
|
path: Some(graph_query::PathQuery {
|
474
294
|
query: Some(path_query::Query::Path(graph_query::Path {
|
475
|
-
source: Some(graph_query::Node
|
476
|
-
node_subtype: Some("ANIMAL".to_string()),
|
477
|
-
..Default::default()
|
478
|
-
}),
|
295
|
+
source: Some(graph_query::Node::default()),
|
479
296
|
undirected: true,
|
480
297
|
..Default::default()
|
481
298
|
})),
|
482
299
|
}),
|
483
300
|
}),
|
484
|
-
top_k:
|
301
|
+
top_k: 10,
|
485
302
|
kind: QueryKind::Nodes.into(),
|
486
303
|
..Default::default()
|
487
304
|
})
|
488
305
|
.await?
|
489
306
|
.into_inner();
|
490
307
|
let nodes = &response.nodes;
|
491
|
-
assert_eq!(nodes.len(),
|
308
|
+
assert_eq!(nodes.len(), 10);
|
492
309
|
|
493
|
-
//
|
310
|
+
// Search all ANIMAL nodes
|
494
311
|
let response = fixture
|
495
312
|
.searcher_client
|
496
313
|
.graph_search(GraphSearchRequest {
|
@@ -498,20 +315,23 @@ async fn test_graph_search_nodes(pool: PgPool) -> anyhow::Result<()> {
|
|
498
315
|
query: Some(GraphQuery {
|
499
316
|
path: Some(graph_query::PathQuery {
|
500
317
|
query: Some(path_query::Query::Path(graph_query::Path {
|
501
|
-
source: Some(graph_query::Node
|
318
|
+
source: Some(graph_query::Node {
|
319
|
+
node_subtype: Some("ANIMAL".to_string()),
|
320
|
+
..Default::default()
|
321
|
+
}),
|
502
322
|
undirected: true,
|
503
323
|
..Default::default()
|
504
324
|
})),
|
505
325
|
}),
|
506
326
|
}),
|
507
|
-
top_k:
|
327
|
+
top_k: 100,
|
508
328
|
kind: QueryKind::Nodes.into(),
|
509
329
|
..Default::default()
|
510
330
|
})
|
511
331
|
.await?
|
512
332
|
.into_inner();
|
513
333
|
let nodes = &response.nodes;
|
514
|
-
assert_eq!(nodes.len(),
|
334
|
+
assert_eq!(nodes.len(), 4);
|
515
335
|
|
516
336
|
Ok(())
|
517
337
|
}
|
@@ -1298,7 +1118,6 @@ async fn relation_search(
|
|
1298
1118
|
let request = SearchRequest {
|
1299
1119
|
shard: request.shard_id,
|
1300
1120
|
vectorset: "english".to_string(),
|
1301
|
-
relation_prefix: request.prefix,
|
1302
1121
|
relation_subgraph: request.subgraph,
|
1303
1122
|
..Default::default()
|
1304
1123
|
};
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|