nidx-binding 6.3.1.post33__tar.gz → 6.3.1.post46__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.1.post33 → nidx_binding-6.3.1.post46}/Cargo.lock +1 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/PKG-INFO +1 -1
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_protos/pyproject.toml +1 -1
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_protos/src/nidx.proto +1 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_relation/Cargo.toml +1 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_relation/src/graph_query_parser.rs +86 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_relation/src/io_maps.rs +14 -5
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_relation/src/lib.rs +8 -2
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_relation/src/reader.rs +81 -15
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_relation/src/schema.rs +10 -25
- nidx_binding-6.3.1.post46/nidx_relation/tests/test_graph_search.rs +396 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_relation/tests/test_reader.rs +2 -1
- nidx_binding-6.3.1.post46/nidx_tests/src/graph.rs +126 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_tests/src/lib.rs +2 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/pyproject.toml +1 -1
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/searcher/grpc.rs +13 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/searcher/shard_search.rs +29 -1
- nidx_binding-6.3.1.post46/tests/test_search_relations.rs +1028 -0
- nidx_binding-6.3.1.post33/nidx_relation/tests/test_graph_search.rs +0 -588
- nidx_binding-6.3.1.post33/tests/test_search_relations.rs +0 -671
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-0cfce9b29547f8f5bafa6e440f86103be7b8c4ad2fd92db9ac223f4efbe23d10.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-1a561eed00f3dbe868bf5030059793300209179dc8fb73e4b57a54b5e81262fe.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-1d3fca2682e25a01143da92285297f134a6a105a96f64d87e0db3abb219855e4.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-249b3b57c27a71baa823f1fe0f0bba9c9af36f61c28f731e58beea60ec48e687.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-24cb6b683daa42d7125f862e25943ab4be7bf275cd8739f8da4859d701795e1a.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-263c8fce6db5b03bbd012fafdba6943cbee6ed7eb8976cdef4f5b01dde7ca6fd.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-2a5d92fb1638df830a4477a7cdf24e6db6b43034b7bbe74fdfb63e8afe2c4071.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-2b065a363f58caed60e3706603c1260dbf5a4c795604a5b68edda22eb07fec1b.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-3fc3cb39934683de8cd475ce1368c8373453eb1e01f81587d66b9d14b109ce6e.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-48f33b77b7c1633467b0b2efcaa1d3c207e7757e4f1d83b40d15e6ca365f7771.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-4ae09f2c08e2f324bee01bb8487a8f37678a1c5e9d327339235c50d4921a8949.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-4d7a76fa413c9ef0ce2a47ac7bb7e01d3e6a2aabded9487d21010a53efee8852.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-4fcbdd6657c7dc9b60b3a563dd41711b3dbcf72ce063427b7a01f8cddf34c244.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-577109ac00ccfbd38ecaccab94116f2f46a4caf5612afa372cded197123c1e08.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-5db25f97d8578d6d78f2f6bd4b72cc82a9b1b82805c6422d967ac63b20d99db4.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-5ec3233a3a23e926055056d46bdde17836a633066dbb5f349502648cd3ea9a60.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-66edb6ea424d8681927dcddb6bac5f1239175f4775d1f40417ba15054b0c6f19.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-6f9c6d201c1b5712efb68c363bffd3e0169c11f2a8f925e8cd4e8808599ff7b4.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-733c3ebacc86f444bf5e2dd79ade660c291e88a00fc09b722f6e2e191545874c.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-77a245aed9f6f8b9fc643efbd4b1e2e8e99bbba085e3e75a4f29321cd7b2a25c.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-7a3bf27c330c468a596e8a297cf7d8b192e31e67ecc5177c1267f579e8e247c7.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-7a7e59e47b30b12237511fd3d7da2d17b0471ad2b006af48d6a6f587c779692b.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-7dcbb33312cc9f11ae3a6d73b1ace017a9f19a8bf8f10304fc57977c8efeadff.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-7efa7c0d747afc4b6aed0586ff846c27839c3213ff7ee9f30c89b0d0f17e60e3.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-8493140d788604d498a4e48da4158708572ccc9d60185290a00d549cc84533db.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-8493bb0059b013eaca42fd10cd7d04f0d06a8acaed379eff0d23f3229edde9ee.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-87996b3d6c7a2195438d7038015b06949102bce8c7b8cd8db1f83aaf23cbe489.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-8f096d8171b89f9615d18f95d696dc9e4fb3674e103161a713cdc806f7a68506.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-917732a56ee04bf3a6e127319dda8225210869c82f9828d878162394dba4e078.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-95fe4ef93ee90733db1b67ed7987f80b5aac792f1590b979c68b418d1599eb98.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-9b67658569b343d8b4b61ae0a7dc721f367f2ba33c7b69b9e68bfd5c9bff5206.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-9c8062ea55d070afef68309e58fa987eb37fda44e1efbf68c8ba2af7846cc968.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-a06e1d9f6f95e4c4c2b98310ebddcc9d963cc033582bf2e945e8bf3a301b4247.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-a55265c9b07bd1399961a6f1e757201fd0eebe868ddaf96437111113d80fce92.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-a891a37be5c2d7cce775c2dd33726b0318fd3839beab222a1b22bc6174604207.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-a945191bb4b3e37d6823ed3ad499339d007d69983105de8567777d9daf517b28.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-abe9f7832f2bd799ac44008da031e8d8ab52d4f5fbfc2a7e3974e8873bae55b2.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-aca588cca57a85e4d7fcc40c23cd87e57d53d11ca550d78e7e3d5e39e524fcd3.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-b02f8aafc00a7724510772ac41269e368c5bccf03ef7b4590e0ef6fd1a1bf64f.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-b742e17cabe2d64617e9aa64bafc782172f7a4f8023d1b54f952a0fb39f6b2b8.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-b94e349dbc0daec57f8f8f6e9e2dffb06100b1bb2b41d297c9f3b191da37a83d.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-bd9afa22994aba671dbf7b5f89b53c2ee02f53c0442a81265786a6d52d08512f.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-be60554eca98a5899efc6b49785cecd6444a6d39afed9e4a884ce2dbf162012c.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-bf49702b506c9a1650ece1f8e8d9f14834a902f8caefafe30ded55e2790f2188.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-bfb8ae2e860e451b0868a7b1b50a451d998b2105f9fdfd307b26a1775d145e9f.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-bfcd21ed704cd305db5c17fcdec7d92aa4ac501913c9c9514d8ff92928c0c7e7.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-c3ab694650f49a75b146fb877a92e48c4f20f0d99f70f8ec859fbb763b01a1e5.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-c55542bb9fae544d87fae6f30e0fe8a9088d12075f4442ab4fe2fcd05e472234.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-cb29a6556d35ac630ee0aa885dd7341cf9573bd3efd216ff8a887b87686b03db.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-d0a1f341a89f5f14696b10baa72db9d95551c2b7e5fc67308fd52dc03dd98a92.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-d2ad0a0ca2649c9e4873cfcc1fc66d2d07cc45d0f65c560b06d7b5f592f4fa8a.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-d6cfe78eb635ba0b89ca4021a4dc8182d18ab5b197f30149cd28488eba4c1df5.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-d729b56dea00e49dcdba8cf0001e2811da27351eabe98212db3b589f18fc6f32.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-d9658bfd4e7170b41d03f2ddf2446d0bf54171c0d39d53bf20af2b8437f2ec48.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-dbba7b3d3289425bae711aedbf73fbc3699f857f86f84d95c3b556d05c5658b0.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-dcb96b649d6d63a58efd5d445453a4f3d7869a56ff714b69bedf3d616a0473ca.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-ebd876fbf5362a5900e75bc05f2f11c73c406ef7da4e95097fc6a1c3d1b8bc54.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-eef5cc6bce1cc14eba8f3e68971724ef181e88cffcedd74673615f2026b89a62.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/.sqlx/query-ef56d5fefc5774040d1ee397beadb475f6af02768c22f0e583c74062e2e821ce.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/Cargo.toml +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/README.md +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/migrations/20241007163501_initial.sql +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/migrations/20241211120039_merge_job_priority.sql +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/migrations/20241211121159_basic_indexes.sql +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/migrations/20241212151105_check_segment_records.sql +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/migrations/20250110145554_in_flight_messages.sql +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_binding/Cargo.toml +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_binding/src/lib.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/Cargo.toml +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/src/fuzzy_query.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/src/lib.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/src/query_io.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/src/reader.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/src/request_types.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/src/resource_indexer.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/src/schema.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/src/search_query.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/src/search_response.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/src/set_query.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/src/stop_words.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/README.md +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/ar.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/az.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/bn.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/ca.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/ch.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/da.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/de.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/el.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/en.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/es.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/eu.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/extract.py +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/fi.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/fr.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/he.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/hu.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/id.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/it.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/kk.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/ne.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/nl.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/no.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/pt.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/ro.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/ru.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/sl.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/sv.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/tg.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/stop_words/tr.json +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/tests/common/mod.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_paragraph/tests/reader.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_protos/Cargo.toml +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_protos/build.py +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_protos/build.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_protos/src/lib.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_relation/src/resource_indexer.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_relation/tests/common/mod.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_relation/tests/test_writer.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_tantivy/Cargo.toml +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_tantivy/src/index_reader.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_tantivy/src/lib.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_tests/Cargo.toml +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_text/Cargo.toml +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_text/src/lib.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_text/src/prefilter.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_text/src/query_io.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_text/src/reader.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_text/src/request_types.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_text/src/resource_indexer.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_text/src/schema.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_text/src/search_query.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_text/tests/common/mod.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_text/tests/test_flow.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_text/tests/test_search.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_text/tests/test_streaming.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_types/Cargo.toml +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_types/src/lib.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_types/src/prefilter.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_types/src/query_language.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/Cargo.toml +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/config.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/data_point/disk_hnsw.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/data_point/mod.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/data_point/node.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/data_point/ops_hnsw.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/data_point/params.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/data_point/ram_hnsw.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/data_point/tests.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/data_point_provider/mod.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/data_point_provider/reader.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/data_types/data_store.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/data_types/mod.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/data_types/trie.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/data_types/trie_ram.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/formula/mod.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/indexer.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/inverted_index/fst_index.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/inverted_index/map.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/inverted_index.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/lib.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/query_io.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/request_types.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/utils.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/vector_types/dense_f32.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/src/vector_types/mod.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/tests/common/mod.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/tests/test_basic_search.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_vector/tests/test_hidden.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/api/grpc.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/api/shards.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/api.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/control.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/errors.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/grpc_server.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/import_export.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/indexer.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/lib.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/main.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/metadata/deletion.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/metadata/index.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/metadata/index_request.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/metadata/merge_job.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/metadata/segment.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/metadata/shard.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/metadata.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/metrics.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/scheduler/audit_task.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/scheduler/log_merge.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/scheduler/merge_task.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/scheduler/metrics_task.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/scheduler/purge_tasks.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/scheduler/vector_merge.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/scheduler.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/searcher/index_cache.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/searcher/query_language.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/searcher/query_planner.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/searcher/shard_selector.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/searcher/shard_suggest.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/searcher/streams.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/searcher/sync.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/searcher.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/segment_store.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/settings.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/telemetry/duration_layer.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/telemetry/log_format.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/telemetry/middleware.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/telemetry.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/tool.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/src/worker.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/tests/common/mod.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/tests/common/services.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/tests/test_date_range_search.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/tests/test_search_filtering.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/tests/test_search_sorting.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/tests/test_searcher_cluster.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/tests/test_security_search.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/tests/test_shards.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/tests/test_shards_api.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/tests/test_suggest.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/tests/test_synced_searcher.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/tests/test_vector_normalization.rs +0 -0
- {nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/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.1.
|
3
|
+
Version: 6.3.1.post46
|
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.1.
|
7
|
+
version = "6.3.1.post46"
|
8
8
|
license = { text = "AGPL" }
|
9
9
|
description = "Protobuf definitions for nucliadb/nidx"
|
10
10
|
authors = [ { name = "Nuclia", email = "nucliadb@nuclia.com" }]
|
@@ -21,6 +21,7 @@ service NidxApi {
|
|
21
21
|
|
22
22
|
service NidxSearcher {
|
23
23
|
rpc Search(nodereader.SearchRequest) returns (nodereader.SearchResponse) {}
|
24
|
+
rpc GraphSearch(nodereader.GraphSearchRequest) returns (nodereader.GraphSearchResponse) {}
|
24
25
|
rpc Suggest(nodereader.SuggestRequest) returns (nodereader.SuggestResponse) {}
|
25
26
|
|
26
27
|
// Streams
|
{nidx_binding-6.3.1.post33 → nidx_binding-6.3.1.post46}/nidx_relation/src/graph_query_parser.rs
RENAMED
@@ -418,3 +418,89 @@ impl From<&str> for Term {
|
|
418
418
|
Self::Exact(value.to_string())
|
419
419
|
}
|
420
420
|
}
|
421
|
+
|
422
|
+
impl TryFrom<&nidx_protos::graph_query::Query> for GraphQuery {
|
423
|
+
type Error = anyhow::Error;
|
424
|
+
|
425
|
+
fn try_from(value: &nidx_protos::graph_query::Query) -> Result<Self, Self::Error> {
|
426
|
+
let query = match value {
|
427
|
+
nidx_protos::graph_query::Query::Node(query_node) => {
|
428
|
+
let node = Node::try_from(query_node)?;
|
429
|
+
Self::NodeQuery(NodeQuery::Node(Expression::Value(node)))
|
430
|
+
}
|
431
|
+
|
432
|
+
nidx_protos::graph_query::Query::Relation(relation) => {
|
433
|
+
Self::RelationQuery(RelationQuery(Expression::Value(Relation::try_from(relation)?)))
|
434
|
+
}
|
435
|
+
|
436
|
+
nidx_protos::graph_query::Query::Path(path) => {
|
437
|
+
let source = match &path.source {
|
438
|
+
Some(source_pb) => Node::try_from(source_pb)?,
|
439
|
+
None => Node::default(),
|
440
|
+
};
|
441
|
+
let relation = match &path.relation {
|
442
|
+
Some(relation_pb) => Relation::try_from(relation_pb)?,
|
443
|
+
None => Relation::default(),
|
444
|
+
};
|
445
|
+
let destination = match &path.destination {
|
446
|
+
Some(destination_pb) => Node::try_from(destination_pb)?,
|
447
|
+
None => Node::default(),
|
448
|
+
};
|
449
|
+
|
450
|
+
if path.undirected {
|
451
|
+
Self::PathQuery(PathQuery::UndirectedPath((
|
452
|
+
Expression::Value(source),
|
453
|
+
Expression::Value(relation),
|
454
|
+
Expression::Value(destination),
|
455
|
+
)))
|
456
|
+
} else {
|
457
|
+
Self::PathQuery(PathQuery::DirectedPath((
|
458
|
+
Expression::Value(source),
|
459
|
+
Expression::Value(relation),
|
460
|
+
Expression::Value(destination),
|
461
|
+
)))
|
462
|
+
}
|
463
|
+
}
|
464
|
+
};
|
465
|
+
|
466
|
+
Ok(query)
|
467
|
+
}
|
468
|
+
}
|
469
|
+
|
470
|
+
impl TryFrom<&nidx_protos::graph_query::Node> for Node {
|
471
|
+
type Error = anyhow::Error;
|
472
|
+
|
473
|
+
fn try_from(node_pb: &nidx_protos::graph_query::Node) -> Result<Self, Self::Error> {
|
474
|
+
let value = node_pb.value.clone().map(|value| {
|
475
|
+
if node_pb.fuzzy_distance > 0 || node_pb.as_prefix {
|
476
|
+
Term::Fuzzy(FuzzyTerm {
|
477
|
+
value: value,
|
478
|
+
fuzzy_distance: node_pb.fuzzy_distance as u8,
|
479
|
+
is_prefix: node_pb.as_prefix,
|
480
|
+
})
|
481
|
+
} else {
|
482
|
+
Term::Exact(value)
|
483
|
+
}
|
484
|
+
});
|
485
|
+
let node_type = node_pb.node_type.map(NodeType::try_from).transpose()?;
|
486
|
+
let node_subtype = node_pb.node_subtype.clone();
|
487
|
+
|
488
|
+
Ok(Node {
|
489
|
+
value,
|
490
|
+
node_type,
|
491
|
+
node_subtype,
|
492
|
+
})
|
493
|
+
}
|
494
|
+
}
|
495
|
+
|
496
|
+
impl TryFrom<&nidx_protos::graph_query::Relation> for Relation {
|
497
|
+
type Error = anyhow::Error;
|
498
|
+
|
499
|
+
fn try_from(relation_pb: &nidx_protos::graph_query::Relation) -> Result<Self, Self::Error> {
|
500
|
+
let value = relation_pb.value.clone();
|
501
|
+
|
502
|
+
Ok(Relation {
|
503
|
+
value,
|
504
|
+
})
|
505
|
+
}
|
506
|
+
}
|
@@ -80,16 +80,17 @@ where
|
|
80
80
|
|
81
81
|
pub fn source_to_relation_node(schema: &Schema, doc: &TantivyDocument) -> RelationNode {
|
82
82
|
RelationNode {
|
83
|
-
value: schema.source_value(doc),
|
83
|
+
value: schema.source_value(doc).to_string(),
|
84
84
|
ntype: u64_to_node_type::<i32>(schema.source_type(doc)),
|
85
|
-
subtype: schema.source_subtype(doc),
|
85
|
+
subtype: schema.source_subtype(doc).to_string(),
|
86
86
|
}
|
87
87
|
}
|
88
|
+
|
88
89
|
pub fn target_to_relation_node(schema: &Schema, doc: &TantivyDocument) -> RelationNode {
|
89
90
|
RelationNode {
|
90
|
-
value: schema.target_value(doc),
|
91
|
+
value: schema.target_value(doc).to_string(),
|
91
92
|
ntype: u64_to_node_type::<i32>(schema.target_type(doc)),
|
92
|
-
subtype: schema.target_subtype(doc),
|
93
|
+
subtype: schema.target_subtype(doc).to_string(),
|
93
94
|
}
|
94
95
|
}
|
95
96
|
|
@@ -97,8 +98,16 @@ pub fn doc_to_relation(schema: &Schema, doc: &TantivyDocument) -> ProtosRelation
|
|
97
98
|
ProtosRelation {
|
98
99
|
metadata: decode_metadata(schema, doc),
|
99
100
|
relation: u64_to_relation_type::<i32>(schema.relationship(doc)),
|
100
|
-
relation_label: schema.relationship_label(doc),
|
101
|
+
relation_label: schema.relationship_label(doc).to_string(),
|
101
102
|
source: Some(source_to_relation_node(schema, doc)),
|
102
103
|
to: Some(target_to_relation_node(schema, doc)),
|
103
104
|
}
|
104
105
|
}
|
106
|
+
|
107
|
+
pub fn doc_to_graph_relation(schema: &Schema, doc: &TantivyDocument) -> nidx_protos::graph_search_response::Relation {
|
108
|
+
nidx_protos::graph_search_response::Relation {
|
109
|
+
relation_type: u64_to_relation_type::<i32>(schema.relationship(doc)),
|
110
|
+
label: schema.relationship_label(doc).to_string(),
|
111
|
+
metadata: decode_metadata(schema, doc),
|
112
|
+
}
|
113
|
+
}
|
@@ -25,8 +25,9 @@ mod resource_indexer;
|
|
25
25
|
mod schema;
|
26
26
|
|
27
27
|
use nidx_protos::{
|
28
|
-
relation_node::NodeType, relation_prefix_search_request::Search, resource::ResourceStatus,
|
29
|
-
RelationNodeFilter, RelationPrefixSearchRequest, RelationSearchRequest,
|
28
|
+
relation_node::NodeType, relation_prefix_search_request::Search, resource::ResourceStatus, GraphSearchRequest,
|
29
|
+
GraphSearchResponse, RelationNode, RelationNodeFilter, RelationPrefixSearchRequest, RelationSearchRequest,
|
30
|
+
RelationSearchResponse,
|
30
31
|
};
|
31
32
|
use nidx_tantivy::{
|
32
33
|
index_reader::{open_index_with_deletions, DeletionQueryBuilder},
|
@@ -135,6 +136,11 @@ impl RelationSearcher {
|
|
135
136
|
self.reader.relation_search(request)
|
136
137
|
}
|
137
138
|
|
139
|
+
#[instrument(name = "relation::graph_searcher", skip_all)]
|
140
|
+
pub fn graph_search(&self, request: &GraphSearchRequest) -> anyhow::Result<GraphSearchResponse> {
|
141
|
+
self.reader.graph_search(request)
|
142
|
+
}
|
143
|
+
|
138
144
|
#[instrument(name = "relation::suggest", skip_all)]
|
139
145
|
pub fn suggest(&self, prefixes: Vec<String>) -> Vec<RelationNode> {
|
140
146
|
let requests =
|
@@ -23,11 +23,12 @@ use std::path::Path;
|
|
23
23
|
|
24
24
|
use nidx_protos::relation_prefix_search_request::Search;
|
25
25
|
use nidx_protos::{
|
26
|
-
EntitiesSubgraphResponse,
|
26
|
+
EntitiesSubgraphResponse, GraphSearchRequest, GraphSearchResponse, RelationNode, RelationPrefixSearchResponse,
|
27
|
+
RelationSearchRequest, RelationSearchResponse,
|
27
28
|
};
|
28
29
|
use tantivy::collector::TopDocs;
|
29
30
|
use tantivy::query::{BooleanQuery, Occur, Query};
|
30
|
-
use tantivy::{Index, IndexReader};
|
31
|
+
use tantivy::{DocAddress, Index, IndexReader, Searcher};
|
31
32
|
|
32
33
|
use crate::graph_query_parser::{
|
33
34
|
Expression, FuzzyTerm, GraphQuery, GraphQueryParser, Node, NodeQuery, PathQuery, Relation, Term,
|
@@ -62,7 +63,72 @@ impl RelationsReaderService {
|
|
62
63
|
})
|
63
64
|
}
|
64
65
|
|
65
|
-
pub fn graph_search(&self,
|
66
|
+
pub fn graph_search(&self, request: &GraphSearchRequest) -> anyhow::Result<GraphSearchResponse> {
|
67
|
+
// No query? Empty graph
|
68
|
+
let Some(query) = &request.query else {
|
69
|
+
return Ok(GraphSearchResponse::default());
|
70
|
+
};
|
71
|
+
let Some(query) = &query.query else {
|
72
|
+
return Ok(GraphSearchResponse::default());
|
73
|
+
};
|
74
|
+
|
75
|
+
// Convert proto to tantivy query
|
76
|
+
let query = GraphQuery::try_from(query)?;
|
77
|
+
let parser = GraphQueryParser::new();
|
78
|
+
let index_query = parser.parse(query);
|
79
|
+
|
80
|
+
// Tantivy searcher query
|
81
|
+
let collector = TopDocs::with_limit(request.top_k as usize);
|
82
|
+
|
83
|
+
let searcher = self.reader.searcher();
|
84
|
+
let matching_docs = searcher.search(&index_query, &collector)?;
|
85
|
+
|
86
|
+
self.build_graph_response(&searcher, matching_docs.into_iter().map(|(_score, doc_address)| doc_address))
|
87
|
+
}
|
88
|
+
|
89
|
+
fn build_graph_response(
|
90
|
+
&self,
|
91
|
+
searcher: &Searcher,
|
92
|
+
docs: impl Iterator<Item = DocAddress>,
|
93
|
+
) -> anyhow::Result<nidx_protos::GraphSearchResponse> {
|
94
|
+
// We are being very naive and writing everything to the proto response. We could be smarter
|
95
|
+
// and deduplicates nodes and relations. As paths are pointers, this would improve proto
|
96
|
+
// size and ser/de time at expenses of deduplication effort.
|
97
|
+
|
98
|
+
let mut nodes = Vec::new();
|
99
|
+
let mut relations = Vec::new();
|
100
|
+
let mut graph = Vec::new();
|
101
|
+
|
102
|
+
for doc_address in docs {
|
103
|
+
let doc = searcher.doc(doc_address)?;
|
104
|
+
|
105
|
+
let source = io_maps::source_to_relation_node(&self.schema, &doc);
|
106
|
+
let relation = io_maps::doc_to_graph_relation(&self.schema, &doc);
|
107
|
+
let destination = io_maps::target_to_relation_node(&self.schema, &doc);
|
108
|
+
|
109
|
+
let source_idx = nodes.len();
|
110
|
+
nodes.push(source);
|
111
|
+
let relation_idx = relations.len();
|
112
|
+
relations.push(relation);
|
113
|
+
let destination_idx = nodes.len();
|
114
|
+
nodes.push(destination);
|
115
|
+
|
116
|
+
graph.push(nidx_protos::graph_search_response::Path {
|
117
|
+
source: source_idx as u32,
|
118
|
+
relation: relation_idx as u32,
|
119
|
+
destination: destination_idx as u32,
|
120
|
+
})
|
121
|
+
}
|
122
|
+
|
123
|
+
let response = nidx_protos::GraphSearchResponse {
|
124
|
+
nodes,
|
125
|
+
relations,
|
126
|
+
graph,
|
127
|
+
};
|
128
|
+
Ok(response)
|
129
|
+
}
|
130
|
+
|
131
|
+
pub fn inner_graph_search(&self, query: GraphQuery) -> anyhow::Result<nidx_protos::GraphSearchResponse> {
|
66
132
|
let parser = GraphQueryParser::new();
|
67
133
|
let index_query: Box<dyn Query> = parser.parse(query);
|
68
134
|
|
@@ -71,13 +137,8 @@ impl RelationsReaderService {
|
|
71
137
|
|
72
138
|
let searcher = self.reader.searcher();
|
73
139
|
let matching_docs = searcher.search(&index_query, &collector)?;
|
74
|
-
|
75
|
-
|
76
|
-
let doc = searcher.doc(doc_addr)?;
|
77
|
-
let relation = io_maps::doc_to_relation(&self.schema, &doc);
|
78
|
-
relations.push(relation);
|
79
|
-
}
|
80
|
-
Ok(relations)
|
140
|
+
|
141
|
+
self.build_graph_response(&searcher, matching_docs.into_iter().map(|(_score, doc_address)| doc_address))
|
81
142
|
}
|
82
143
|
}
|
83
144
|
|
@@ -238,7 +299,11 @@ impl RelationsReaderService {
|
|
238
299
|
}
|
239
300
|
|
240
301
|
let searcher = self.reader.searcher();
|
241
|
-
|
302
|
+
// FIXME: we are using a topdocs collector to get prefix results from source and target
|
303
|
+
// nodes. However, we are deduplicating afterwards, and this means we could end up with less
|
304
|
+
// results although results may exist. As a quick fix, we increase here the limit of the
|
305
|
+
// collector. The proper solution would be implementing a custom collector for this task
|
306
|
+
let topdocs = TopDocs::with_limit(NUMBER_OF_RESULTS_SUGGEST * 2);
|
242
307
|
let schema = &self.schema;
|
243
308
|
|
244
309
|
match search {
|
@@ -321,16 +386,17 @@ impl RelationsReaderService {
|
|
321
386
|
let relation_node = io_maps::source_to_relation_node(schema, &source_res_doc);
|
322
387
|
results.insert(HashedRelationNode(relation_node));
|
323
388
|
}
|
324
|
-
for (_,
|
325
|
-
let
|
326
|
-
let relation_node = io_maps::target_to_relation_node(schema, &
|
389
|
+
for (_, target_res_addr) in searcher.search(&target_prefix_query, &topdocs)? {
|
390
|
+
let target_res_doc = searcher.doc(target_res_addr)?;
|
391
|
+
let relation_node = io_maps::target_to_relation_node(schema, &target_res_doc);
|
327
392
|
results.insert(HashedRelationNode(relation_node));
|
328
393
|
}
|
329
|
-
response.nodes = results.into_iter().map(Into::into).collect();
|
394
|
+
response.nodes = results.into_iter().take(NUMBER_OF_RESULTS_SUGGEST).map(Into::into).collect();
|
330
395
|
Ok(Some(response))
|
331
396
|
}
|
332
397
|
}
|
333
398
|
|
399
|
+
#[derive(Debug)]
|
334
400
|
pub struct HashedRelationNode(pub RelationNode);
|
335
401
|
|
336
402
|
impl From<HashedRelationNode> for RelationNode {
|
@@ -101,51 +101,36 @@ impl Schema {
|
|
101
101
|
.expect("Documents must have a resource id")
|
102
102
|
}
|
103
103
|
|
104
|
-
pub fn source_value(&self, doc: &TantivyDocument) ->
|
105
|
-
doc.get_first(self.source_value)
|
106
|
-
.and_then(|i| i.as_str())
|
107
|
-
.map(String::from)
|
108
|
-
.expect("Documents must have a source value")
|
104
|
+
pub fn source_value<'a>(&self, doc: &'a TantivyDocument) -> &'a str {
|
105
|
+
doc.get_first(self.source_value).and_then(|i| i.as_str()).expect("Documents must have a source value")
|
109
106
|
}
|
110
107
|
|
111
108
|
pub fn source_type(&self, doc: &TantivyDocument) -> u64 {
|
112
109
|
doc.get_first(self.source_type).and_then(|i| i.as_u64()).expect("Documents must have a source type")
|
113
110
|
}
|
114
111
|
|
115
|
-
pub fn source_subtype(&self, doc: &TantivyDocument) ->
|
116
|
-
doc.get_first(self.source_subtype)
|
117
|
-
.and_then(|i| i.as_str())
|
118
|
-
.map(String::from)
|
119
|
-
.expect("Documents must have a source subtype")
|
112
|
+
pub fn source_subtype<'a>(&self, doc: &'a TantivyDocument) -> &'a str {
|
113
|
+
doc.get_first(self.source_subtype).and_then(|i| i.as_str()).expect("Documents must have a source subtype")
|
120
114
|
}
|
121
115
|
|
122
|
-
pub fn target_value(&self, doc: &TantivyDocument) ->
|
123
|
-
doc.get_first(self.target_value)
|
124
|
-
.and_then(|i| i.as_str())
|
125
|
-
.map(String::from)
|
126
|
-
.expect("Documents must have a target value")
|
116
|
+
pub fn target_value<'a>(&self, doc: &'a TantivyDocument) -> &'a str {
|
117
|
+
doc.get_first(self.target_value).and_then(|i| i.as_str()).expect("Documents must have a target value")
|
127
118
|
}
|
128
119
|
|
129
120
|
pub fn target_type(&self, doc: &TantivyDocument) -> u64 {
|
130
121
|
doc.get_first(self.target_type).and_then(|i| i.as_u64()).expect("Documents must have a target type")
|
131
122
|
}
|
132
123
|
|
133
|
-
pub fn target_subtype(&self, doc: &TantivyDocument) ->
|
134
|
-
doc.get_first(self.target_subtype)
|
135
|
-
.and_then(|i| i.as_str())
|
136
|
-
.map(String::from)
|
137
|
-
.expect("Documents must have a target subtype")
|
124
|
+
pub fn target_subtype<'a>(&self, doc: &'a TantivyDocument) -> &'a str {
|
125
|
+
doc.get_first(self.target_subtype).and_then(|i| i.as_str()).expect("Documents must have a target subtype")
|
138
126
|
}
|
139
127
|
|
140
128
|
pub fn relationship(&self, doc: &TantivyDocument) -> u64 {
|
141
129
|
doc.get_first(self.relationship).and_then(|i| i.as_u64()).expect("Documents must have a relationship type")
|
142
130
|
}
|
143
131
|
|
144
|
-
pub fn relationship_label(&self, doc: &TantivyDocument) ->
|
145
|
-
doc.get_first(self.label)
|
146
|
-
.and_then(|i| i.as_str())
|
147
|
-
.map(String::from)
|
148
|
-
.expect("Documents must have a relationship label")
|
132
|
+
pub fn relationship_label<'a>(&self, doc: &'a TantivyDocument) -> &'a str {
|
133
|
+
doc.get_first(self.label).and_then(|i| i.as_str()).expect("Documents must have a relationship label")
|
149
134
|
}
|
150
135
|
|
151
136
|
pub fn metadata<'a>(&self, doc: &'a TantivyDocument) -> Option<&'a [u8]> {
|