nidx-binding 6.3.4.post123__tar.gz → 6.3.4.post129__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.post123 → nidx_binding-6.3.4.post129}/Cargo.lock +10 -9
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/PKG-INFO +1 -1
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_protos/pyproject.toml +1 -1
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_relation/Cargo.toml +2 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_relation/src/graph_collector.rs +4 -7
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_relation/src/graph_query_parser.rs +125 -62
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_relation/src/io_maps.rs +25 -2
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_relation/src/lib.rs +77 -13
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_relation/src/reader.rs +54 -39
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_relation/src/resource_indexer.rs +49 -12
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_relation/src/schema.rs +86 -30
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_relation/tests/common/mod.rs +15 -11
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_relation/tests/test_graph_search.rs +15 -18
- nidx_binding-6.3.4.post129/nidx_relation/tests/test_reader.rs +417 -0
- nidx_binding-6.3.4.post129/nidx_relation/tests/test_writer.rs +84 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_tests/src/graph.rs +22 -17
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_tests/src/lib.rs +15 -9
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/pyproject.toml +1 -1
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/indexer.rs +2 -2
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/metadata/index.rs +4 -2
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/searcher/index_cache.rs +1 -1
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/worker.rs +3 -1
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/tests/test_search_relations.rs +33 -20
- nidx_binding-6.3.4.post123/nidx_relation/tests/test_reader.rs +0 -398
- nidx_binding-6.3.4.post123/nidx_relation/tests/test_writer.rs +0 -73
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-0cfce9b29547f8f5bafa6e440f86103be7b8c4ad2fd92db9ac223f4efbe23d10.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-1a561eed00f3dbe868bf5030059793300209179dc8fb73e4b57a54b5e81262fe.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-1d3fca2682e25a01143da92285297f134a6a105a96f64d87e0db3abb219855e4.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-249b3b57c27a71baa823f1fe0f0bba9c9af36f61c28f731e58beea60ec48e687.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-24cb6b683daa42d7125f862e25943ab4be7bf275cd8739f8da4859d701795e1a.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-263c8fce6db5b03bbd012fafdba6943cbee6ed7eb8976cdef4f5b01dde7ca6fd.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-2a5d92fb1638df830a4477a7cdf24e6db6b43034b7bbe74fdfb63e8afe2c4071.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-2b065a363f58caed60e3706603c1260dbf5a4c795604a5b68edda22eb07fec1b.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-3fc3cb39934683de8cd475ce1368c8373453eb1e01f81587d66b9d14b109ce6e.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-48f33b77b7c1633467b0b2efcaa1d3c207e7757e4f1d83b40d15e6ca365f7771.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-4ae09f2c08e2f324bee01bb8487a8f37678a1c5e9d327339235c50d4921a8949.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-4d7a76fa413c9ef0ce2a47ac7bb7e01d3e6a2aabded9487d21010a53efee8852.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-4fcbdd6657c7dc9b60b3a563dd41711b3dbcf72ce063427b7a01f8cddf34c244.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-577109ac00ccfbd38ecaccab94116f2f46a4caf5612afa372cded197123c1e08.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-5db25f97d8578d6d78f2f6bd4b72cc82a9b1b82805c6422d967ac63b20d99db4.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-5ec3233a3a23e926055056d46bdde17836a633066dbb5f349502648cd3ea9a60.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-66edb6ea424d8681927dcddb6bac5f1239175f4775d1f40417ba15054b0c6f19.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-6f9c6d201c1b5712efb68c363bffd3e0169c11f2a8f925e8cd4e8808599ff7b4.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-733c3ebacc86f444bf5e2dd79ade660c291e88a00fc09b722f6e2e191545874c.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-77a245aed9f6f8b9fc643efbd4b1e2e8e99bbba085e3e75a4f29321cd7b2a25c.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-7a3bf27c330c468a596e8a297cf7d8b192e31e67ecc5177c1267f579e8e247c7.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-7a7e59e47b30b12237511fd3d7da2d17b0471ad2b006af48d6a6f587c779692b.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-7dcbb33312cc9f11ae3a6d73b1ace017a9f19a8bf8f10304fc57977c8efeadff.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-7efa7c0d747afc4b6aed0586ff846c27839c3213ff7ee9f30c89b0d0f17e60e3.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-8493140d788604d498a4e48da4158708572ccc9d60185290a00d549cc84533db.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-8493bb0059b013eaca42fd10cd7d04f0d06a8acaed379eff0d23f3229edde9ee.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-87996b3d6c7a2195438d7038015b06949102bce8c7b8cd8db1f83aaf23cbe489.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-8f096d8171b89f9615d18f95d696dc9e4fb3674e103161a713cdc806f7a68506.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-917732a56ee04bf3a6e127319dda8225210869c82f9828d878162394dba4e078.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-95fe4ef93ee90733db1b67ed7987f80b5aac792f1590b979c68b418d1599eb98.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-9b67658569b343d8b4b61ae0a7dc721f367f2ba33c7b69b9e68bfd5c9bff5206.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-9c8062ea55d070afef68309e58fa987eb37fda44e1efbf68c8ba2af7846cc968.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-a06e1d9f6f95e4c4c2b98310ebddcc9d963cc033582bf2e945e8bf3a301b4247.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-a55265c9b07bd1399961a6f1e757201fd0eebe868ddaf96437111113d80fce92.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-a891a37be5c2d7cce775c2dd33726b0318fd3839beab222a1b22bc6174604207.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-a945191bb4b3e37d6823ed3ad499339d007d69983105de8567777d9daf517b28.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-abe9f7832f2bd799ac44008da031e8d8ab52d4f5fbfc2a7e3974e8873bae55b2.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-aca588cca57a85e4d7fcc40c23cd87e57d53d11ca550d78e7e3d5e39e524fcd3.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-b02f8aafc00a7724510772ac41269e368c5bccf03ef7b4590e0ef6fd1a1bf64f.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-b742e17cabe2d64617e9aa64bafc782172f7a4f8023d1b54f952a0fb39f6b2b8.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-b94e349dbc0daec57f8f8f6e9e2dffb06100b1bb2b41d297c9f3b191da37a83d.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-bd9afa22994aba671dbf7b5f89b53c2ee02f53c0442a81265786a6d52d08512f.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-be60554eca98a5899efc6b49785cecd6444a6d39afed9e4a884ce2dbf162012c.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-bf49702b506c9a1650ece1f8e8d9f14834a902f8caefafe30ded55e2790f2188.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-bfb8ae2e860e451b0868a7b1b50a451d998b2105f9fdfd307b26a1775d145e9f.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-bfcd21ed704cd305db5c17fcdec7d92aa4ac501913c9c9514d8ff92928c0c7e7.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-c3ab694650f49a75b146fb877a92e48c4f20f0d99f70f8ec859fbb763b01a1e5.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-c55542bb9fae544d87fae6f30e0fe8a9088d12075f4442ab4fe2fcd05e472234.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-cb29a6556d35ac630ee0aa885dd7341cf9573bd3efd216ff8a887b87686b03db.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-d0a1f341a89f5f14696b10baa72db9d95551c2b7e5fc67308fd52dc03dd98a92.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-d2ad0a0ca2649c9e4873cfcc1fc66d2d07cc45d0f65c560b06d7b5f592f4fa8a.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-d6cfe78eb635ba0b89ca4021a4dc8182d18ab5b197f30149cd28488eba4c1df5.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-d729b56dea00e49dcdba8cf0001e2811da27351eabe98212db3b589f18fc6f32.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-d9658bfd4e7170b41d03f2ddf2446d0bf54171c0d39d53bf20af2b8437f2ec48.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-dbba7b3d3289425bae711aedbf73fbc3699f857f86f84d95c3b556d05c5658b0.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-dcb96b649d6d63a58efd5d445453a4f3d7869a56ff714b69bedf3d616a0473ca.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-ebd876fbf5362a5900e75bc05f2f11c73c406ef7da4e95097fc6a1c3d1b8bc54.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-eef5cc6bce1cc14eba8f3e68971724ef181e88cffcedd74673615f2026b89a62.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/.sqlx/query-ef56d5fefc5774040d1ee397beadb475f6af02768c22f0e583c74062e2e821ce.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/Cargo.toml +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/README.md +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/migrations/20241007163501_initial.sql +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/migrations/20241211120039_merge_job_priority.sql +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/migrations/20241211121159_basic_indexes.sql +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/migrations/20241212151105_check_segment_records.sql +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/migrations/20250110145554_in_flight_messages.sql +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_binding/Cargo.toml +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_binding/src/lib.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/Cargo.toml +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/src/fuzzy_query.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/src/lib.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/src/query_io.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/src/reader.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/src/request_types.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/src/resource_indexer.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/src/schema.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/src/search_query.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/src/search_response.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/src/set_query.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/src/stop_words.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/README.md +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/ar.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/az.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/bn.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/ca.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/ch.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/da.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/de.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/el.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/en.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/es.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/eu.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/extract.py +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/fi.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/fr.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/he.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/hu.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/id.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/it.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/kk.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/ne.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/nl.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/no.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/pt.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/ro.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/ru.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/sl.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/sv.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/tg.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/stop_words/tr.json +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/tests/common/mod.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_paragraph/tests/reader.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_protos/Cargo.toml +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_protos/build.py +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_protos/build.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_protos/src/lib.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_protos/src/nidx.proto +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_tantivy/Cargo.toml +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_tantivy/src/index_reader.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_tantivy/src/lib.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_tests/Cargo.toml +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_text/Cargo.toml +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_text/src/lib.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_text/src/prefilter.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_text/src/query_io.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_text/src/reader.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_text/src/request_types.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_text/src/resource_indexer.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_text/src/schema.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_text/src/search_query.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_text/tests/common/mod.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_text/tests/test_flow.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_text/tests/test_search.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_text/tests/test_streaming.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_types/Cargo.toml +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_types/src/lib.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_types/src/prefilter.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_types/src/query_language.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/Cargo.toml +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/config.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/data_point/disk_hnsw.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/data_point/mod.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/data_point/node.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/data_point/ops_hnsw.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/data_point/params.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/data_point/ram_hnsw.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/data_point/tests.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/data_point_provider/mod.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/data_point_provider/reader.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/data_types/data_store.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/data_types/mod.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/data_types/trie.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/data_types/trie_ram.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/formula/mod.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/indexer.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/inverted_index/fst_index.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/inverted_index/map.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/inverted_index.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/lib.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/query_io.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/request_types.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/utils.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/vector_types/dense_f32.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/src/vector_types/mod.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/tests/common/mod.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/tests/test_basic_search.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_vector/tests/test_hidden.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/api/grpc.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/api/shards.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/api.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/control.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/errors.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/grpc_server.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/import_export.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/lib.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/main.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/metadata/deletion.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/metadata/index_request.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/metadata/merge_job.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/metadata/segment.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/metadata/shard.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/metadata.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/metrics.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/scheduler/audit_task.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/scheduler/log_merge.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/scheduler/merge_task.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/scheduler/metrics_task.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/scheduler/purge_tasks.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/scheduler/vector_merge.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/scheduler.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/searcher/grpc.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/searcher/query_language.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/searcher/query_planner.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/searcher/shard_search.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/searcher/shard_selector.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/searcher/shard_suggest.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/searcher/streams.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/searcher/sync.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/searcher.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/segment_store.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/settings.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/telemetry/duration_layer.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/telemetry/log_format.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/telemetry/middleware.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/telemetry.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/src/tool.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/tests/common/mod.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/tests/common/services.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/tests/test_date_range_search.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/tests/test_search_filtering.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/tests/test_search_sorting.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/tests/test_searcher_cluster.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/tests/test_security_search.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/tests/test_shards.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/tests/test_shards_api.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/tests/test_suggest.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/tests/test_synced_searcher.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/tests/test_vector_normalization.rs +0 -0
- {nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/tests/test_vectorsets.rs +0 -0
@@ -2128,9 +2128,11 @@ dependencies = [
|
|
2128
2128
|
"nidx_tantivy",
|
2129
2129
|
"nidx_tests",
|
2130
2130
|
"nidx_types",
|
2131
|
+
"serde",
|
2131
2132
|
"tantivy",
|
2132
2133
|
"tempfile",
|
2133
2134
|
"tracing",
|
2135
|
+
"uuid",
|
2134
2136
|
]
|
2135
2137
|
|
2136
2138
|
[[package]]
|
@@ -3141,15 +3143,14 @@ dependencies = [
|
|
3141
3143
|
|
3142
3144
|
[[package]]
|
3143
3145
|
name = "ring"
|
3144
|
-
version = "0.17.
|
3146
|
+
version = "0.17.14"
|
3145
3147
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
3146
|
-
checksum = "
|
3148
|
+
checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
|
3147
3149
|
dependencies = [
|
3148
3150
|
"cc",
|
3149
3151
|
"cfg-if",
|
3150
3152
|
"getrandom 0.2.15",
|
3151
3153
|
"libc",
|
3152
|
-
"spin",
|
3153
3154
|
"untrusted",
|
3154
3155
|
"windows-sys 0.52.0",
|
3155
3156
|
]
|
@@ -3519,9 +3520,9 @@ dependencies = [
|
|
3519
3520
|
|
3520
3521
|
[[package]]
|
3521
3522
|
name = "serde"
|
3522
|
-
version = "1.0.
|
3523
|
+
version = "1.0.219"
|
3523
3524
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
3524
|
-
checksum = "
|
3525
|
+
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
|
3525
3526
|
dependencies = [
|
3526
3527
|
"serde_derive",
|
3527
3528
|
]
|
@@ -3538,9 +3539,9 @@ dependencies = [
|
|
3538
3539
|
|
3539
3540
|
[[package]]
|
3540
3541
|
name = "serde_derive"
|
3541
|
-
version = "1.0.
|
3542
|
+
version = "1.0.219"
|
3542
3543
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
3543
|
-
checksum = "
|
3544
|
+
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
|
3544
3545
|
dependencies = [
|
3545
3546
|
"proc-macro2",
|
3546
3547
|
"quote",
|
@@ -4742,9 +4743,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
|
|
4742
4743
|
|
4743
4744
|
[[package]]
|
4744
4745
|
name = "uuid"
|
4745
|
-
version = "1.
|
4746
|
+
version = "1.16.0"
|
4746
4747
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
4747
|
-
checksum = "
|
4748
|
+
checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9"
|
4748
4749
|
dependencies = [
|
4749
4750
|
"getrandom 0.3.1",
|
4750
4751
|
"serde",
|
@@ -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.post129
|
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.post129"
|
8
8
|
license = { text = "AGPL" }
|
9
9
|
description = "Protobuf definitions for nucliadb/nidx"
|
10
10
|
authors = [ { name = "Nuclia", email = "nucliadb@nuclia.com" }]
|
@@ -10,8 +10,10 @@ deunicode = "1.3.2"
|
|
10
10
|
nidx_protos = { version = "0.1.0", path = "../nidx_protos" }
|
11
11
|
nidx_tantivy = { version = "0.1.0", path = "../nidx_tantivy" }
|
12
12
|
nidx_types = { version = "0.1.0", path = "../nidx_types" }
|
13
|
+
serde = { version = "1.0.219", features = ["derive"] }
|
13
14
|
tantivy = "0.22"
|
14
15
|
tracing = "0.1.41"
|
16
|
+
uuid = "1.16.0"
|
15
17
|
|
16
18
|
[dev-dependencies]
|
17
19
|
tempfile = "3"
|
{nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_relation/src/graph_collector.rs
RENAMED
@@ -68,21 +68,18 @@ pub struct TopUniqueRelationSegmentCollector {
|
|
68
68
|
}
|
69
69
|
|
70
70
|
impl TopUniqueNodeCollector {
|
71
|
-
pub fn new(selector: NodeSelector, limit: usize) -> Self {
|
71
|
+
pub fn new(schema: crate::schema::Schema, selector: NodeSelector, limit: usize) -> Self {
|
72
72
|
Self {
|
73
73
|
limit,
|
74
74
|
selector,
|
75
|
-
schema
|
75
|
+
schema,
|
76
76
|
}
|
77
77
|
}
|
78
78
|
}
|
79
79
|
|
80
80
|
impl TopUniqueRelationCollector {
|
81
|
-
pub fn new(limit: usize) -> Self {
|
82
|
-
Self {
|
83
|
-
limit,
|
84
|
-
schema: crate::schema::Schema::new(),
|
85
|
-
}
|
81
|
+
pub fn new(schema: crate::schema::Schema, limit: usize) -> Self {
|
82
|
+
Self { limit, schema }
|
86
83
|
}
|
87
84
|
}
|
88
85
|
|
{nidx_binding-6.3.4.post123 → nidx_binding-6.3.4.post129}/nidx_relation/src/graph_query_parser.rs
RENAMED
@@ -23,9 +23,10 @@ use nidx_protos::relation_node::NodeType;
|
|
23
23
|
use nidx_types::query_language::{BooleanExpression, BooleanOperation, Operator};
|
24
24
|
use tantivy::query::{AllQuery, BooleanQuery, FuzzyTermQuery, Occur, Query, TermQuery};
|
25
25
|
use tantivy::schema::{Field, IndexRecordOption};
|
26
|
+
use tantivy::tokenizer::TokenizerManager;
|
26
27
|
|
28
|
+
use crate::io_maps;
|
27
29
|
use crate::schema::Schema;
|
28
|
-
use crate::{io_maps, schema};
|
29
30
|
|
30
31
|
const DEFAULT_NODE_VALUE_FUZZY_DISTANCE: u8 = 1;
|
31
32
|
|
@@ -119,20 +120,32 @@ enum NodePosition {
|
|
119
120
|
pub struct BoolNodeQuery(BooleanExpression<Node>);
|
120
121
|
pub struct BoolGraphQuery(BooleanExpression<GraphQuery>);
|
121
122
|
|
123
|
+
#[derive(Clone, Copy)]
|
124
|
+
struct TokenizedNodeFields {
|
125
|
+
exact: Field,
|
126
|
+
tokenized: Field,
|
127
|
+
}
|
128
|
+
|
129
|
+
#[derive(Clone, Copy)]
|
130
|
+
enum NodeValueField {
|
131
|
+
Normalized(Field),
|
132
|
+
Tokenized(TokenizedNodeFields),
|
133
|
+
}
|
134
|
+
|
122
135
|
#[derive(Clone, Copy)]
|
123
136
|
struct NodeSchemaFields {
|
124
|
-
|
137
|
+
value: NodeValueField,
|
125
138
|
node_type: Field,
|
126
139
|
node_subtype: Field,
|
127
140
|
}
|
128
141
|
|
129
|
-
pub struct GraphQueryParser {
|
130
|
-
schema: Schema,
|
142
|
+
pub struct GraphQueryParser<'a> {
|
143
|
+
schema: &'a Schema,
|
131
144
|
}
|
132
145
|
|
133
|
-
impl GraphQueryParser {
|
134
|
-
pub fn new() -> Self {
|
135
|
-
Self { schema
|
146
|
+
impl<'a> GraphQueryParser<'a> {
|
147
|
+
pub fn new(schema: &'a Schema) -> Self {
|
148
|
+
Self { schema }
|
136
149
|
}
|
137
150
|
|
138
151
|
pub fn parse_bool(&self, query: BoolGraphQuery) -> Box<dyn Query> {
|
@@ -143,9 +156,10 @@ impl GraphQueryParser {
|
|
143
156
|
match query {
|
144
157
|
BooleanExpression::Literal(query) => self.parse(query),
|
145
158
|
BooleanExpression::Not(subquery) => {
|
146
|
-
let
|
147
|
-
|
148
|
-
|
159
|
+
let subqueries = vec![
|
160
|
+
(Occur::Must, Box::new(AllQuery) as Box<dyn Query>),
|
161
|
+
(Occur::MustNot, self.inner_parse_bool(*subquery)),
|
162
|
+
];
|
149
163
|
Box::new(BooleanQuery::new(subqueries))
|
150
164
|
}
|
151
165
|
BooleanExpression::Operation(operation) => {
|
@@ -180,9 +194,10 @@ impl GraphQueryParser {
|
|
180
194
|
))),
|
181
195
|
},
|
182
196
|
BooleanExpression::Not(subquery) => {
|
183
|
-
let
|
184
|
-
|
185
|
-
|
197
|
+
let subqueries = vec![
|
198
|
+
(Occur::Must, Box::new(AllQuery) as Box<dyn Query>),
|
199
|
+
(Occur::MustNot, self.inner_parse_bool_node(*subquery, position)),
|
200
|
+
];
|
186
201
|
Box::new(BooleanQuery::new(subqueries))
|
187
202
|
}
|
188
203
|
BooleanExpression::Operation(operation) => {
|
@@ -247,7 +262,7 @@ impl GraphQueryParser {
|
|
247
262
|
let mut subqueries = vec![];
|
248
263
|
|
249
264
|
subqueries.extend(self.has_node_expression_as_source(&source_expression));
|
250
|
-
subqueries.extend(self.has_relation(&relation_expression)
|
265
|
+
subqueries.extend(self.has_relation(&relation_expression));
|
251
266
|
subqueries.extend(self.has_node_expression_as_destination(&destination_expression));
|
252
267
|
|
253
268
|
// Due to implementation details on tantivy, a query containing only MustNot won't
|
@@ -271,10 +286,18 @@ impl GraphQueryParser {
|
|
271
286
|
|
272
287
|
#[inline]
|
273
288
|
fn has_node_expression_as_source(&self, expression: &Expression<Node>) -> Vec<(Occur, Box<dyn Query>)> {
|
289
|
+
let value = if self.schema.version == 1 {
|
290
|
+
NodeValueField::Normalized(self.schema.normalized_source_value)
|
291
|
+
} else {
|
292
|
+
NodeValueField::Tokenized(TokenizedNodeFields {
|
293
|
+
exact: self.schema.normalized_source_value,
|
294
|
+
tokenized: self.schema.source_value,
|
295
|
+
})
|
296
|
+
};
|
274
297
|
self.has_node_expression(
|
275
298
|
expression,
|
276
299
|
NodeSchemaFields {
|
277
|
-
|
300
|
+
value,
|
278
301
|
node_type: self.schema.source_type,
|
279
302
|
node_subtype: self.schema.source_subtype,
|
280
303
|
},
|
@@ -283,10 +306,18 @@ impl GraphQueryParser {
|
|
283
306
|
|
284
307
|
#[inline]
|
285
308
|
fn has_node_expression_as_destination(&self, expression: &Expression<Node>) -> Vec<(Occur, Box<dyn Query>)> {
|
309
|
+
let value = if self.schema.version == 1 {
|
310
|
+
NodeValueField::Normalized(self.schema.normalized_target_value)
|
311
|
+
} else {
|
312
|
+
NodeValueField::Tokenized(TokenizedNodeFields {
|
313
|
+
exact: self.schema.normalized_target_value,
|
314
|
+
tokenized: self.schema.target_value,
|
315
|
+
})
|
316
|
+
};
|
286
317
|
self.has_node_expression(
|
287
318
|
expression,
|
288
319
|
NodeSchemaFields {
|
289
|
-
|
320
|
+
value,
|
290
321
|
node_type: self.schema.target_type,
|
291
322
|
node_subtype: self.schema.target_subtype,
|
292
323
|
},
|
@@ -315,16 +346,16 @@ impl GraphQueryParser {
|
|
315
346
|
Expression::Not(query) => {
|
316
347
|
// NOT granularity is a node, so we to use a Must { MustNot { X } } instead of
|
317
348
|
// unnest it in multiple MustNot { x }
|
318
|
-
let subquery: Box<dyn Query> = Box::new(BooleanQuery::intersection(self.has_node(
|
349
|
+
let subquery: Box<dyn Query> = Box::new(BooleanQuery::intersection(self.has_node(query, fields)));
|
319
350
|
queries.push((Occur::MustNot, subquery));
|
320
351
|
}
|
321
352
|
Expression::Or(nodes) => {
|
322
353
|
// OR needs careful treatment. If there's only one node query matching, we can
|
323
354
|
// behave as it was a Value(Node). Otherwise we need a nested query with its parts
|
324
355
|
let mut subqueries: Vec<_> = nodes
|
325
|
-
.
|
356
|
+
.iter()
|
326
357
|
.flat_map(|node| {
|
327
|
-
let node_queries = self.has_node(
|
358
|
+
let node_queries = self.has_node(node, fields);
|
328
359
|
if node_queries.is_empty() {
|
329
360
|
// We don't care about nodes that match everything as they don't provide any
|
330
361
|
// filtering value
|
@@ -346,7 +377,7 @@ impl GraphQueryParser {
|
|
346
377
|
// When there's multiple nodes to match, we must do a nested query and force
|
347
378
|
// that any of these matches
|
348
379
|
let or_subqueries = subqueries.into_iter().map(|mut node_queries| {
|
349
|
-
debug_assert!(node_queries.
|
380
|
+
debug_assert!(!node_queries.is_empty(), "already validated above");
|
350
381
|
let node_query: (Occur, Box<dyn Query>) = if node_queries.len() == 1 {
|
351
382
|
// To avoid a nested boolean query for a node matching only in
|
352
383
|
// one field, we can directly add a subquery
|
@@ -372,7 +403,7 @@ impl GraphQueryParser {
|
|
372
403
|
let value_query = node
|
373
404
|
.value
|
374
405
|
.as_ref()
|
375
|
-
.and_then(|value| self.has_node_value(value, fields.
|
406
|
+
.and_then(|value| self.has_node_value(value, fields.value));
|
376
407
|
if let Some(query) = value_query {
|
377
408
|
subqueries.push(query);
|
378
409
|
}
|
@@ -420,7 +451,7 @@ impl GraphQueryParser {
|
|
420
451
|
}
|
421
452
|
|
422
453
|
Expression::Or(relations) => {
|
423
|
-
subqueries.extend(relations.
|
454
|
+
subqueries.extend(relations.iter().flat_map(|relation| {
|
424
455
|
if let Some(label) = &relation.value {
|
425
456
|
if label.is_empty() {
|
426
457
|
None
|
@@ -437,47 +468,79 @@ impl GraphQueryParser {
|
|
437
468
|
subqueries
|
438
469
|
}
|
439
470
|
|
440
|
-
fn has_node_value(&self, value: &Term, field:
|
441
|
-
match value {
|
442
|
-
Term::Exact(value) =>
|
443
|
-
|
444
|
-
|
471
|
+
fn has_node_value(&self, value: &Term, field: NodeValueField) -> Option<Box<dyn Query>> {
|
472
|
+
let text_value = match value {
|
473
|
+
Term::Exact(value) => value,
|
474
|
+
Term::Fuzzy(fuzzy) => &fuzzy.value,
|
475
|
+
};
|
476
|
+
if text_value.is_empty() {
|
477
|
+
return None;
|
478
|
+
}
|
479
|
+
let exact_term = match field {
|
480
|
+
NodeValueField::Normalized(field) => {
|
481
|
+
tantivy::Term::from_field_text(field, &self.schema.normalize(text_value))
|
482
|
+
}
|
483
|
+
NodeValueField::Tokenized(TokenizedNodeFields { exact, .. }) => {
|
484
|
+
tantivy::Term::from_field_text(exact, &self.schema.normalize(text_value))
|
485
|
+
}
|
486
|
+
};
|
487
|
+
let tokenized_terms = match field {
|
488
|
+
NodeValueField::Normalized(field) => {
|
489
|
+
vec![tantivy::Term::from_field_text(
|
490
|
+
field,
|
491
|
+
&self.schema.normalize(text_value),
|
492
|
+
)]
|
493
|
+
}
|
494
|
+
NodeValueField::Tokenized(TokenizedNodeFields { tokenized, .. }) => {
|
495
|
+
let mut tokenizer = TokenizerManager::default().get("default").unwrap();
|
496
|
+
let mut token_stream = tokenizer.token_stream(text_value);
|
497
|
+
let mut terms = Vec::new();
|
498
|
+
while let Some(token) = token_stream.next() {
|
499
|
+
terms.push(tantivy::Term::from_field_text(tokenized, &token.text));
|
445
500
|
}
|
446
|
-
|
447
|
-
let query = Box::new(TermQuery::new(
|
448
|
-
tantivy::Term::from_field_text(field, &normalized_value),
|
449
|
-
IndexRecordOption::Basic,
|
450
|
-
));
|
451
|
-
Some(query)
|
501
|
+
terms
|
452
502
|
}
|
503
|
+
};
|
453
504
|
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
505
|
+
// TODO: Rethink this
|
506
|
+
// Current logic:
|
507
|
+
// - Exact match always match the search term against the full field
|
508
|
+
// - Fuzzy + prefix search works does a prefix fuzzy match of the whole entity name
|
509
|
+
// - Fuzzy search looks for entities containing all words in the term with a fuzzy match (tokenized)
|
510
|
+
//
|
511
|
+
// Questions:
|
512
|
+
// - Do we want exact match of a word in the entity? (kind of supported by setting fuzzy distance = 0)
|
513
|
+
let query: Box<dyn Query> = match value {
|
514
|
+
Term::Exact(_) => Box::new(TermQuery::new(exact_term, IndexRecordOption::Basic)),
|
515
|
+
Term::Fuzzy(fuzzy) => match fuzzy {
|
516
|
+
FuzzyTerm {
|
517
|
+
fuzzy_distance,
|
518
|
+
is_prefix: true,
|
519
|
+
..
|
520
|
+
} => Box::new(FuzzyTermQuery::new_prefix(exact_term, *fuzzy_distance, true)),
|
521
|
+
|
522
|
+
FuzzyTerm { fuzzy_distance, .. } => {
|
523
|
+
if tokenized_terms.len() > 1 {
|
524
|
+
Box::new(BooleanQuery::intersection(
|
525
|
+
tokenized_terms
|
526
|
+
.into_iter()
|
527
|
+
.map(|term| -> Box<dyn Query> {
|
528
|
+
Box::new(FuzzyTermQuery::new(term, *fuzzy_distance, true))
|
529
|
+
})
|
530
|
+
.collect(),
|
531
|
+
))
|
532
|
+
} else {
|
533
|
+
Box::new(FuzzyTermQuery::new(
|
534
|
+
tokenized_terms.into_iter().next().unwrap(),
|
535
|
+
*fuzzy_distance,
|
536
|
+
true,
|
537
|
+
))
|
538
|
+
}
|
478
539
|
}
|
479
|
-
}
|
480
|
-
}
|
540
|
+
},
|
541
|
+
};
|
542
|
+
|
543
|
+
Some(query)
|
481
544
|
}
|
482
545
|
|
483
546
|
fn has_node_type(&self, node_type: NodeType, field: Field) -> Box<dyn Query> {
|
@@ -497,7 +560,7 @@ impl GraphQueryParser {
|
|
497
560
|
|
498
561
|
fn has_relation_label(&self, label: &str) -> Box<dyn Query> {
|
499
562
|
Box::new(TermQuery::new(
|
500
|
-
tantivy::Term::from_field_text(self.schema.label,
|
563
|
+
tantivy::Term::from_field_text(self.schema.label, label),
|
501
564
|
IndexRecordOption::Basic,
|
502
565
|
))
|
503
566
|
}
|
@@ -533,7 +596,7 @@ impl TryFrom<&nidx_protos::graph_query::PathQuery> for BoolNodeQuery {
|
|
533
596
|
if !(path.source.is_some()
|
534
597
|
&& path.relation.is_none()
|
535
598
|
&& path.destination.is_none()
|
536
|
-
&& path.undirected
|
599
|
+
&& path.undirected)
|
537
600
|
{
|
538
601
|
// We are doing something wrong between search API and nidx
|
539
602
|
return Err(anyhow!(
|
@@ -664,7 +727,7 @@ impl TryFrom<&nidx_protos::graph_query::Node> for Node {
|
|
664
727
|
let value = node_pb.value.clone().map(|value| match node_pb.match_kind() {
|
665
728
|
nidx_protos::graph_query::node::MatchKind::Exact => Term::Exact(value),
|
666
729
|
nidx_protos::graph_query::node::MatchKind::Fuzzy => Term::Fuzzy(FuzzyTerm {
|
667
|
-
value
|
730
|
+
value,
|
668
731
|
fuzzy_distance: DEFAULT_NODE_VALUE_FUZZY_DISTANCE,
|
669
732
|
is_prefix: true,
|
670
733
|
}),
|
@@ -18,13 +18,14 @@
|
|
18
18
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
19
|
//
|
20
20
|
|
21
|
-
use nidx_protos::prost::*;
|
22
21
|
use nidx_protos::relation::RelationType;
|
23
22
|
use nidx_protos::relation_node::NodeType;
|
23
|
+
use nidx_protos::{IndexRelation, prost::*};
|
24
24
|
use nidx_protos::{Relation as ProtosRelation, RelationMetadata, RelationNode};
|
25
25
|
use tantivy::TantivyDocument;
|
26
|
+
use tantivy::schema::Value;
|
26
27
|
|
27
|
-
use crate::schema::Schema;
|
28
|
+
use crate::schema::{Schema, decode_field_id};
|
28
29
|
|
29
30
|
pub fn decode_metadata(schema: &Schema, doc: &TantivyDocument) -> Option<RelationMetadata> {
|
30
31
|
schema
|
@@ -108,6 +109,28 @@ pub fn doc_to_relation(schema: &Schema, doc: &TantivyDocument) -> ProtosRelation
|
|
108
109
|
}
|
109
110
|
}
|
110
111
|
|
112
|
+
pub fn doc_to_index_relation(schema: &Schema, doc: &TantivyDocument) -> IndexRelation {
|
113
|
+
let resource_field_id = schema.resource_field_id.and_then(|f| {
|
114
|
+
doc.get_first(f).map(|v| {
|
115
|
+
let (rid, fid) = decode_field_id(v.as_bytes().unwrap());
|
116
|
+
format!("{}/{}", rid.simple(), fid)
|
117
|
+
})
|
118
|
+
});
|
119
|
+
let facets = schema
|
120
|
+
.facets
|
121
|
+
.map(|field| {
|
122
|
+
doc.get_all(field)
|
123
|
+
.map(|f| f.as_facet().unwrap().to_path_string())
|
124
|
+
.collect()
|
125
|
+
})
|
126
|
+
.unwrap_or_default();
|
127
|
+
IndexRelation {
|
128
|
+
relation: Some(doc_to_relation(schema, doc)),
|
129
|
+
resource_field_id,
|
130
|
+
facets,
|
131
|
+
}
|
132
|
+
}
|
133
|
+
|
111
134
|
pub fn doc_to_graph_relation(schema: &Schema, doc: &TantivyDocument) -> nidx_protos::graph_search_response::Relation {
|
112
135
|
nidx_protos::graph_search_response::Relation {
|
113
136
|
relation_type: u64_to_relation_type::<i32>(schema.relationship(doc)),
|
@@ -38,6 +38,8 @@ use nidx_types::OpenIndexMetadata;
|
|
38
38
|
use reader::{HashedRelationNode, RelationsReaderService};
|
39
39
|
use resource_indexer::index_relations;
|
40
40
|
pub use schema::Schema as RelationSchema;
|
41
|
+
use schema::encode_field_id;
|
42
|
+
use serde::{Deserialize, Serialize};
|
41
43
|
use std::{collections::HashSet, path::Path};
|
42
44
|
use tantivy::{
|
43
45
|
Term,
|
@@ -46,26 +48,77 @@ use tantivy::{
|
|
46
48
|
query::{Query, TermSetQuery},
|
47
49
|
schema::Field,
|
48
50
|
};
|
49
|
-
use tracing::instrument;
|
51
|
+
use tracing::{error, instrument};
|
52
|
+
use uuid::Uuid;
|
50
53
|
|
51
54
|
/// Minimum length for a word to be accepted as a entity to search for
|
52
55
|
/// suggestions. Low values can provide too much noise and higher ones can
|
53
56
|
/// remove important words from suggestion
|
54
57
|
const MIN_SUGGEST_PREFIX_LENGTH: usize = 2;
|
55
58
|
|
59
|
+
#[derive(Debug, Serialize, Deserialize, Clone)]
|
60
|
+
pub struct RelationConfig {
|
61
|
+
#[serde(default = "default_version")]
|
62
|
+
pub version: u64,
|
63
|
+
}
|
64
|
+
|
65
|
+
impl Default for RelationConfig {
|
66
|
+
fn default() -> Self {
|
67
|
+
Self {
|
68
|
+
// This is the default version when creating a new index.
|
69
|
+
// Should typically be set to the latest supported version
|
70
|
+
version: 1,
|
71
|
+
}
|
72
|
+
}
|
73
|
+
}
|
74
|
+
|
75
|
+
// This is the default version when reading from serde, i.e: no info on database
|
76
|
+
// This should always be 1
|
77
|
+
fn default_version() -> u64 {
|
78
|
+
1
|
79
|
+
}
|
80
|
+
|
56
81
|
pub struct RelationIndexer;
|
57
82
|
|
58
|
-
pub struct RelationDeletionQueryBuilder
|
83
|
+
pub struct RelationDeletionQueryBuilder {
|
84
|
+
resource: Field,
|
85
|
+
field: Option<Field>,
|
86
|
+
}
|
59
87
|
impl DeletionQueryBuilder for RelationDeletionQueryBuilder {
|
60
88
|
fn query<'a>(&self, keys: impl Iterator<Item = &'a String>) -> Box<dyn Query> {
|
61
|
-
|
62
|
-
keys.
|
63
|
-
|
89
|
+
if let Some(field) = self.field {
|
90
|
+
Box::new(TermSetQuery::new(keys.filter_map(|k| {
|
91
|
+
// Our keys can be resource or field ids, match the corresponding tantivy field
|
92
|
+
if k.len() < 32 {
|
93
|
+
error!(?k, "Invalid deletion key for nidx_relation");
|
94
|
+
return None;
|
95
|
+
}
|
96
|
+
|
97
|
+
let Ok(rid) = Uuid::parse_str(&k[..32]) else {
|
98
|
+
error!(?k, "Invalid deletion key for nidx_relation");
|
99
|
+
return None;
|
100
|
+
};
|
101
|
+
|
102
|
+
let is_field = k.len() > 32;
|
103
|
+
if is_field {
|
104
|
+
Some(Term::from_field_bytes(field, &encode_field_id(rid, &k[33..])))
|
105
|
+
} else {
|
106
|
+
Some(Term::from_field_bytes(self.resource, rid.as_bytes()))
|
107
|
+
}
|
108
|
+
})))
|
109
|
+
} else {
|
110
|
+
Box::new(TermSetQuery::new(
|
111
|
+
keys.map(|k| Term::from_field_bytes(self.resource, k.as_bytes())),
|
112
|
+
))
|
113
|
+
}
|
64
114
|
}
|
65
115
|
}
|
66
116
|
impl RelationDeletionQueryBuilder {
|
67
117
|
fn new(schema: &RelationSchema) -> Self {
|
68
|
-
RelationDeletionQueryBuilder
|
118
|
+
RelationDeletionQueryBuilder {
|
119
|
+
resource: schema.resource_id,
|
120
|
+
field: schema.resource_field_id,
|
121
|
+
}
|
69
122
|
}
|
70
123
|
}
|
71
124
|
|
@@ -74,9 +127,10 @@ impl RelationIndexer {
|
|
74
127
|
pub fn index_resource(
|
75
128
|
&self,
|
76
129
|
output_dir: &Path,
|
130
|
+
config: &RelationConfig,
|
77
131
|
resource: &nidx_protos::Resource,
|
78
132
|
) -> anyhow::Result<Option<TantivySegmentMetadata>> {
|
79
|
-
let field_schema = RelationSchema::new();
|
133
|
+
let field_schema = RelationSchema::new(config.version);
|
80
134
|
let mut indexer = TantivyIndexer::new(output_dir.to_path_buf(), field_schema.schema.clone())?;
|
81
135
|
|
82
136
|
if resource.status == ResourceStatus::Delete as i32 {
|
@@ -87,17 +141,27 @@ impl RelationIndexer {
|
|
87
141
|
indexer.finalize()
|
88
142
|
}
|
89
143
|
|
90
|
-
pub fn deletions_for_resource(&self, resource: &nidx_protos::Resource) -> Vec<String> {
|
91
|
-
|
144
|
+
pub fn deletions_for_resource(&self, config: &RelationConfig, resource: &nidx_protos::Resource) -> Vec<String> {
|
145
|
+
if config.version == 2 {
|
146
|
+
let rid = &resource.resource.as_ref().unwrap().uuid;
|
147
|
+
resource
|
148
|
+
.relation_fields_to_delete
|
149
|
+
.iter()
|
150
|
+
.map(|f| format!("{rid}/{f}"))
|
151
|
+
.collect()
|
152
|
+
} else {
|
153
|
+
vec![resource.resource.as_ref().unwrap().uuid.clone()]
|
154
|
+
}
|
92
155
|
}
|
93
156
|
|
94
157
|
#[instrument(name = "relation::merge", skip_all)]
|
95
158
|
pub fn merge(
|
96
159
|
&self,
|
97
160
|
work_dir: &Path,
|
161
|
+
config: RelationConfig,
|
98
162
|
open_index: impl OpenIndexMetadata<TantivyMeta>,
|
99
163
|
) -> anyhow::Result<TantivySegmentMetadata> {
|
100
|
-
let schema = RelationSchema::new();
|
164
|
+
let schema = RelationSchema::new(config.version);
|
101
165
|
let deletions_query = RelationDeletionQueryBuilder::new(&schema);
|
102
166
|
let index = open_index_with_deletions(schema.schema, open_index, deletions_query)?;
|
103
167
|
|
@@ -120,15 +184,15 @@ pub struct RelationSearcher {
|
|
120
184
|
|
121
185
|
impl RelationSearcher {
|
122
186
|
#[instrument(name = "relation::open", skip_all)]
|
123
|
-
pub fn open(open_index: impl OpenIndexMetadata<TantivyMeta>) -> anyhow::Result<Self> {
|
124
|
-
let schema = RelationSchema::new();
|
187
|
+
pub fn open(config: RelationConfig, open_index: impl OpenIndexMetadata<TantivyMeta>) -> anyhow::Result<Self> {
|
188
|
+
let schema = RelationSchema::new(config.version);
|
125
189
|
let deletions_query = RelationDeletionQueryBuilder::new(&schema);
|
126
190
|
let index = open_index_with_deletions(schema.schema, open_index, deletions_query)?;
|
127
191
|
|
128
192
|
Ok(Self {
|
129
193
|
reader: RelationsReaderService {
|
130
194
|
index: index.clone(),
|
131
|
-
schema: RelationSchema::new(),
|
195
|
+
schema: RelationSchema::new(config.version),
|
132
196
|
reader: index
|
133
197
|
.reader_builder()
|
134
198
|
.reload_policy(tantivy::ReloadPolicy::Manual)
|