nidx-binding 6.3.5.post243__tar.gz → 6.3.5.post268__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.post243 → nidx_binding-6.3.5.post268}/PKG-INFO +1 -1
  2. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_protos/pyproject.toml +1 -1
  3. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_text/src/lib.rs +43 -10
  4. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_text/src/reader.rs +5 -82
  5. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_text/src/resource_indexer.rs +4 -9
  6. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_text/src/schema.rs +9 -27
  7. nidx_binding-6.3.5.post268/nidx_text/tests/test_deletions.rs +89 -0
  8. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/pyproject.toml +1 -1
  9. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/import_export.rs +12 -13
  10. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-0cfce9b29547f8f5bafa6e440f86103be7b8c4ad2fd92db9ac223f4efbe23d10.json +0 -0
  11. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-1a561eed00f3dbe868bf5030059793300209179dc8fb73e4b57a54b5e81262fe.json +0 -0
  12. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-1d3fca2682e25a01143da92285297f134a6a105a96f64d87e0db3abb219855e4.json +0 -0
  13. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-249b3b57c27a71baa823f1fe0f0bba9c9af36f61c28f731e58beea60ec48e687.json +0 -0
  14. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-24cb6b683daa42d7125f862e25943ab4be7bf275cd8739f8da4859d701795e1a.json +0 -0
  15. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-263c8fce6db5b03bbd012fafdba6943cbee6ed7eb8976cdef4f5b01dde7ca6fd.json +0 -0
  16. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-2a5d92fb1638df830a4477a7cdf24e6db6b43034b7bbe74fdfb63e8afe2c4071.json +0 -0
  17. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-2b065a363f58caed60e3706603c1260dbf5a4c795604a5b68edda22eb07fec1b.json +0 -0
  18. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-3fc3cb39934683de8cd475ce1368c8373453eb1e01f81587d66b9d14b109ce6e.json +0 -0
  19. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-48f33b77b7c1633467b0b2efcaa1d3c207e7757e4f1d83b40d15e6ca365f7771.json +0 -0
  20. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-4ae09f2c08e2f324bee01bb8487a8f37678a1c5e9d327339235c50d4921a8949.json +0 -0
  21. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-4d7a76fa413c9ef0ce2a47ac7bb7e01d3e6a2aabded9487d21010a53efee8852.json +0 -0
  22. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-4fcbdd6657c7dc9b60b3a563dd41711b3dbcf72ce063427b7a01f8cddf34c244.json +0 -0
  23. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-577109ac00ccfbd38ecaccab94116f2f46a4caf5612afa372cded197123c1e08.json +0 -0
  24. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-5db25f97d8578d6d78f2f6bd4b72cc82a9b1b82805c6422d967ac63b20d99db4.json +0 -0
  25. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-5ec3233a3a23e926055056d46bdde17836a633066dbb5f349502648cd3ea9a60.json +0 -0
  26. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-66edb6ea424d8681927dcddb6bac5f1239175f4775d1f40417ba15054b0c6f19.json +0 -0
  27. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-6f9c6d201c1b5712efb68c363bffd3e0169c11f2a8f925e8cd4e8808599ff7b4.json +0 -0
  28. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-733c3ebacc86f444bf5e2dd79ade660c291e88a00fc09b722f6e2e191545874c.json +0 -0
  29. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-77a245aed9f6f8b9fc643efbd4b1e2e8e99bbba085e3e75a4f29321cd7b2a25c.json +0 -0
  30. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-7a3bf27c330c468a596e8a297cf7d8b192e31e67ecc5177c1267f579e8e247c7.json +0 -0
  31. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-7a7e59e47b30b12237511fd3d7da2d17b0471ad2b006af48d6a6f587c779692b.json +0 -0
  32. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-7dcbb33312cc9f11ae3a6d73b1ace017a9f19a8bf8f10304fc57977c8efeadff.json +0 -0
  33. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-7efa7c0d747afc4b6aed0586ff846c27839c3213ff7ee9f30c89b0d0f17e60e3.json +0 -0
  34. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-8493140d788604d498a4e48da4158708572ccc9d60185290a00d549cc84533db.json +0 -0
  35. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-8493bb0059b013eaca42fd10cd7d04f0d06a8acaed379eff0d23f3229edde9ee.json +0 -0
  36. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-87996b3d6c7a2195438d7038015b06949102bce8c7b8cd8db1f83aaf23cbe489.json +0 -0
  37. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-8d33717587c6ee8f5fc339a80b1212a73d6c03e45856b1d55457fc8074709dd0.json +0 -0
  38. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-8f096d8171b89f9615d18f95d696dc9e4fb3674e103161a713cdc806f7a68506.json +0 -0
  39. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-917732a56ee04bf3a6e127319dda8225210869c82f9828d878162394dba4e078.json +0 -0
  40. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-95fe4ef93ee90733db1b67ed7987f80b5aac792f1590b979c68b418d1599eb98.json +0 -0
  41. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-9b67658569b343d8b4b61ae0a7dc721f367f2ba33c7b69b9e68bfd5c9bff5206.json +0 -0
  42. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-9c8062ea55d070afef68309e58fa987eb37fda44e1efbf68c8ba2af7846cc968.json +0 -0
  43. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-a06e1d9f6f95e4c4c2b98310ebddcc9d963cc033582bf2e945e8bf3a301b4247.json +0 -0
  44. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-a55265c9b07bd1399961a6f1e757201fd0eebe868ddaf96437111113d80fce92.json +0 -0
  45. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-a891a37be5c2d7cce775c2dd33726b0318fd3839beab222a1b22bc6174604207.json +0 -0
  46. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-a945191bb4b3e37d6823ed3ad499339d007d69983105de8567777d9daf517b28.json +0 -0
  47. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-abe9f7832f2bd799ac44008da031e8d8ab52d4f5fbfc2a7e3974e8873bae55b2.json +0 -0
  48. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-aca588cca57a85e4d7fcc40c23cd87e57d53d11ca550d78e7e3d5e39e524fcd3.json +0 -0
  49. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-b02f8aafc00a7724510772ac41269e368c5bccf03ef7b4590e0ef6fd1a1bf64f.json +0 -0
  50. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-b742e17cabe2d64617e9aa64bafc782172f7a4f8023d1b54f952a0fb39f6b2b8.json +0 -0
  51. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-b94e349dbc0daec57f8f8f6e9e2dffb06100b1bb2b41d297c9f3b191da37a83d.json +0 -0
  52. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-bd9afa22994aba671dbf7b5f89b53c2ee02f53c0442a81265786a6d52d08512f.json +0 -0
  53. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-be60554eca98a5899efc6b49785cecd6444a6d39afed9e4a884ce2dbf162012c.json +0 -0
  54. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-bf49702b506c9a1650ece1f8e8d9f14834a902f8caefafe30ded55e2790f2188.json +0 -0
  55. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-bfcd21ed704cd305db5c17fcdec7d92aa4ac501913c9c9514d8ff92928c0c7e7.json +0 -0
  56. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-c3ab694650f49a75b146fb877a92e48c4f20f0d99f70f8ec859fbb763b01a1e5.json +0 -0
  57. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-c55542bb9fae544d87fae6f30e0fe8a9088d12075f4442ab4fe2fcd05e472234.json +0 -0
  58. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-cb29a6556d35ac630ee0aa885dd7341cf9573bd3efd216ff8a887b87686b03db.json +0 -0
  59. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-d0a1f341a89f5f14696b10baa72db9d95551c2b7e5fc67308fd52dc03dd98a92.json +0 -0
  60. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-d2ad0a0ca2649c9e4873cfcc1fc66d2d07cc45d0f65c560b06d7b5f592f4fa8a.json +0 -0
  61. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-d6cfe78eb635ba0b89ca4021a4dc8182d18ab5b197f30149cd28488eba4c1df5.json +0 -0
  62. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-d729b56dea00e49dcdba8cf0001e2811da27351eabe98212db3b589f18fc6f32.json +0 -0
  63. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-d9658bfd4e7170b41d03f2ddf2446d0bf54171c0d39d53bf20af2b8437f2ec48.json +0 -0
  64. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-dbba7b3d3289425bae711aedbf73fbc3699f857f86f84d95c3b556d05c5658b0.json +0 -0
  65. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-dcb96b649d6d63a58efd5d445453a4f3d7869a56ff714b69bedf3d616a0473ca.json +0 -0
  66. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-ebd876fbf5362a5900e75bc05f2f11c73c406ef7da4e95097fc6a1c3d1b8bc54.json +0 -0
  67. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-eef5cc6bce1cc14eba8f3e68971724ef181e88cffcedd74673615f2026b89a62.json +0 -0
  68. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/.sqlx/query-ef56d5fefc5774040d1ee397beadb475f6af02768c22f0e583c74062e2e821ce.json +0 -0
  69. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/Cargo.lock +0 -0
  70. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/Cargo.toml +0 -0
  71. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/README.md +0 -0
  72. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/migrations/20241007163501_initial.sql +0 -0
  73. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/migrations/20241211120039_merge_job_priority.sql +0 -0
  74. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/migrations/20241211121159_basic_indexes.sql +0 -0
  75. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/migrations/20241212151105_check_segment_records.sql +0 -0
  76. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/migrations/20250110145554_in_flight_messages.sql +0 -0
  77. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_binding/Cargo.toml +0 -0
  78. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_binding/src/lib.rs +0 -0
  79. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/Cargo.toml +0 -0
  80. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/src/fuzzy_query.rs +0 -0
  81. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/src/lib.rs +0 -0
  82. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/src/query_io.rs +0 -0
  83. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/src/reader.rs +0 -0
  84. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/src/request_types.rs +0 -0
  85. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/src/resource_indexer.rs +0 -0
  86. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/src/schema.rs +0 -0
  87. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/src/search_query.rs +0 -0
  88. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/src/search_response.rs +0 -0
  89. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/src/set_query.rs +0 -0
  90. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/src/stop_words.rs +0 -0
  91. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/README.md +0 -0
  92. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/ar.json +0 -0
  93. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/az.json +0 -0
  94. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/bn.json +0 -0
  95. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/ca.json +0 -0
  96. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/ch.json +0 -0
  97. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/da.json +0 -0
  98. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/de.json +0 -0
  99. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/el.json +0 -0
  100. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/en.json +0 -0
  101. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/es.json +0 -0
  102. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/eu.json +0 -0
  103. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/extract.py +0 -0
  104. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/fi.json +0 -0
  105. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/fr.json +0 -0
  106. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/he.json +0 -0
  107. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/hu.json +0 -0
  108. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/id.json +0 -0
  109. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/it.json +0 -0
  110. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/kk.json +0 -0
  111. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/ne.json +0 -0
  112. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/nl.json +0 -0
  113. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/no.json +0 -0
  114. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/pt.json +0 -0
  115. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/ro.json +0 -0
  116. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/ru.json +0 -0
  117. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/sl.json +0 -0
  118. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/sv.json +0 -0
  119. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/tg.json +0 -0
  120. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/stop_words/tr.json +0 -0
  121. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/tests/common/mod.rs +0 -0
  122. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_paragraph/tests/reader.rs +0 -0
  123. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_protos/Cargo.toml +0 -0
  124. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_protos/build.py +0 -0
  125. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_protos/build.rs +0 -0
  126. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_protos/src/lib.rs +0 -0
  127. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_protos/src/nidx.proto +0 -0
  128. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_relation/Cargo.toml +0 -0
  129. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_relation/src/graph_collector.rs +0 -0
  130. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_relation/src/graph_query_parser.rs +0 -0
  131. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_relation/src/io_maps.rs +0 -0
  132. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_relation/src/lib.rs +0 -0
  133. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_relation/src/reader.rs +0 -0
  134. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_relation/src/resource_indexer.rs +0 -0
  135. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_relation/src/schema.rs +0 -0
  136. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_relation/src/top_unique_n.rs +0 -0
  137. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_relation/tests/common/mod.rs +0 -0
  138. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_relation/tests/test_graph_query_parser_search.rs +0 -0
  139. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_relation/tests/test_graph_search.rs +0 -0
  140. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_relation/tests/test_reader.rs +0 -0
  141. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_relation/tests/test_writer.rs +0 -0
  142. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_tantivy/Cargo.toml +0 -0
  143. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_tantivy/src/index_reader.rs +0 -0
  144. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_tantivy/src/lib.rs +0 -0
  145. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_tests/Cargo.toml +0 -0
  146. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_tests/src/graph.rs +0 -0
  147. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_tests/src/lib.rs +0 -0
  148. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_text/Cargo.toml +0 -0
  149. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_text/src/prefilter.rs +0 -0
  150. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_text/src/query_io.rs +0 -0
  151. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_text/src/request_types.rs +0 -0
  152. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_text/src/search_query.rs +0 -0
  153. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_text/tests/common/mod.rs +0 -0
  154. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_text/tests/test_flow.rs +0 -0
  155. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_text/tests/test_search.rs +0 -0
  156. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_text/tests/test_streaming.rs +0 -0
  157. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_types/Cargo.toml +0 -0
  158. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_types/src/lib.rs +0 -0
  159. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_types/src/prefilter.rs +0 -0
  160. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_types/src/query_language.rs +0 -0
  161. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/Cargo.toml +0 -0
  162. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/config.rs +0 -0
  163. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/data_point/disk_hnsw.rs +0 -0
  164. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/data_point/mod.rs +0 -0
  165. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/data_point/node.rs +0 -0
  166. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/data_point/ops_hnsw.rs +0 -0
  167. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/data_point/params.rs +0 -0
  168. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/data_point/ram_hnsw.rs +0 -0
  169. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/data_point/tests.rs +0 -0
  170. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/data_point_provider/mod.rs +0 -0
  171. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/data_point_provider/reader.rs +0 -0
  172. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/data_types/data_store.rs +0 -0
  173. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/data_types/mod.rs +0 -0
  174. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/data_types/trie.rs +0 -0
  175. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/data_types/trie_ram.rs +0 -0
  176. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/formula/mod.rs +0 -0
  177. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/indexer.rs +0 -0
  178. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/inverted_index/fst_index.rs +0 -0
  179. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/inverted_index/map.rs +0 -0
  180. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/inverted_index.rs +0 -0
  181. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/lib.rs +0 -0
  182. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/query_io.rs +0 -0
  183. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/request_types.rs +0 -0
  184. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/utils.rs +0 -0
  185. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/vector_types/dense_f32.rs +0 -0
  186. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/src/vector_types/mod.rs +0 -0
  187. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/tests/common/mod.rs +0 -0
  188. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/tests/test_basic_search.rs +0 -0
  189. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/nidx_vector/tests/test_hidden.rs +0 -0
  190. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/api/grpc.rs +0 -0
  191. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/api/shards.rs +0 -0
  192. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/api.rs +0 -0
  193. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/control.rs +0 -0
  194. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/errors.rs +0 -0
  195. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/grpc_server.rs +0 -0
  196. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/indexer.rs +0 -0
  197. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/lib.rs +0 -0
  198. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/main.rs +0 -0
  199. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/metadata/deletion.rs +0 -0
  200. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/metadata/index.rs +0 -0
  201. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/metadata/index_request.rs +0 -0
  202. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/metadata/merge_job.rs +0 -0
  203. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/metadata/segment.rs +0 -0
  204. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/metadata/shard.rs +0 -0
  205. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/metadata.rs +0 -0
  206. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/metrics.rs +0 -0
  207. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/scheduler/audit_task.rs +0 -0
  208. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/scheduler/log_merge.rs +0 -0
  209. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/scheduler/merge_task.rs +0 -0
  210. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/scheduler/metrics_task.rs +0 -0
  211. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/scheduler/purge_tasks.rs +0 -0
  212. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/scheduler/vector_merge.rs +0 -0
  213. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/scheduler.rs +0 -0
  214. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/searcher/grpc.rs +0 -0
  215. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/searcher/index_cache.rs +0 -0
  216. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/searcher/query_language.rs +0 -0
  217. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/searcher/query_planner.rs +0 -0
  218. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/searcher/shard_search.rs +0 -0
  219. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/searcher/shard_selector.rs +0 -0
  220. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/searcher/shard_suggest.rs +0 -0
  221. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/searcher/streams.rs +0 -0
  222. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/searcher/sync.rs +0 -0
  223. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/searcher.rs +0 -0
  224. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/segment_store.rs +0 -0
  225. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/settings.rs +0 -0
  226. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/telemetry/duration_layer.rs +0 -0
  227. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/telemetry/log_format.rs +0 -0
  228. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/telemetry/middleware.rs +0 -0
  229. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/telemetry.rs +0 -0
  230. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/tool.rs +0 -0
  231. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/utilization_tracker.rs +0 -0
  232. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/src/worker.rs +0 -0
  233. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/tests/common/mod.rs +0 -0
  234. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/tests/common/services.rs +0 -0
  235. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/tests/test_date_range_search.rs +0 -0
  236. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/tests/test_search_filtering.rs +0 -0
  237. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/tests/test_search_relations.rs +0 -0
  238. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/tests/test_search_sorting.rs +0 -0
  239. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/tests/test_searcher_cluster.rs +0 -0
  240. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/tests/test_security_search.rs +0 -0
  241. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/tests/test_shards.rs +0 -0
  242. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/tests/test_shards_api.rs +0 -0
  243. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/tests/test_suggest.rs +0 -0
  244. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/tests/test_synced_searcher.rs +0 -0
  245. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/tests/test_vector_normalization.rs +0 -0
  246. {nidx_binding-6.3.5.post243 → nidx_binding-6.3.5.post268}/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.post243
3
+ Version: 6.3.5.post268
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.post243"
7
+ version = "6.3.5.post268"
8
8
  license = { text = "AGPL" }
9
9
  description = "Protobuf definitions for nucliadb/nidx"
10
10
  authors = [ { name = "Nuclia", email = "nucliadb@nuclia.com" }]
@@ -37,7 +37,7 @@ use prefilter::PreFilterRequest;
37
37
  use reader::TextReaderService;
38
38
  use resource_indexer::index_document;
39
39
  use schema::TextSchema;
40
-
40
+ use schema::encode_field_id_bytes;
41
41
  use serde::{Deserialize, Serialize};
42
42
  use tantivy::indexer::merge_indices;
43
43
  use tantivy::schema::Field;
@@ -46,7 +46,8 @@ use tantivy::{
46
46
  directory::MmapDirectory,
47
47
  query::{Query, TermSetQuery},
48
48
  };
49
- use tracing::instrument;
49
+ use tracing::*;
50
+ use uuid::Uuid;
50
51
 
51
52
  pub use request_types::DocumentSearchRequest;
52
53
 
@@ -74,12 +75,38 @@ fn default_version() -> u64 {
74
75
 
75
76
  pub struct TextIndexer;
76
77
 
77
- pub struct TextDeletionQueryBuilder(Field);
78
+ pub struct TextDeletionQueryBuilder {
79
+ resource_uuid: Field,
80
+ encoded_field_id_bytes: Field,
81
+ }
78
82
  impl DeletionQueryBuilder for TextDeletionQueryBuilder {
79
83
  fn query<'a>(&self, keys: impl Iterator<Item = &'a String>) -> Box<dyn Query> {
80
- Box::new(TermSetQuery::new(
81
- keys.map(|k| Term::from_field_bytes(self.0, k.as_bytes())),
82
- ))
84
+ Box::new(TermSetQuery::new(keys.filter_map(|k| {
85
+ // Our keys can be resource ids or encoded field ids (e.g: uuid/t/text)
86
+ // match the corresponding tantivy field
87
+ let is_field = k.len() > 32;
88
+ if is_field {
89
+ let Ok(uuid) = Uuid::parse_str(&k[0..32]) else {
90
+ error!(?k, "Invalid deletion key in nidx_text");
91
+ return None;
92
+ };
93
+ let field_id = &k[33..];
94
+ Some(Term::from_field_bytes(
95
+ self.encoded_field_id_bytes,
96
+ &encode_field_id_bytes(uuid, field_id)[..],
97
+ ))
98
+ } else {
99
+ Some(Term::from_field_bytes(self.resource_uuid, k.as_bytes()))
100
+ }
101
+ })))
102
+ }
103
+ }
104
+ impl TextDeletionQueryBuilder {
105
+ fn new(schema: &TextSchema) -> Self {
106
+ TextDeletionQueryBuilder {
107
+ resource_uuid: schema.schema.get_field("uuid").unwrap(),
108
+ encoded_field_id_bytes: schema.schema.get_field("encoded_field_id_bytes").unwrap(),
109
+ }
83
110
  }
84
111
  }
85
112
 
@@ -100,6 +127,8 @@ impl TextIndexer {
100
127
 
101
128
  pub fn deletions_for_resource(&self, resource: &nidx_protos::Resource) -> Vec<String> {
102
129
  vec![resource.resource.as_ref().unwrap().uuid.clone()]
130
+ // TODO: Uncomment in another PR
131
+ // resource.texts_to_delete.clone()
103
132
  }
104
133
 
105
134
  #[instrument(name = "text::merge", skip_all)]
@@ -109,8 +138,9 @@ impl TextIndexer {
109
138
  config: TextConfig,
110
139
  open_index: impl OpenIndexMetadata<TantivyMeta>,
111
140
  ) -> anyhow::Result<TantivySegmentMetadata> {
112
- let schema = TextSchema::new(config.version).schema;
113
- let query_builder = TextDeletionQueryBuilder(schema.get_field("uuid").unwrap());
141
+ let text_schema = TextSchema::new(config.version);
142
+ let query_builder = TextDeletionQueryBuilder::new(&text_schema);
143
+ let schema = text_schema.clone().schema;
114
144
  let index = open_index_with_deletions(schema, open_index, query_builder)?;
115
145
 
116
146
  let output_index = merge_indices(&[index], MmapDirectory::open(work_dir)?)?;
@@ -134,8 +164,11 @@ impl TextSearcher {
134
164
  #[instrument(name = "text::open", skip_all)]
135
165
  pub fn open(config: TextConfig, open_index: impl OpenIndexMetadata<TantivyMeta>) -> anyhow::Result<Self> {
136
166
  let schema = TextSchema::new(config.version);
137
- let index =
138
- open_index_with_deletions(schema.schema.clone(), open_index, TextDeletionQueryBuilder(schema.uuid))?;
167
+ let index = open_index_with_deletions(
168
+ schema.schema.clone(),
169
+ open_index,
170
+ TextDeletionQueryBuilder::new(&schema),
171
+ )?;
139
172
 
140
173
  Ok(Self {
141
174
  reader: TextReaderService {
@@ -35,14 +35,12 @@ use nidx_protos::{
35
35
  };
36
36
  use nidx_types::prefilter::{FieldId, PrefilterResult};
37
37
  use tantivy::collector::{Collector, Count, FacetCollector, FacetCounts, SegmentCollector, TopDocs};
38
- use tantivy::columnar::{BytesColumn, Column};
39
- use tantivy::fastfield::FacetReader;
38
+ use tantivy::columnar::Column;
40
39
  use tantivy::query::{AllQuery, BooleanQuery, Query, QueryParser, TermQuery};
41
40
  use tantivy::schema::Value;
42
41
  use tantivy::schema::*;
43
42
  use tantivy::{DocAddress, Index, IndexReader, Searcher};
44
43
  use tracing::*;
45
- use uuid::Uuid;
46
44
 
47
45
  fn facet_count(facet: &str, facets_count: &FacetCounts) -> Vec<FacetResult> {
48
46
  facets_count
@@ -90,78 +88,6 @@ impl Debug for TextReaderService {
90
88
  }
91
89
  }
92
90
 
93
- struct FieldUuidSegmentCollector {
94
- uuid_reader: BytesColumn,
95
- field_reader: FacetReader,
96
- results: Vec<FieldId>,
97
- }
98
-
99
- impl SegmentCollector for FieldUuidSegmentCollector {
100
- type Fruit = Vec<FieldId>;
101
-
102
- fn collect(&mut self, doc: tantivy::DocId, _score: tantivy::Score) {
103
- let uuid_ord = self.uuid_reader.term_ords(doc).next().unwrap();
104
- let mut uuid_bytes = Vec::new();
105
- self.uuid_reader.ord_to_bytes(uuid_ord, &mut uuid_bytes).unwrap();
106
-
107
- let mut facet_ords = self.field_reader.facet_ords(doc);
108
- let mut facet = Facet::root();
109
- self.field_reader
110
- .facet_from_ord(facet_ords.next().unwrap(), &mut facet)
111
- .expect("field facet not found");
112
-
113
- if let Ok(resource_id) = Uuid::parse_str(std::str::from_utf8(&uuid_bytes).unwrap()) {
114
- self.results.push(FieldId {
115
- resource_id,
116
- field_id: facet.to_path_string(),
117
- });
118
- }
119
- }
120
-
121
- fn harvest(self) -> Self::Fruit {
122
- self.results
123
- }
124
- }
125
-
126
- struct FieldUuidCollector;
127
-
128
- impl Collector for FieldUuidCollector {
129
- type Fruit = Vec<FieldId>;
130
-
131
- type Child = FieldUuidSegmentCollector;
132
-
133
- fn for_segment(
134
- &self,
135
- _segment_local_id: tantivy::SegmentOrdinal,
136
- segment: &tantivy::SegmentReader,
137
- ) -> tantivy::Result<Self::Child> {
138
- let uuid_reader = segment.fast_fields().bytes("uuid")?.unwrap();
139
- let field_reader = segment.facet_reader("field")?;
140
- Ok(FieldUuidSegmentCollector {
141
- uuid_reader,
142
- field_reader,
143
- results: vec![],
144
- })
145
- }
146
-
147
- fn requires_scoring(&self) -> bool {
148
- false
149
- }
150
-
151
- fn merge_fruits(
152
- &self,
153
- segment_fruits: Vec<<Self::Child as tantivy::collector::SegmentCollector>::Fruit>,
154
- ) -> tantivy::Result<Self::Fruit> {
155
- Ok(segment_fruits
156
- .into_iter()
157
- .reduce(|mut a, mut b| {
158
- a.append(&mut b);
159
- a
160
- })
161
- .unwrap_or_default())
162
- }
163
- }
164
-
165
91
  struct FieldUuidSegmentCollectorV2 {
166
92
  encoded_field_id_reader: Column,
167
93
  results: Vec<FieldId>,
@@ -186,9 +112,9 @@ impl SegmentCollector for FieldUuidSegmentCollectorV2 {
186
112
  }
187
113
  }
188
114
 
189
- struct FieldUuidCollectorV2;
115
+ struct FieldUuidCollector;
190
116
 
191
- impl Collector for FieldUuidCollectorV2 {
117
+ impl Collector for FieldUuidCollector {
192
118
  type Fruit = Vec<FieldId>;
193
119
 
194
120
  type Child = FieldUuidSegmentCollectorV2;
@@ -263,11 +189,8 @@ impl TextReaderService {
263
189
 
264
190
  let prefilter_query: Box<dyn Query> = Box::new(BooleanQuery::intersection(subqueries));
265
191
  let searcher = self.reader.searcher();
266
- let docs_fulfilled = if schema.encoded_field_id.is_some() {
267
- searcher.search(&prefilter_query, &FieldUuidCollectorV2)?
268
- } else {
269
- searcher.search(&prefilter_query, &FieldUuidCollector)?
270
- };
192
+ let docs_fulfilled = searcher.search(&prefilter_query, &FieldUuidCollector)?;
193
+
271
194
  // If none of the fields match the pre-filter, thats all the query planner needs to know.
272
195
  if docs_fulfilled.is_empty() {
273
196
  return Ok(PrefilterResult::None);
@@ -80,16 +80,11 @@ pub fn index_document(
80
80
  field_doc.add_facet(schema.field, facet_field);
81
81
  field_doc.add_text(schema.text, &text_info.text);
82
82
 
83
- if let Some(encoded_field_id) = schema.encoded_field_id {
84
- for d in encode_field_id(resource_uuid, &format!("/{field}")) {
85
- field_doc.add_u64(encoded_field_id, d);
86
- }
87
- }
88
-
89
- if let Some(encoded_field_id_bytes) = schema.encoded_field_id_bytes {
90
- let encoded = encode_field_id_bytes(resource_uuid, field);
91
- field_doc.add_bytes(encoded_field_id_bytes, encoded.as_slice());
83
+ for d in encode_field_id(resource_uuid, &format!("/{field}")) {
84
+ field_doc.add_u64(schema.encoded_field_id, d);
92
85
  }
86
+ let encoded = encode_field_id_bytes(resource_uuid, field);
87
+ field_doc.add_bytes(schema.encoded_field_id_bytes, encoded.as_slice());
93
88
 
94
89
  for label in text_info.labels.iter() {
95
90
  let facet = Facet::from(label.as_str());
@@ -45,8 +45,8 @@ pub struct TextSchema {
45
45
  pub groups_public: Field,
46
46
  pub groups_with_access: Field,
47
47
 
48
- pub encoded_field_id: Option<Field>,
49
- pub encoded_field_id_bytes: Option<Field>,
48
+ pub encoded_field_id: Field,
49
+ pub encoded_field_id_bytes: Field,
50
50
  }
51
51
 
52
52
  pub fn timestamp_to_datetime_utc(timestamp: &nidx_protos::prost_types::Timestamp) -> DateTime {
@@ -54,7 +54,7 @@ pub fn timestamp_to_datetime_utc(timestamp: &nidx_protos::prost_types::Timestamp
54
54
  }
55
55
 
56
56
  impl TextSchema {
57
- pub fn new(version: u64) -> Self {
57
+ pub fn new(_version: u64) -> Self {
58
58
  let mut sb = Schema::builder();
59
59
  let num_options: NumericOptions = NumericOptions::default().set_indexed().set_fast();
60
60
 
@@ -81,30 +81,12 @@ impl TextSchema {
81
81
  let groups_public = sb.add_u64_field("groups_public", num_options);
82
82
  let groups_with_access = sb.add_facet_field("groups_with_access", facet_options);
83
83
 
84
- let encoded_field_id = if version >= 4 {
85
- // v4: Field ID encoded as array of u64 for faster retrieval during prefilter
86
- // Using a bytes field is slow due to tantivy's implementation being slow with many unique values.
87
- // A better implementation is tracked in https://github.com/quickwit-oss/tantivy/issues/2090
88
- Some(sb.add_u64_field("encoded_field_id", FAST))
89
- } else if version == 3 {
90
- // v3: Field ID encoded as array of u64 for faster retrieval during prefilter
91
- // Using a bytes field is slow due to tantivy's implementation being slow with many unique values.
92
- // A better implementation is tracked in https://github.com/quickwit-oss/tantivy/issues/2090
93
- // The INDEXED flag is unnecessary here, and this is backwards compatible code until we remove it in v4.
94
- Some(sb.add_u64_field("encoded_field_id", FAST | INDEXED))
95
- } else if version == 2 {
96
- // v2 did not have the field indexed
97
- Some(sb.add_u64_field("encoded_field_id", FAST))
98
- } else {
99
- None
100
- };
101
-
102
- let encoded_field_id_bytes = if version >= 4 {
103
- // v4: Field ID encoded as array of u8 for faster deletions
104
- Some(sb.add_bytes_field("encoded_field_id_bytes", INDEXED))
105
- } else {
106
- None
107
- };
84
+ // v4: Field ID encoded as array of u64 for faster retrieval during prefilter
85
+ // Using a bytes field is slow due to tantivy's implementation being slow with many unique values.
86
+ // A better implementation is tracked in https://github.com/quickwit-oss/tantivy/issues/2090
87
+ let encoded_field_id = sb.add_u64_field("encoded_field_id", FAST);
88
+ // v4: Field ID encoded as array of u8 for faster deletions
89
+ let encoded_field_id_bytes = sb.add_bytes_field("encoded_field_id_bytes", INDEXED);
108
90
 
109
91
  let schema = sb.build();
110
92
 
@@ -0,0 +1,89 @@
1
+ // Copyright (C) 2021 Bosutech XXI S.L.
2
+ //
3
+ // nucliadb is offered under the AGPL v3.0 and as commercial software.
4
+ // For commercial licensing, contact us at info@nuclia.com.
5
+ //
6
+ // AGPL:
7
+ // This program is free software: you can redistribute it and/or modify
8
+ // it under the terms of the GNU Affero General Public License as
9
+ // published by the Free Software Foundation, either version 3 of the
10
+ // License, or (at your option) any later version.
11
+ //
12
+ // This program is distributed in the hope that it will be useful,
13
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ // GNU Affero General Public License for more details.
16
+ //
17
+ // You should have received a copy of the GNU Affero General Public License
18
+ // along with this program. If not, see <http://www.gnu.org/licenses/>.
19
+ //
20
+
21
+ mod common;
22
+ use common::TestOpener;
23
+ use nidx_protos::TextInformation;
24
+ use nidx_tests::minimal_resource;
25
+ use nidx_text::{DocumentSearchRequest, TextConfig, TextIndexer, TextSearcher};
26
+ use tempfile::tempdir;
27
+
28
+ #[test]
29
+ fn test_texts_deletions() -> anyhow::Result<()> {
30
+ // Create a resource with a couple of fields
31
+ let mut resource = minimal_resource("shard".to_string());
32
+ resource.texts.insert(
33
+ "a/title".to_string(),
34
+ TextInformation {
35
+ text: "The little prince".to_string(),
36
+ ..Default::default()
37
+ },
38
+ );
39
+ resource.texts.insert(
40
+ "a/summary".to_string(),
41
+ TextInformation {
42
+ text: "A story about a little prince".to_string(),
43
+ ..Default::default()
44
+ },
45
+ );
46
+ let rid = resource.resource.clone().unwrap().uuid.clone();
47
+ let segment_dir = tempdir()?;
48
+ let meta1 = TextIndexer
49
+ .index_resource(segment_dir.path(), TextConfig::default(), &resource)?
50
+ .unwrap();
51
+
52
+ // Search to validate that both fields are indexed
53
+ let searcher = TextSearcher::open(
54
+ TextConfig::default(),
55
+ TestOpener::new(vec![(meta1.clone(), 1i64.into())], vec![]),
56
+ )?;
57
+ let result = searcher.search(&DocumentSearchRequest {
58
+ result_per_page: 20,
59
+ ..Default::default()
60
+ })?;
61
+ assert_eq!(result.results.len(), 2);
62
+
63
+ // Search with resource deletion
64
+ let searcher = TextSearcher::open(
65
+ TextConfig::default(),
66
+ TestOpener::new(vec![(meta1.clone(), 1i64.into())], vec![(rid.clone(), 2i64.into())]),
67
+ )?;
68
+ let result = searcher.search(&DocumentSearchRequest {
69
+ result_per_page: 20,
70
+ ..Default::default()
71
+ })?;
72
+ assert_eq!(result.results.len(), 0);
73
+
74
+ // Search with field deletion
75
+ let searcher = TextSearcher::open(
76
+ TextConfig::default(),
77
+ TestOpener::new(
78
+ vec![(meta1.clone(), 1i64.into())],
79
+ vec![(format!("{rid}/a/title"), 2i64.into())],
80
+ ),
81
+ )?;
82
+ let result = searcher.search(&DocumentSearchRequest {
83
+ result_per_page: 20,
84
+ ..Default::default()
85
+ })?;
86
+ assert_eq!(result.results.len(), 1);
87
+
88
+ Ok(())
89
+ }
@@ -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.post243"
16
+ version = "6.3.5.post268"
17
17
 
18
18
  [project.urls]
19
19
  Homepage = "https://nuclia.com"
@@ -306,12 +306,15 @@ mod tests {
306
306
  );
307
307
 
308
308
  let storage_source = Arc::new(object_store::memory::InMemory::new());
309
+ let mut resource = little_prince(kbid.to_string(), None);
310
+ // Add some random deletions to test the import
311
+ resource.paragraphs_to_delete.push("1".to_string());
309
312
  index_resource(
310
313
  &meta_source,
311
314
  storage_source.clone(),
312
315
  &tempfile::env::temp_dir(),
313
316
  &shard.id.to_string(),
314
- little_prince(shard.id.to_string(), None),
317
+ resource.clone(),
315
318
  123i64.into(),
316
319
  )
317
320
  .await?;
@@ -323,12 +326,10 @@ mod tests {
323
326
  .await?,
324
327
  3
325
328
  );
326
- assert_eq!(
327
- sqlx::query_scalar!("SELECT COUNT(*) AS \"cnt!\" FROM deletions")
328
- .fetch_one(&meta_source.pool)
329
- .await?,
330
- 1
331
- );
329
+ let deletions_count = sqlx::query_scalar!("SELECT COUNT(*) AS \"cnt!\" FROM deletions")
330
+ .fetch_one(&meta_source.pool)
331
+ .await?;
332
+ assert!(deletions_count >= 1, "Expected at least one deletion");
332
333
 
333
334
  // Create destination DB
334
335
  let config_dest = Postgres::test_context(&TestArgs::new("test_export_and_import_dest")).await?;
@@ -346,12 +347,10 @@ mod tests {
346
347
  let shard_dest = Shard::get(&meta_dest.pool, shard.id).await?;
347
348
  assert_eq!(shard_dest.kbid, shard.kbid);
348
349
  assert_eq!(Index::for_shard(&meta_dest.pool, shard.id).await?.len(), 3);
349
- assert_eq!(
350
- sqlx::query_scalar!("SELECT COUNT(*) AS \"cnt!\" FROM deletions")
351
- .fetch_one(&meta_dest.pool)
352
- .await?,
353
- 1
354
- );
350
+ let after_deletions_count = sqlx::query_scalar!("SELECT COUNT(*) AS \"cnt!\" FROM deletions")
351
+ .fetch_one(&meta_dest.pool)
352
+ .await?;
353
+ assert_eq!(after_deletions_count, deletions_count);
355
354
 
356
355
  let all_segments = Segment::in_indexes(&meta_dest.pool, &index_ids).await?;
357
356
  assert_eq!(all_segments.len(), 3);