nidx-binding 6.3.5.post303__tar.gz → 6.3.5.post305__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.
Files changed (246) hide show
  1. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/PKG-INFO +1 -1
  2. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_protos/pyproject.toml +1 -1
  3. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_relation/src/graph_query_parser.rs +0 -2
  4. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_relation/src/io_maps.rs +13 -8
  5. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_relation/src/lib.rs +4 -4
  6. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_relation/src/reader.rs +3 -0
  7. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_relation/tests/test_graph_search.rs +1 -1
  8. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/pyproject.toml +1 -1
  9. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/searcher/query_planner.rs +155 -11
  10. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/searcher/shard_search.rs +40 -4
  11. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/tests/test_search_relations.rs +1 -0
  12. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-0cfce9b29547f8f5bafa6e440f86103be7b8c4ad2fd92db9ac223f4efbe23d10.json +0 -0
  13. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-1a561eed00f3dbe868bf5030059793300209179dc8fb73e4b57a54b5e81262fe.json +0 -0
  14. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-1d3fca2682e25a01143da92285297f134a6a105a96f64d87e0db3abb219855e4.json +0 -0
  15. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-249b3b57c27a71baa823f1fe0f0bba9c9af36f61c28f731e58beea60ec48e687.json +0 -0
  16. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-24cb6b683daa42d7125f862e25943ab4be7bf275cd8739f8da4859d701795e1a.json +0 -0
  17. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-263c8fce6db5b03bbd012fafdba6943cbee6ed7eb8976cdef4f5b01dde7ca6fd.json +0 -0
  18. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-2a5d92fb1638df830a4477a7cdf24e6db6b43034b7bbe74fdfb63e8afe2c4071.json +0 -0
  19. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-2b065a363f58caed60e3706603c1260dbf5a4c795604a5b68edda22eb07fec1b.json +0 -0
  20. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-3fc3cb39934683de8cd475ce1368c8373453eb1e01f81587d66b9d14b109ce6e.json +0 -0
  21. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-48f33b77b7c1633467b0b2efcaa1d3c207e7757e4f1d83b40d15e6ca365f7771.json +0 -0
  22. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-4ae09f2c08e2f324bee01bb8487a8f37678a1c5e9d327339235c50d4921a8949.json +0 -0
  23. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-4d7a76fa413c9ef0ce2a47ac7bb7e01d3e6a2aabded9487d21010a53efee8852.json +0 -0
  24. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-4fcbdd6657c7dc9b60b3a563dd41711b3dbcf72ce063427b7a01f8cddf34c244.json +0 -0
  25. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-577109ac00ccfbd38ecaccab94116f2f46a4caf5612afa372cded197123c1e08.json +0 -0
  26. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-5db25f97d8578d6d78f2f6bd4b72cc82a9b1b82805c6422d967ac63b20d99db4.json +0 -0
  27. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-5ec3233a3a23e926055056d46bdde17836a633066dbb5f349502648cd3ea9a60.json +0 -0
  28. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-66edb6ea424d8681927dcddb6bac5f1239175f4775d1f40417ba15054b0c6f19.json +0 -0
  29. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-6f9c6d201c1b5712efb68c363bffd3e0169c11f2a8f925e8cd4e8808599ff7b4.json +0 -0
  30. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-733c3ebacc86f444bf5e2dd79ade660c291e88a00fc09b722f6e2e191545874c.json +0 -0
  31. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-77a245aed9f6f8b9fc643efbd4b1e2e8e99bbba085e3e75a4f29321cd7b2a25c.json +0 -0
  32. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-7a3bf27c330c468a596e8a297cf7d8b192e31e67ecc5177c1267f579e8e247c7.json +0 -0
  33. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-7a7e59e47b30b12237511fd3d7da2d17b0471ad2b006af48d6a6f587c779692b.json +0 -0
  34. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-7dcbb33312cc9f11ae3a6d73b1ace017a9f19a8bf8f10304fc57977c8efeadff.json +0 -0
  35. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-7efa7c0d747afc4b6aed0586ff846c27839c3213ff7ee9f30c89b0d0f17e60e3.json +0 -0
  36. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-8493140d788604d498a4e48da4158708572ccc9d60185290a00d549cc84533db.json +0 -0
  37. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-8493bb0059b013eaca42fd10cd7d04f0d06a8acaed379eff0d23f3229edde9ee.json +0 -0
  38. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-87996b3d6c7a2195438d7038015b06949102bce8c7b8cd8db1f83aaf23cbe489.json +0 -0
  39. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-8d33717587c6ee8f5fc339a80b1212a73d6c03e45856b1d55457fc8074709dd0.json +0 -0
  40. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-8f096d8171b89f9615d18f95d696dc9e4fb3674e103161a713cdc806f7a68506.json +0 -0
  41. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-917732a56ee04bf3a6e127319dda8225210869c82f9828d878162394dba4e078.json +0 -0
  42. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-95fe4ef93ee90733db1b67ed7987f80b5aac792f1590b979c68b418d1599eb98.json +0 -0
  43. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-9b67658569b343d8b4b61ae0a7dc721f367f2ba33c7b69b9e68bfd5c9bff5206.json +0 -0
  44. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-9c8062ea55d070afef68309e58fa987eb37fda44e1efbf68c8ba2af7846cc968.json +0 -0
  45. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-a06e1d9f6f95e4c4c2b98310ebddcc9d963cc033582bf2e945e8bf3a301b4247.json +0 -0
  46. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-a55265c9b07bd1399961a6f1e757201fd0eebe868ddaf96437111113d80fce92.json +0 -0
  47. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-a891a37be5c2d7cce775c2dd33726b0318fd3839beab222a1b22bc6174604207.json +0 -0
  48. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-a945191bb4b3e37d6823ed3ad499339d007d69983105de8567777d9daf517b28.json +0 -0
  49. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-abe9f7832f2bd799ac44008da031e8d8ab52d4f5fbfc2a7e3974e8873bae55b2.json +0 -0
  50. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-aca588cca57a85e4d7fcc40c23cd87e57d53d11ca550d78e7e3d5e39e524fcd3.json +0 -0
  51. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-b02f8aafc00a7724510772ac41269e368c5bccf03ef7b4590e0ef6fd1a1bf64f.json +0 -0
  52. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-b742e17cabe2d64617e9aa64bafc782172f7a4f8023d1b54f952a0fb39f6b2b8.json +0 -0
  53. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-b94e349dbc0daec57f8f8f6e9e2dffb06100b1bb2b41d297c9f3b191da37a83d.json +0 -0
  54. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-bd9afa22994aba671dbf7b5f89b53c2ee02f53c0442a81265786a6d52d08512f.json +0 -0
  55. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-be60554eca98a5899efc6b49785cecd6444a6d39afed9e4a884ce2dbf162012c.json +0 -0
  56. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-bf49702b506c9a1650ece1f8e8d9f14834a902f8caefafe30ded55e2790f2188.json +0 -0
  57. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-bfcd21ed704cd305db5c17fcdec7d92aa4ac501913c9c9514d8ff92928c0c7e7.json +0 -0
  58. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-c3ab694650f49a75b146fb877a92e48c4f20f0d99f70f8ec859fbb763b01a1e5.json +0 -0
  59. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-c55542bb9fae544d87fae6f30e0fe8a9088d12075f4442ab4fe2fcd05e472234.json +0 -0
  60. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-cb29a6556d35ac630ee0aa885dd7341cf9573bd3efd216ff8a887b87686b03db.json +0 -0
  61. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-d0a1f341a89f5f14696b10baa72db9d95551c2b7e5fc67308fd52dc03dd98a92.json +0 -0
  62. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-d2ad0a0ca2649c9e4873cfcc1fc66d2d07cc45d0f65c560b06d7b5f592f4fa8a.json +0 -0
  63. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-d6cfe78eb635ba0b89ca4021a4dc8182d18ab5b197f30149cd28488eba4c1df5.json +0 -0
  64. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-d729b56dea00e49dcdba8cf0001e2811da27351eabe98212db3b589f18fc6f32.json +0 -0
  65. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-d9658bfd4e7170b41d03f2ddf2446d0bf54171c0d39d53bf20af2b8437f2ec48.json +0 -0
  66. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-dbba7b3d3289425bae711aedbf73fbc3699f857f86f84d95c3b556d05c5658b0.json +0 -0
  67. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-dcb96b649d6d63a58efd5d445453a4f3d7869a56ff714b69bedf3d616a0473ca.json +0 -0
  68. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-ebd876fbf5362a5900e75bc05f2f11c73c406ef7da4e95097fc6a1c3d1b8bc54.json +0 -0
  69. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-eef5cc6bce1cc14eba8f3e68971724ef181e88cffcedd74673615f2026b89a62.json +0 -0
  70. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/.sqlx/query-ef56d5fefc5774040d1ee397beadb475f6af02768c22f0e583c74062e2e821ce.json +0 -0
  71. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/Cargo.lock +0 -0
  72. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/Cargo.toml +0 -0
  73. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/README.md +0 -0
  74. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/migrations/20241007163501_initial.sql +0 -0
  75. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/migrations/20241211120039_merge_job_priority.sql +0 -0
  76. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/migrations/20241211121159_basic_indexes.sql +0 -0
  77. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/migrations/20241212151105_check_segment_records.sql +0 -0
  78. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/migrations/20250110145554_in_flight_messages.sql +0 -0
  79. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_binding/Cargo.toml +0 -0
  80. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_binding/src/lib.rs +0 -0
  81. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/Cargo.toml +0 -0
  82. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/src/fuzzy_query.rs +0 -0
  83. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/src/lib.rs +0 -0
  84. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/src/query_io.rs +0 -0
  85. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/src/reader.rs +0 -0
  86. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/src/request_types.rs +0 -0
  87. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/src/resource_indexer.rs +0 -0
  88. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/src/schema.rs +0 -0
  89. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/src/search_query.rs +0 -0
  90. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/src/search_response.rs +0 -0
  91. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/src/set_query.rs +0 -0
  92. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/src/stop_words.rs +0 -0
  93. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/README.md +0 -0
  94. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/ar.json +0 -0
  95. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/az.json +0 -0
  96. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/bn.json +0 -0
  97. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/ca.json +0 -0
  98. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/ch.json +0 -0
  99. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/da.json +0 -0
  100. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/de.json +0 -0
  101. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/el.json +0 -0
  102. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/en.json +0 -0
  103. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/es.json +0 -0
  104. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/eu.json +0 -0
  105. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/extract.py +0 -0
  106. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/fi.json +0 -0
  107. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/fr.json +0 -0
  108. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/he.json +0 -0
  109. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/hu.json +0 -0
  110. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/id.json +0 -0
  111. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/it.json +0 -0
  112. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/kk.json +0 -0
  113. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/ne.json +0 -0
  114. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/nl.json +0 -0
  115. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/no.json +0 -0
  116. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/pt.json +0 -0
  117. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/ro.json +0 -0
  118. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/ru.json +0 -0
  119. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/sl.json +0 -0
  120. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/sv.json +0 -0
  121. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/tg.json +0 -0
  122. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/stop_words/tr.json +0 -0
  123. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/tests/common/mod.rs +0 -0
  124. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_paragraph/tests/reader.rs +0 -0
  125. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_protos/Cargo.toml +0 -0
  126. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_protos/build.py +0 -0
  127. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_protos/build.rs +0 -0
  128. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_protos/src/lib.rs +0 -0
  129. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_protos/src/nidx.proto +0 -0
  130. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_relation/Cargo.toml +0 -0
  131. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_relation/src/graph_collector.rs +0 -0
  132. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_relation/src/resource_indexer.rs +0 -0
  133. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_relation/src/schema.rs +0 -0
  134. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_relation/src/top_unique_n.rs +0 -0
  135. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_relation/tests/common/mod.rs +0 -0
  136. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_relation/tests/test_graph_query_parser_search.rs +0 -0
  137. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_relation/tests/test_reader.rs +0 -0
  138. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_relation/tests/test_writer.rs +0 -0
  139. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_tantivy/Cargo.toml +0 -0
  140. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_tantivy/src/index_reader.rs +0 -0
  141. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_tantivy/src/lib.rs +0 -0
  142. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_tests/Cargo.toml +0 -0
  143. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_tests/src/graph.rs +0 -0
  144. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_tests/src/lib.rs +0 -0
  145. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_text/Cargo.toml +0 -0
  146. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_text/src/lib.rs +0 -0
  147. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_text/src/prefilter.rs +0 -0
  148. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_text/src/query_io.rs +0 -0
  149. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_text/src/reader.rs +0 -0
  150. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_text/src/request_types.rs +0 -0
  151. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_text/src/resource_indexer.rs +0 -0
  152. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_text/src/schema.rs +0 -0
  153. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_text/src/search_query.rs +0 -0
  154. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_text/tests/common/mod.rs +0 -0
  155. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_text/tests/test_deletions.rs +0 -0
  156. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_text/tests/test_flow.rs +0 -0
  157. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_text/tests/test_search.rs +0 -0
  158. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_text/tests/test_streaming.rs +0 -0
  159. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_types/Cargo.toml +0 -0
  160. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_types/src/lib.rs +0 -0
  161. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_types/src/prefilter.rs +0 -0
  162. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_types/src/query_language.rs +0 -0
  163. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/Cargo.toml +0 -0
  164. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/config.rs +0 -0
  165. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/data_point/disk_hnsw.rs +0 -0
  166. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/data_point/mod.rs +0 -0
  167. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/data_point/node.rs +0 -0
  168. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/data_point/ops_hnsw.rs +0 -0
  169. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/data_point/params.rs +0 -0
  170. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/data_point/ram_hnsw.rs +0 -0
  171. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/data_point/tests.rs +0 -0
  172. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/data_point_provider/mod.rs +0 -0
  173. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/data_point_provider/reader.rs +0 -0
  174. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/data_types/data_store.rs +0 -0
  175. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/data_types/mod.rs +0 -0
  176. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/data_types/trie.rs +0 -0
  177. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/data_types/trie_ram.rs +0 -0
  178. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/formula/mod.rs +0 -0
  179. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/indexer.rs +0 -0
  180. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/inverted_index/fst_index.rs +0 -0
  181. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/inverted_index/map.rs +0 -0
  182. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/inverted_index.rs +0 -0
  183. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/lib.rs +0 -0
  184. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/query_io.rs +0 -0
  185. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/request_types.rs +0 -0
  186. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/utils.rs +0 -0
  187. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/vector_types/dense_f32.rs +0 -0
  188. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/src/vector_types/mod.rs +0 -0
  189. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/tests/common/mod.rs +0 -0
  190. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/tests/test_basic_search.rs +0 -0
  191. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/nidx_vector/tests/test_hidden.rs +0 -0
  192. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/api/grpc.rs +0 -0
  193. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/api/shards.rs +0 -0
  194. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/api.rs +0 -0
  195. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/control.rs +0 -0
  196. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/errors.rs +0 -0
  197. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/grpc_server.rs +0 -0
  198. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/import_export.rs +0 -0
  199. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/indexer.rs +0 -0
  200. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/lib.rs +0 -0
  201. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/main.rs +0 -0
  202. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/metadata/deletion.rs +0 -0
  203. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/metadata/index.rs +0 -0
  204. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/metadata/index_request.rs +0 -0
  205. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/metadata/merge_job.rs +0 -0
  206. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/metadata/segment.rs +0 -0
  207. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/metadata/shard.rs +0 -0
  208. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/metadata.rs +0 -0
  209. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/metrics.rs +0 -0
  210. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/scheduler/audit_task.rs +0 -0
  211. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/scheduler/log_merge.rs +0 -0
  212. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/scheduler/merge_task.rs +0 -0
  213. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/scheduler/metrics_task.rs +0 -0
  214. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/scheduler/purge_tasks.rs +0 -0
  215. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/scheduler/vector_merge.rs +0 -0
  216. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/scheduler.rs +0 -0
  217. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/searcher/grpc.rs +0 -0
  218. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/searcher/index_cache.rs +0 -0
  219. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/searcher/query_language.rs +0 -0
  220. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/searcher/shard_selector.rs +0 -0
  221. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/searcher/shard_suggest.rs +0 -0
  222. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/searcher/streams.rs +0 -0
  223. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/searcher/sync.rs +0 -0
  224. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/searcher.rs +0 -0
  225. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/segment_store.rs +0 -0
  226. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/settings.rs +0 -0
  227. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/telemetry/duration_layer.rs +0 -0
  228. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/telemetry/log_format.rs +0 -0
  229. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/telemetry/middleware.rs +0 -0
  230. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/telemetry.rs +0 -0
  231. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/tool.rs +0 -0
  232. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/utilization_tracker.rs +0 -0
  233. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/src/worker.rs +0 -0
  234. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/tests/common/mod.rs +0 -0
  235. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/tests/common/services.rs +0 -0
  236. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/tests/test_date_range_search.rs +0 -0
  237. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/tests/test_search_filtering.rs +0 -0
  238. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/tests/test_search_sorting.rs +0 -0
  239. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/tests/test_searcher_cluster.rs +0 -0
  240. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/tests/test_security_search.rs +0 -0
  241. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/tests/test_shards.rs +0 -0
  242. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/tests/test_shards_api.rs +0 -0
  243. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/tests/test_suggest.rs +0 -0
  244. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/tests/test_synced_searcher.rs +0 -0
  245. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/tests/test_vector_normalization.rs +0 -0
  246. {nidx_binding-6.3.5.post303 → nidx_binding-6.3.5.post305}/tests/test_vectorsets.rs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nidx_binding
3
- Version: 6.3.5.post303
3
+ Version: 6.3.5.post305
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  Classifier: Programming Language :: Python :: Implementation :: PyPy
@@ -4,7 +4,7 @@ build-backend = "pdm.backend"
4
4
 
5
5
  [project]
6
6
  name = "nidx_protos"
7
- version = "6.3.5.post303"
7
+ version = "6.3.5.post305"
8
8
  license = { text = "AGPL" }
9
9
  description = "Protobuf definitions for nucliadb/nidx"
10
10
  authors = [ { name = "Nuclia", email = "nucliadb@nuclia.com" }]
@@ -221,8 +221,6 @@ impl<'a> GraphQueryParser<'a> {
221
221
  }
222
222
 
223
223
  pub fn parse(&self, query: GraphQuery) -> Box<dyn Query> {
224
- // REVIEW: if at some point we only want to return what the query really asks (nodes,
225
- // relations or paths), we may want to return the query and some kind of response builder
226
224
  match query {
227
225
  GraphQuery::NodeQuery(query) => self.parse_node_query(query),
228
226
  GraphQuery::RelationQuery(query) => self.parse_relation_query(query),
@@ -108,19 +108,24 @@ pub fn doc_to_relation(schema: &Schema, doc: &TantivyDocument) -> ProtosRelation
108
108
  }
109
109
  }
110
110
 
111
- pub fn doc_to_index_relation(schema: &Schema, doc: &TantivyDocument) -> IndexRelation {
112
- let resource_field_id = doc.get_first(schema.resource_field_id).map(|v| {
111
+ pub fn doc_to_resource_field_id(schema: &Schema, doc: &TantivyDocument) -> Option<String> {
112
+ doc.get_first(schema.resource_field_id).map(|v| {
113
113
  let (rid, fid) = decode_field_id(v.as_bytes().unwrap());
114
114
  format!("{}/{}", rid.simple(), fid)
115
- });
116
- let facets = doc
117
- .get_all(schema.facets)
115
+ })
116
+ }
117
+
118
+ pub fn doc_to_facets(schema: &Schema, doc: &TantivyDocument) -> Vec<String> {
119
+ doc.get_all(schema.facets)
118
120
  .map(|f| f.as_facet().unwrap().to_path_string())
119
- .collect();
121
+ .collect()
122
+ }
123
+
124
+ pub fn doc_to_index_relation(schema: &Schema, doc: &TantivyDocument) -> IndexRelation {
120
125
  IndexRelation {
121
126
  relation: Some(doc_to_relation(schema, doc)),
122
- resource_field_id,
123
- facets,
127
+ resource_field_id: doc_to_resource_field_id(schema, doc),
128
+ facets: doc_to_facets(schema, doc),
124
129
  }
125
130
  }
126
131
 
@@ -212,13 +212,13 @@ impl RelationSearcher {
212
212
  self.reader.relation_search(request)
213
213
  }
214
214
 
215
- #[instrument(name = "relation::graph_searcher", skip_all)]
215
+ #[instrument(name = "relation::graph_search", skip_all)]
216
216
  pub fn graph_search(
217
217
  &self,
218
218
  request: &GraphSearchRequest,
219
- prefilter: PrefilterResult,
219
+ prefilter: &PrefilterResult,
220
220
  ) -> anyhow::Result<GraphSearchResponse> {
221
- self.reader.graph_search(request, &prefilter)
221
+ self.reader.graph_search(request, prefilter)
222
222
  }
223
223
 
224
224
  #[instrument(name = "relation::suggest", skip_all)]
@@ -259,7 +259,7 @@ impl RelationSearcher {
259
259
  }),
260
260
  ..Default::default()
261
261
  };
262
- let response = self.graph_search(&request, PrefilterResult::All)?;
262
+ let response = self.graph_search(&request, &PrefilterResult::All)?;
263
263
  Ok(response.nodes)
264
264
  }
265
265
 
@@ -169,6 +169,8 @@ impl RelationsReaderService {
169
169
  relation: relation_idx as u32,
170
170
  destination: destination_idx as u32,
171
171
  metadata: io_maps::decode_metadata(&self.schema, &doc),
172
+ resource_field_id: io_maps::doc_to_resource_field_id(&self.schema, &doc),
173
+ facets: io_maps::doc_to_facets(&self.schema, &doc),
172
174
  })
173
175
  }
174
176
 
@@ -289,6 +291,7 @@ impl RelationsReaderService {
289
291
  })
290
292
  }
291
293
 
294
+ // TODO: remove unused method
292
295
  fn entities_subgraph_search(
293
296
  &self,
294
297
  request: &RelationSearchRequest,
@@ -75,7 +75,7 @@ fn _search(
75
75
  kind: kind.into(),
76
76
  ..Default::default()
77
77
  },
78
- prefilter,
78
+ &prefilter,
79
79
  )
80
80
  }
81
81
 
@@ -13,7 +13,7 @@ classifiers = [
13
13
  "Programming Language :: Python :: Implementation :: CPython",
14
14
  "Programming Language :: Python :: Implementation :: PyPy",
15
15
  ]
16
- version = "6.3.5.post303"
16
+ version = "6.3.5.post305"
17
17
 
18
18
  [project.urls]
19
19
  Homepage = "https://nuclia.com"
@@ -20,7 +20,12 @@
20
20
 
21
21
  use nidx_paragraph::ParagraphSearchRequest;
22
22
  use nidx_protos::filter_expression::Expr;
23
- use nidx_protos::{FilterExpression, FilterOperator, RelationSearchRequest, SearchRequest};
23
+ use nidx_protos::graph_query::{self, PathQuery, path_query};
24
+ use nidx_protos::graph_search_request::QueryKind;
25
+ use nidx_protos::search_request::GraphSearch;
26
+ use nidx_protos::{
27
+ EntitiesSubgraphRequest, FilterExpression, FilterOperator, GraphQuery, GraphSearchRequest, SearchRequest,
28
+ };
24
29
  use nidx_text::DocumentSearchRequest;
25
30
  use nidx_text::prefilter::*;
26
31
  use nidx_types::prefilter::PrefilterResult;
@@ -37,7 +42,7 @@ pub struct IndexQueries {
37
42
  pub vectors_request: Option<VectorSearchRequest>,
38
43
  pub paragraphs_request: Option<ParagraphSearchRequest>,
39
44
  pub texts_request: Option<DocumentSearchRequest>,
40
- pub relations_request: Option<RelationSearchRequest>,
45
+ pub relations_request: Option<GraphSearchRequest>,
41
46
  }
42
47
 
43
48
  impl IndexQueries {
@@ -65,7 +70,7 @@ pub struct QueryPlan {
65
70
  }
66
71
 
67
72
  pub fn build_query_plan(search_request: SearchRequest) -> anyhow::Result<QueryPlan> {
68
- let relations_request = compute_relations_request(&search_request);
73
+ let graph_request = compute_relations_request(&search_request)?;
69
74
  let texts_request = compute_texts_request(&search_request);
70
75
  let vectors_request = compute_vectors_request(&search_request)?;
71
76
  let paragraphs_request = compute_paragraphs_request(&search_request)?;
@@ -79,7 +84,7 @@ pub fn build_query_plan(search_request: SearchRequest) -> anyhow::Result<QueryPl
79
84
  vectors_request,
80
85
  paragraphs_request,
81
86
  texts_request,
82
- relations_request,
87
+ relations_request: graph_request,
83
88
  },
84
89
  })
85
90
  }
@@ -171,14 +176,153 @@ fn compute_vectors_request(search_request: &SearchRequest) -> anyhow::Result<Opt
171
176
  }))
172
177
  }
173
178
 
174
- fn compute_relations_request(search_request: &SearchRequest) -> Option<RelationSearchRequest> {
175
- search_request.relation_subgraph.as_ref()?;
179
+ #[allow(deprecated)]
180
+ fn compute_relations_request(search_request: &SearchRequest) -> anyhow::Result<Option<GraphSearchRequest>> {
181
+ let graph_search = match (
182
+ search_request.relation_subgraph.as_ref(),
183
+ search_request.graph_search.as_ref(),
184
+ ) {
185
+ (None, None) => return Ok(None),
186
+ (Some(_), Some(_)) => {
187
+ return Err(anyhow::anyhow!(
188
+ "Entities subgraph and graph search are mutually exclusive features"
189
+ ));
190
+ }
191
+ (Some(bfs_request), None) => {
192
+ // Bw/c: we'll convert the entities subgraph request into a graph request
193
+ convert_entities_subgraph_into_graph_search(bfs_request)
194
+ }
195
+ (None, Some(graph_search)) => graph_search.clone(),
196
+ };
176
197
 
177
- #[allow(deprecated)]
178
- Some(RelationSearchRequest {
179
- shard_id: search_request.shard.clone(),
180
- subgraph: search_request.relation_subgraph.clone(),
181
- })
198
+ Ok(Some(GraphSearchRequest {
199
+ query: graph_search.query,
200
+ top_k: std::cmp::max(search_request.result_per_page as u32, 20),
201
+ kind: QueryKind::Path.into(),
202
+ // we don't need to populate filters nor shard as they won't be used in search. Prefilter
203
+ // will be done with request filters and shard have been already obtained
204
+ ..Default::default()
205
+ }))
206
+ }
207
+
208
+ fn convert_entities_subgraph_into_graph_search(bfs_request: &EntitiesSubgraphRequest) -> GraphSearch {
209
+ if bfs_request.entry_points.is_empty() {
210
+ return GraphSearch { query: None };
211
+ }
212
+
213
+ // Entry points are source or target nodes we want to search for. We want any undirected
214
+ // path containing any entry point
215
+ let entry_points_queries: Vec<PathQuery> = bfs_request
216
+ .entry_points
217
+ .iter()
218
+ .map(|entry_point| PathQuery {
219
+ query: Some(path_query::Query::Path(graph_query::Path {
220
+ source: Some(graph_query::Node {
221
+ value: Some(entry_point.value.clone()),
222
+ node_type: Some(entry_point.ntype),
223
+ node_subtype: Some(entry_point.subtype.clone()),
224
+ ..Default::default()
225
+ }),
226
+ undirected: true,
227
+ ..Default::default()
228
+ })),
229
+ })
230
+ .collect();
231
+
232
+ // A query can specifiy nodes marked as deleted in the db (but not removed from the index).
233
+ // We want to exclude any path containing any of those nodes.
234
+ //
235
+ // The request groups values per subtype (to optimize request size) but, as we don't support
236
+ // OR at node value level, we'll split them.
237
+ let deleted_nodes_queries: Vec<PathQuery> = bfs_request
238
+ .deleted_entities
239
+ .iter()
240
+ .flat_map(|deleted_nodes| {
241
+ if deleted_nodes.node_values.is_empty() {
242
+ return None;
243
+ }
244
+ let subtype = &deleted_nodes.node_subtype;
245
+
246
+ let subqueries = deleted_nodes
247
+ .node_values
248
+ .iter()
249
+ .map(|deleted_entity_value| PathQuery {
250
+ query: Some(path_query::Query::Path(graph_query::Path {
251
+ source: Some(graph_query::Node {
252
+ value: Some(deleted_entity_value.clone()),
253
+ node_subtype: Some(subtype.clone()),
254
+ ..Default::default()
255
+ }),
256
+ undirected: true,
257
+ ..Default::default()
258
+ })),
259
+ })
260
+ .collect::<Vec<_>>();
261
+ Some(subqueries)
262
+ })
263
+ .flatten()
264
+ .collect();
265
+
266
+ // Subtypes can also be marked as deleted in the db (but kept in the index). We also
267
+ // want to exclude any triplet containg a node with such subtypes
268
+ let excluded_subtypes_queries: Vec<PathQuery> = bfs_request
269
+ .deleted_groups
270
+ .iter()
271
+ .map(|deleted_subtype| PathQuery {
272
+ query: Some(path_query::Query::Path(graph_query::Path {
273
+ source: Some(graph_query::Node {
274
+ node_subtype: Some(deleted_subtype.clone()),
275
+ ..Default::default()
276
+ }),
277
+ undirected: true,
278
+ ..Default::default()
279
+ })),
280
+ })
281
+ .collect::<Vec<_>>();
282
+
283
+ let mut subqueries = vec![];
284
+ if !entry_points_queries.is_empty() {
285
+ // match any entry point
286
+ subqueries.push(PathQuery {
287
+ query: Some(path_query::Query::BoolOr(graph_query::BoolQuery {
288
+ operands: entry_points_queries,
289
+ })),
290
+ });
291
+ }
292
+
293
+ if !deleted_nodes_queries.is_empty() {
294
+ // exclude deleted nodes
295
+ subqueries.push(PathQuery {
296
+ query: Some(path_query::Query::BoolNot(Box::new(PathQuery {
297
+ query: Some(path_query::Query::BoolOr(graph_query::BoolQuery {
298
+ operands: deleted_nodes_queries,
299
+ })),
300
+ }))),
301
+ });
302
+ }
303
+
304
+ if !excluded_subtypes_queries.is_empty() {
305
+ // exclude specific subtypes
306
+ subqueries.push(PathQuery {
307
+ query: Some(path_query::Query::BoolNot(Box::new(PathQuery {
308
+ query: Some(path_query::Query::BoolOr(graph_query::BoolQuery {
309
+ operands: excluded_subtypes_queries,
310
+ })),
311
+ }))),
312
+ });
313
+ }
314
+
315
+ let graph_query = GraphQuery {
316
+ path: Some(PathQuery {
317
+ query: Some(path_query::Query::BoolAnd(graph_query::BoolQuery {
318
+ operands: subqueries,
319
+ })),
320
+ }),
321
+ };
322
+
323
+ GraphSearch {
324
+ query: Some(graph_query),
325
+ }
182
326
  }
183
327
 
184
328
  pub fn filter_to_boolean_expression(filter: FilterExpression) -> anyhow::Result<BooleanExpression<String>> {
@@ -21,7 +21,10 @@
21
21
  use std::sync::Arc;
22
22
 
23
23
  use nidx_paragraph::ParagraphSearcher;
24
- use nidx_protos::{GraphSearchRequest, GraphSearchResponse, SearchRequest, SearchResponse};
24
+ use nidx_protos::{
25
+ EntitiesSubgraphResponse, GraphSearchRequest, GraphSearchResponse, IndexRelation, Relation, RelationSearchResponse,
26
+ SearchRequest, SearchResponse,
27
+ };
25
28
  use nidx_relation::RelationSearcher;
26
29
  use nidx_text::{TextSearcher, prefilter::PreFilterRequest};
27
30
  use nidx_types::prefilter::PrefilterResult;
@@ -131,7 +134,7 @@ fn blocking_search(
131
134
 
132
135
  let relation_task = index_queries
133
136
  .relations_request
134
- .map(|request| move || relation_searcher.unwrap().search(&request));
137
+ .map(|request| move || relation_searcher.unwrap().graph_search(&request, prefilter));
135
138
 
136
139
  let vector_task = index_queries.vectors_request.map(|mut request| {
137
140
  request.id = search_id.clone();
@@ -169,11 +172,44 @@ fn blocking_search(
169
172
  }
170
173
  });
171
174
 
175
+ let graph_response = rrelation.transpose()?;
176
+
177
+ // Bw/c: convert graph search into relation response
178
+ let relation_response = graph_response.clone().map(|graph_response| {
179
+ let relations = graph_response
180
+ .graph
181
+ .into_iter()
182
+ .map(|path| {
183
+ let source = graph_response.nodes[path.source as usize].clone();
184
+ let relation = graph_response.relations[path.relation as usize].clone();
185
+ let destination = graph_response.nodes[path.destination as usize].clone();
186
+
187
+ IndexRelation {
188
+ relation: Some(Relation {
189
+ source: Some(source),
190
+ to: Some(destination),
191
+ relation: relation.relation_type,
192
+ relation_label: relation.label,
193
+ metadata: path.metadata,
194
+ }),
195
+ resource_field_id: path.resource_field_id,
196
+ facets: path.facets,
197
+ }
198
+ })
199
+ .collect();
200
+
201
+ RelationSearchResponse {
202
+ subgraph: Some(EntitiesSubgraphResponse { relations }),
203
+ ..Default::default()
204
+ }
205
+ });
206
+
172
207
  Ok(SearchResponse {
173
208
  document: rtext.transpose()?,
174
209
  paragraph: rparagraph.transpose()?,
175
210
  vector: rvector.transpose()?,
176
- relation: rrelation.transpose()?,
211
+ relation: relation_response,
212
+ graph: graph_response,
177
213
  })
178
214
  }
179
215
 
@@ -223,7 +259,7 @@ pub async fn graph_search(
223
259
  let results = tokio::task::spawn_blocking(move || {
224
260
  current.in_scope(|| {
225
261
  let searcher: &RelationSearcher = relation_searcher.as_ref().into();
226
- searcher.graph_search(&graph_request, prefilter)
262
+ searcher.graph_search(&graph_request, &prefilter)
227
263
  })
228
264
  })
229
265
  .await??;
@@ -1115,6 +1115,7 @@ async fn relation_search(
1115
1115
  fixture: &mut NidxFixture,
1116
1116
  request: RelationSearchRequest,
1117
1117
  ) -> anyhow::Result<RelationSearchResponse> {
1118
+ #[allow(deprecated)]
1118
1119
  let request = SearchRequest {
1119
1120
  shard: request.shard_id,
1120
1121
  vectorset: "english".to_string(),