nidx-binding 6.3.4.post178__tar.gz → 6.3.4.post183__tar.gz

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