nidx-binding 6.3.5.post220__tar.gz → 6.3.5.post232__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 (245) hide show
  1. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/PKG-INFO +1 -1
  2. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_protos/pyproject.toml +1 -1
  3. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_text/src/reader.rs +85 -7
  4. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_text/src/resource_indexer.rs +4 -2
  5. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_text/src/schema.rs +9 -4
  6. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/pyproject.toml +1 -1
  7. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/indexer.rs +8 -3
  8. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/lib.rs +1 -0
  9. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/metrics.rs +27 -0
  10. nidx_binding-6.3.5.post232/src/utilization_tracker.rs +62 -0
  11. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/worker.rs +8 -4
  12. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-0cfce9b29547f8f5bafa6e440f86103be7b8c4ad2fd92db9ac223f4efbe23d10.json +0 -0
  13. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-1a561eed00f3dbe868bf5030059793300209179dc8fb73e4b57a54b5e81262fe.json +0 -0
  14. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-1d3fca2682e25a01143da92285297f134a6a105a96f64d87e0db3abb219855e4.json +0 -0
  15. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-249b3b57c27a71baa823f1fe0f0bba9c9af36f61c28f731e58beea60ec48e687.json +0 -0
  16. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-24cb6b683daa42d7125f862e25943ab4be7bf275cd8739f8da4859d701795e1a.json +0 -0
  17. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-263c8fce6db5b03bbd012fafdba6943cbee6ed7eb8976cdef4f5b01dde7ca6fd.json +0 -0
  18. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-2a5d92fb1638df830a4477a7cdf24e6db6b43034b7bbe74fdfb63e8afe2c4071.json +0 -0
  19. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-2b065a363f58caed60e3706603c1260dbf5a4c795604a5b68edda22eb07fec1b.json +0 -0
  20. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-3fc3cb39934683de8cd475ce1368c8373453eb1e01f81587d66b9d14b109ce6e.json +0 -0
  21. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-48f33b77b7c1633467b0b2efcaa1d3c207e7757e4f1d83b40d15e6ca365f7771.json +0 -0
  22. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-4ae09f2c08e2f324bee01bb8487a8f37678a1c5e9d327339235c50d4921a8949.json +0 -0
  23. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-4d7a76fa413c9ef0ce2a47ac7bb7e01d3e6a2aabded9487d21010a53efee8852.json +0 -0
  24. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-4fcbdd6657c7dc9b60b3a563dd41711b3dbcf72ce063427b7a01f8cddf34c244.json +0 -0
  25. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-577109ac00ccfbd38ecaccab94116f2f46a4caf5612afa372cded197123c1e08.json +0 -0
  26. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-5db25f97d8578d6d78f2f6bd4b72cc82a9b1b82805c6422d967ac63b20d99db4.json +0 -0
  27. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-5ec3233a3a23e926055056d46bdde17836a633066dbb5f349502648cd3ea9a60.json +0 -0
  28. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-66edb6ea424d8681927dcddb6bac5f1239175f4775d1f40417ba15054b0c6f19.json +0 -0
  29. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-6f9c6d201c1b5712efb68c363bffd3e0169c11f2a8f925e8cd4e8808599ff7b4.json +0 -0
  30. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-733c3ebacc86f444bf5e2dd79ade660c291e88a00fc09b722f6e2e191545874c.json +0 -0
  31. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-77a245aed9f6f8b9fc643efbd4b1e2e8e99bbba085e3e75a4f29321cd7b2a25c.json +0 -0
  32. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-7a3bf27c330c468a596e8a297cf7d8b192e31e67ecc5177c1267f579e8e247c7.json +0 -0
  33. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-7a7e59e47b30b12237511fd3d7da2d17b0471ad2b006af48d6a6f587c779692b.json +0 -0
  34. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-7dcbb33312cc9f11ae3a6d73b1ace017a9f19a8bf8f10304fc57977c8efeadff.json +0 -0
  35. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-7efa7c0d747afc4b6aed0586ff846c27839c3213ff7ee9f30c89b0d0f17e60e3.json +0 -0
  36. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-8493140d788604d498a4e48da4158708572ccc9d60185290a00d549cc84533db.json +0 -0
  37. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-8493bb0059b013eaca42fd10cd7d04f0d06a8acaed379eff0d23f3229edde9ee.json +0 -0
  38. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-87996b3d6c7a2195438d7038015b06949102bce8c7b8cd8db1f83aaf23cbe489.json +0 -0
  39. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-8f096d8171b89f9615d18f95d696dc9e4fb3674e103161a713cdc806f7a68506.json +0 -0
  40. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-917732a56ee04bf3a6e127319dda8225210869c82f9828d878162394dba4e078.json +0 -0
  41. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-95fe4ef93ee90733db1b67ed7987f80b5aac792f1590b979c68b418d1599eb98.json +0 -0
  42. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-9b67658569b343d8b4b61ae0a7dc721f367f2ba33c7b69b9e68bfd5c9bff5206.json +0 -0
  43. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-9c8062ea55d070afef68309e58fa987eb37fda44e1efbf68c8ba2af7846cc968.json +0 -0
  44. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-a06e1d9f6f95e4c4c2b98310ebddcc9d963cc033582bf2e945e8bf3a301b4247.json +0 -0
  45. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-a55265c9b07bd1399961a6f1e757201fd0eebe868ddaf96437111113d80fce92.json +0 -0
  46. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-a891a37be5c2d7cce775c2dd33726b0318fd3839beab222a1b22bc6174604207.json +0 -0
  47. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-a945191bb4b3e37d6823ed3ad499339d007d69983105de8567777d9daf517b28.json +0 -0
  48. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-abe9f7832f2bd799ac44008da031e8d8ab52d4f5fbfc2a7e3974e8873bae55b2.json +0 -0
  49. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-aca588cca57a85e4d7fcc40c23cd87e57d53d11ca550d78e7e3d5e39e524fcd3.json +0 -0
  50. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-b02f8aafc00a7724510772ac41269e368c5bccf03ef7b4590e0ef6fd1a1bf64f.json +0 -0
  51. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-b742e17cabe2d64617e9aa64bafc782172f7a4f8023d1b54f952a0fb39f6b2b8.json +0 -0
  52. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-b94e349dbc0daec57f8f8f6e9e2dffb06100b1bb2b41d297c9f3b191da37a83d.json +0 -0
  53. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-bd9afa22994aba671dbf7b5f89b53c2ee02f53c0442a81265786a6d52d08512f.json +0 -0
  54. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-be60554eca98a5899efc6b49785cecd6444a6d39afed9e4a884ce2dbf162012c.json +0 -0
  55. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-bf49702b506c9a1650ece1f8e8d9f14834a902f8caefafe30ded55e2790f2188.json +0 -0
  56. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-bfb8ae2e860e451b0868a7b1b50a451d998b2105f9fdfd307b26a1775d145e9f.json +0 -0
  57. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-bfcd21ed704cd305db5c17fcdec7d92aa4ac501913c9c9514d8ff92928c0c7e7.json +0 -0
  58. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-c3ab694650f49a75b146fb877a92e48c4f20f0d99f70f8ec859fbb763b01a1e5.json +0 -0
  59. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-c55542bb9fae544d87fae6f30e0fe8a9088d12075f4442ab4fe2fcd05e472234.json +0 -0
  60. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-cb29a6556d35ac630ee0aa885dd7341cf9573bd3efd216ff8a887b87686b03db.json +0 -0
  61. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-d0a1f341a89f5f14696b10baa72db9d95551c2b7e5fc67308fd52dc03dd98a92.json +0 -0
  62. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-d2ad0a0ca2649c9e4873cfcc1fc66d2d07cc45d0f65c560b06d7b5f592f4fa8a.json +0 -0
  63. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-d6cfe78eb635ba0b89ca4021a4dc8182d18ab5b197f30149cd28488eba4c1df5.json +0 -0
  64. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-d729b56dea00e49dcdba8cf0001e2811da27351eabe98212db3b589f18fc6f32.json +0 -0
  65. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-d9658bfd4e7170b41d03f2ddf2446d0bf54171c0d39d53bf20af2b8437f2ec48.json +0 -0
  66. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-dbba7b3d3289425bae711aedbf73fbc3699f857f86f84d95c3b556d05c5658b0.json +0 -0
  67. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-dcb96b649d6d63a58efd5d445453a4f3d7869a56ff714b69bedf3d616a0473ca.json +0 -0
  68. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-ebd876fbf5362a5900e75bc05f2f11c73c406ef7da4e95097fc6a1c3d1b8bc54.json +0 -0
  69. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-eef5cc6bce1cc14eba8f3e68971724ef181e88cffcedd74673615f2026b89a62.json +0 -0
  70. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/.sqlx/query-ef56d5fefc5774040d1ee397beadb475f6af02768c22f0e583c74062e2e821ce.json +0 -0
  71. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/Cargo.lock +0 -0
  72. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/Cargo.toml +0 -0
  73. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/README.md +0 -0
  74. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/migrations/20241007163501_initial.sql +0 -0
  75. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/migrations/20241211120039_merge_job_priority.sql +0 -0
  76. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/migrations/20241211121159_basic_indexes.sql +0 -0
  77. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/migrations/20241212151105_check_segment_records.sql +0 -0
  78. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/migrations/20250110145554_in_flight_messages.sql +0 -0
  79. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_binding/Cargo.toml +0 -0
  80. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_binding/src/lib.rs +0 -0
  81. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/Cargo.toml +0 -0
  82. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/src/fuzzy_query.rs +0 -0
  83. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/src/lib.rs +0 -0
  84. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/src/query_io.rs +0 -0
  85. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/src/reader.rs +0 -0
  86. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/src/request_types.rs +0 -0
  87. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/src/resource_indexer.rs +0 -0
  88. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/src/schema.rs +0 -0
  89. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/src/search_query.rs +0 -0
  90. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/src/search_response.rs +0 -0
  91. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/src/set_query.rs +0 -0
  92. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/src/stop_words.rs +0 -0
  93. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/README.md +0 -0
  94. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/ar.json +0 -0
  95. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/az.json +0 -0
  96. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/bn.json +0 -0
  97. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/ca.json +0 -0
  98. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/ch.json +0 -0
  99. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/da.json +0 -0
  100. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/de.json +0 -0
  101. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/el.json +0 -0
  102. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/en.json +0 -0
  103. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/es.json +0 -0
  104. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/eu.json +0 -0
  105. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/extract.py +0 -0
  106. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/fi.json +0 -0
  107. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/fr.json +0 -0
  108. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/he.json +0 -0
  109. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/hu.json +0 -0
  110. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/id.json +0 -0
  111. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/it.json +0 -0
  112. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/kk.json +0 -0
  113. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/ne.json +0 -0
  114. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/nl.json +0 -0
  115. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/no.json +0 -0
  116. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/pt.json +0 -0
  117. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/ro.json +0 -0
  118. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/ru.json +0 -0
  119. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/sl.json +0 -0
  120. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/sv.json +0 -0
  121. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/tg.json +0 -0
  122. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/stop_words/tr.json +0 -0
  123. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/tests/common/mod.rs +0 -0
  124. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_paragraph/tests/reader.rs +0 -0
  125. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_protos/Cargo.toml +0 -0
  126. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_protos/build.py +0 -0
  127. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_protos/build.rs +0 -0
  128. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_protos/src/lib.rs +0 -0
  129. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_protos/src/nidx.proto +0 -0
  130. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_relation/Cargo.toml +0 -0
  131. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_relation/src/graph_collector.rs +0 -0
  132. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_relation/src/graph_query_parser.rs +0 -0
  133. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_relation/src/io_maps.rs +0 -0
  134. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_relation/src/lib.rs +0 -0
  135. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_relation/src/reader.rs +0 -0
  136. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_relation/src/resource_indexer.rs +0 -0
  137. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_relation/src/schema.rs +0 -0
  138. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_relation/src/top_unique_n.rs +0 -0
  139. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_relation/tests/common/mod.rs +0 -0
  140. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_relation/tests/test_graph_query_parser_search.rs +0 -0
  141. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_relation/tests/test_graph_search.rs +0 -0
  142. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_relation/tests/test_reader.rs +0 -0
  143. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_relation/tests/test_writer.rs +0 -0
  144. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_tantivy/Cargo.toml +0 -0
  145. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_tantivy/src/index_reader.rs +0 -0
  146. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_tantivy/src/lib.rs +0 -0
  147. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_tests/Cargo.toml +0 -0
  148. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_tests/src/graph.rs +0 -0
  149. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_tests/src/lib.rs +0 -0
  150. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_text/Cargo.toml +0 -0
  151. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_text/src/lib.rs +0 -0
  152. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_text/src/prefilter.rs +0 -0
  153. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_text/src/query_io.rs +0 -0
  154. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_text/src/request_types.rs +0 -0
  155. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_text/src/search_query.rs +0 -0
  156. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_text/tests/common/mod.rs +0 -0
  157. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_text/tests/test_flow.rs +0 -0
  158. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_text/tests/test_search.rs +0 -0
  159. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_text/tests/test_streaming.rs +0 -0
  160. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_types/Cargo.toml +0 -0
  161. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_types/src/lib.rs +0 -0
  162. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_types/src/prefilter.rs +0 -0
  163. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_types/src/query_language.rs +0 -0
  164. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/Cargo.toml +0 -0
  165. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/config.rs +0 -0
  166. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/data_point/disk_hnsw.rs +0 -0
  167. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/data_point/mod.rs +0 -0
  168. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/data_point/node.rs +0 -0
  169. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/data_point/ops_hnsw.rs +0 -0
  170. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/data_point/params.rs +0 -0
  171. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/data_point/ram_hnsw.rs +0 -0
  172. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/data_point/tests.rs +0 -0
  173. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/data_point_provider/mod.rs +0 -0
  174. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/data_point_provider/reader.rs +0 -0
  175. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/data_types/data_store.rs +0 -0
  176. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/data_types/mod.rs +0 -0
  177. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/data_types/trie.rs +0 -0
  178. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/data_types/trie_ram.rs +0 -0
  179. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/formula/mod.rs +0 -0
  180. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/indexer.rs +0 -0
  181. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/inverted_index/fst_index.rs +0 -0
  182. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/inverted_index/map.rs +0 -0
  183. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/inverted_index.rs +0 -0
  184. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/lib.rs +0 -0
  185. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/query_io.rs +0 -0
  186. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/request_types.rs +0 -0
  187. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/utils.rs +0 -0
  188. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/vector_types/dense_f32.rs +0 -0
  189. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/src/vector_types/mod.rs +0 -0
  190. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/tests/common/mod.rs +0 -0
  191. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/tests/test_basic_search.rs +0 -0
  192. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/nidx_vector/tests/test_hidden.rs +0 -0
  193. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/api/grpc.rs +0 -0
  194. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/api/shards.rs +0 -0
  195. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/api.rs +0 -0
  196. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/control.rs +0 -0
  197. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/errors.rs +0 -0
  198. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/grpc_server.rs +0 -0
  199. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/import_export.rs +0 -0
  200. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/main.rs +0 -0
  201. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/metadata/deletion.rs +0 -0
  202. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/metadata/index.rs +0 -0
  203. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/metadata/index_request.rs +0 -0
  204. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/metadata/merge_job.rs +0 -0
  205. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/metadata/segment.rs +0 -0
  206. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/metadata/shard.rs +0 -0
  207. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/metadata.rs +0 -0
  208. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/scheduler/audit_task.rs +0 -0
  209. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/scheduler/log_merge.rs +0 -0
  210. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/scheduler/merge_task.rs +0 -0
  211. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/scheduler/metrics_task.rs +0 -0
  212. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/scheduler/purge_tasks.rs +0 -0
  213. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/scheduler/vector_merge.rs +0 -0
  214. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/scheduler.rs +0 -0
  215. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/searcher/grpc.rs +0 -0
  216. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/searcher/index_cache.rs +0 -0
  217. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/searcher/query_language.rs +0 -0
  218. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/searcher/query_planner.rs +0 -0
  219. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/searcher/shard_search.rs +0 -0
  220. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/searcher/shard_selector.rs +0 -0
  221. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/searcher/shard_suggest.rs +0 -0
  222. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/searcher/streams.rs +0 -0
  223. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/searcher/sync.rs +0 -0
  224. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/searcher.rs +0 -0
  225. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/segment_store.rs +0 -0
  226. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/settings.rs +0 -0
  227. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/telemetry/duration_layer.rs +0 -0
  228. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/telemetry/log_format.rs +0 -0
  229. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/telemetry/middleware.rs +0 -0
  230. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/telemetry.rs +0 -0
  231. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/src/tool.rs +0 -0
  232. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/tests/common/mod.rs +0 -0
  233. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/tests/common/services.rs +0 -0
  234. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/tests/test_date_range_search.rs +0 -0
  235. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/tests/test_search_filtering.rs +0 -0
  236. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/tests/test_search_relations.rs +0 -0
  237. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/tests/test_search_sorting.rs +0 -0
  238. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/tests/test_searcher_cluster.rs +0 -0
  239. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/tests/test_security_search.rs +0 -0
  240. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/tests/test_shards.rs +0 -0
  241. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/tests/test_shards_api.rs +0 -0
  242. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/tests/test_suggest.rs +0 -0
  243. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/tests/test_synced_searcher.rs +0 -0
  244. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/tests/test_vector_normalization.rs +0 -0
  245. {nidx_binding-6.3.5.post220 → nidx_binding-6.3.5.post232}/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.post220
3
+ Version: 6.3.5.post232
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.post220"
7
+ version = "6.3.5.post232"
8
8
  license = { text = "AGPL" }
9
9
  description = "Protobuf definitions for nucliadb/nidx"
10
10
  authors = [ { name = "Nuclia", email = "nucliadb@nuclia.com" }]
@@ -35,12 +35,14 @@ 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::Column;
38
+ use tantivy::columnar::{BytesColumn, Column};
39
+ use tantivy::fastfield::FacetReader;
39
40
  use tantivy::query::{AllQuery, BooleanQuery, Query, QueryParser, TermQuery};
40
41
  use tantivy::schema::Value;
41
42
  use tantivy::schema::*;
42
43
  use tantivy::{DocAddress, Index, IndexReader, Searcher};
43
44
  use tracing::*;
45
+ use uuid::Uuid;
44
46
 
45
47
  fn facet_count(facet: &str, facets_count: &FacetCounts) -> Vec<FacetResult> {
46
48
  facets_count
@@ -89,13 +91,85 @@ impl Debug for TextReaderService {
89
91
  }
90
92
 
91
93
  struct FieldUuidSegmentCollector {
92
- encoded_field_id_reader: Column,
94
+ uuid_reader: BytesColumn,
95
+ field_reader: FacetReader,
93
96
  results: Vec<FieldId>,
94
97
  }
95
98
 
96
99
  impl SegmentCollector for FieldUuidSegmentCollector {
97
100
  type Fruit = Vec<FieldId>;
98
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
+ struct FieldUuidSegmentCollectorV2 {
166
+ encoded_field_id_reader: Column,
167
+ results: Vec<FieldId>,
168
+ }
169
+
170
+ impl SegmentCollector for FieldUuidSegmentCollectorV2 {
171
+ type Fruit = Vec<FieldId>;
172
+
99
173
  fn collect(&mut self, doc: tantivy::DocId, _score: tantivy::Score) {
100
174
  let mut data = Vec::new();
101
175
  self.encoded_field_id_reader.fill_vals(doc, &mut data);
@@ -112,12 +186,12 @@ impl SegmentCollector for FieldUuidSegmentCollector {
112
186
  }
113
187
  }
114
188
 
115
- struct FieldUuidCollector;
189
+ struct FieldUuidCollectorV2;
116
190
 
117
- impl Collector for FieldUuidCollector {
191
+ impl Collector for FieldUuidCollectorV2 {
118
192
  type Fruit = Vec<FieldId>;
119
193
 
120
- type Child = FieldUuidSegmentCollector;
194
+ type Child = FieldUuidSegmentCollectorV2;
121
195
 
122
196
  fn for_segment(
123
197
  &self,
@@ -125,7 +199,7 @@ impl Collector for FieldUuidCollector {
125
199
  segment: &tantivy::SegmentReader,
126
200
  ) -> tantivy::Result<Self::Child> {
127
201
  let encoded_field_id_reader = segment.fast_fields().u64("encoded_field_id")?;
128
- Ok(FieldUuidSegmentCollector {
202
+ Ok(FieldUuidSegmentCollectorV2 {
129
203
  encoded_field_id_reader,
130
204
  results: vec![],
131
205
  })
@@ -189,7 +263,11 @@ impl TextReaderService {
189
263
 
190
264
  let prefilter_query: Box<dyn Query> = Box::new(BooleanQuery::intersection(subqueries));
191
265
  let searcher = self.reader.searcher();
192
- let docs_fulfilled = searcher.search(&prefilter_query, &FieldUuidCollector)?;
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
+ };
193
271
  // If none of the fields match the pre-filter, thats all the query planner needs to know.
194
272
  if docs_fulfilled.is_empty() {
195
273
  return Ok(PrefilterResult::None);
@@ -80,8 +80,10 @@ 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
- for d in encode_field_id(resource_uuid, &format!("/{field}")) {
84
- field_doc.add_u64(schema.encoded_field_id, d);
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
+ }
85
87
  }
86
88
 
87
89
  if let Some(encoded_field_id_bytes) = schema.encoded_field_id_bytes {
@@ -45,7 +45,7 @@ pub struct TextSchema {
45
45
  pub groups_public: Field,
46
46
  pub groups_with_access: Field,
47
47
 
48
- pub encoded_field_id: Field,
48
+ pub encoded_field_id: Option<Field>,
49
49
  pub encoded_field_id_bytes: Option<Field>,
50
50
  }
51
51
 
@@ -85,13 +85,18 @@ impl TextSchema {
85
85
  // v4: Field ID encoded as array of u64 for faster retrieval during prefilter
86
86
  // Using a bytes field is slow due to tantivy's implementation being slow with many unique values.
87
87
  // A better implementation is tracked in https://github.com/quickwit-oss/tantivy/issues/2090
88
- sb.add_u64_field("encoded_field_id", FAST)
89
- } else {
88
+ Some(sb.add_u64_field("encoded_field_id", FAST))
89
+ } else if version == 3 {
90
90
  // v3: Field ID encoded as array of u64 for faster retrieval during prefilter
91
91
  // Using a bytes field is slow due to tantivy's implementation being slow with many unique values.
92
92
  // A better implementation is tracked in https://github.com/quickwit-oss/tantivy/issues/2090
93
93
  // The INDEXED flag is unnecessary here, and this is backwards compatible code until we remove it in v4.
94
- sb.add_u64_field("encoded_field_id", FAST | INDEXED)
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
95
100
  };
96
101
 
97
102
  let encoded_field_id_bytes = if version >= 4 {
@@ -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.post220"
16
+ version = "6.3.5.post232"
17
17
 
18
18
  [project.urls]
19
19
  Homepage = "https://nuclia.com"
@@ -42,10 +42,9 @@ use crate::errors::NidxError;
42
42
  use crate::grpc_server::GrpcServer;
43
43
  use crate::metrics::IndexKindLabels;
44
44
  use crate::metrics::OperationStatusLabels;
45
- use crate::metrics::indexer::INDEXING_COUNTER;
46
- use crate::metrics::indexer::PER_INDEX_INDEXING_TIME;
47
- use crate::metrics::indexer::TOTAL_INDEXING_TIME;
45
+ use crate::metrics::indexer::*;
48
46
  use crate::segment_store::pack_and_upload;
47
+ use crate::utilization_tracker::UtilizationTracker;
49
48
  use crate::{Settings, metadata::*};
50
49
 
51
50
  #[cfg(feature = "telemetry")]
@@ -138,7 +137,12 @@ pub async fn run_nats(settings: Settings, shutdown: CancellationToken) -> anyhow
138
137
  None => tempfile::env::temp_dir(),
139
138
  };
140
139
 
140
+ let utilization = UtilizationTracker::new(|busy, duration| {
141
+ INDEXING_BUSY.get_or_create(&busy.into()).inc_by(duration.as_secs_f64());
142
+ });
143
+
141
144
  while !shutdown.is_cancelled() {
145
+ utilization.idle().await;
142
146
  let sub_msg = tokio::select! {
143
147
  sub_msg = subscription.next() => sub_msg,
144
148
  _ = shutdown.cancelled() => { return Ok(()) }
@@ -164,6 +168,7 @@ pub async fn run_nats(settings: Settings, shutdown: CancellationToken) -> anyhow
164
168
  continue;
165
169
  }
166
170
 
171
+ utilization.busy().await;
167
172
  let span = info_span!("indexer_message", ?seq);
168
173
  let (msg, acker) = msg.split();
169
174
 
@@ -29,6 +29,7 @@ pub mod searcher;
29
29
  mod segment_store;
30
30
  pub mod settings;
31
31
  pub mod tool;
32
+ mod utilization_tracker;
32
33
  pub mod worker;
33
34
 
34
35
  #[cfg(feature = "telemetry")]
@@ -127,6 +127,31 @@ impl OperationStatusLabels {
127
127
  }
128
128
  }
129
129
 
130
+ #[derive(Clone, Debug, PartialEq, Eq, Hash, EncodeLabelValue)]
131
+ enum Utilization {
132
+ Free,
133
+ Busy,
134
+ }
135
+
136
+ #[derive(Clone, Debug, EncodeLabelSet, PartialEq, Eq, Hash)]
137
+ pub struct UtilizationLabels {
138
+ status: Utilization,
139
+ }
140
+
141
+ impl From<bool> for UtilizationLabels {
142
+ fn from(busy: bool) -> Self {
143
+ if busy {
144
+ Self {
145
+ status: Utilization::Busy,
146
+ }
147
+ } else {
148
+ Self {
149
+ status: Utilization::Free,
150
+ }
151
+ }
152
+ }
153
+ }
154
+
130
155
  pub mod common {
131
156
  metrics! {
132
157
  SPAN_DURATION: Family<Vec<(String, String)>, Histogram>{exponential_buckets(0.001, 2.0, 20)} as "span_duration_seconds" ("Duration of a tracing span"),
@@ -169,6 +194,7 @@ pub mod indexer {
169
194
  INDEXING_COUNTER: Family<OperationStatusLabels, Counter> as "indexer_message_count" ("Number of indexing operations per status"),
170
195
  TOTAL_INDEXING_TIME: Histogram[exponential_buckets(0.01, 2.0, 12)] as "total_indexing_time_seconds" ("Time it took to process an entire index message"),
171
196
  PER_INDEX_INDEXING_TIME: Family<IndexKindLabels, Histogram>{exponential_buckets(0.01, 2.0, 12)} as "indexing_time_seconds" ("Time it took to index a resource to an index"),
197
+ INDEXING_BUSY: Family<UtilizationLabels, Counter::<f64, AtomicU64>> as "indexer_utilization_seconds" ("Time spent in free/busy status"),
172
198
  }
173
199
  }
174
200
 
@@ -176,5 +202,6 @@ pub mod worker {
176
202
  metrics! {
177
203
  MERGE_COUNTER: Family<OperationStatusLabels, Counter> as "merge_job_count" ("Number of merge jobs per status"),
178
204
  PER_INDEX_MERGE_TIME: Family<IndexKindLabels, Histogram>{exponential_buckets(1.0, 2.0, 12)} as "merge_time_seconds" ("Time it took to run a merge job"),
205
+ WORKER_BUSY: Family<UtilizationLabels, Counter::<f64, AtomicU64>> as "merge_worker_utilization_seconds" ("Time spent in free/busy status"),
179
206
  }
180
207
  }
@@ -0,0 +1,62 @@
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
+ use std::time::{Duration, Instant};
22
+
23
+ use tokio::{sync::mpsc::*, time::sleep};
24
+
25
+ pub struct UtilizationTracker {
26
+ channel: Sender<bool>,
27
+ }
28
+
29
+ impl UtilizationTracker {
30
+ pub fn new(publish: impl Fn(bool, Duration) + Send + 'static) -> Self {
31
+ let (tx, rx) = channel(10);
32
+ tokio::spawn(run(publish, rx));
33
+ Self { channel: tx }
34
+ }
35
+
36
+ pub async fn busy(&self) {
37
+ let _ = self.channel.send(true).await;
38
+ }
39
+
40
+ pub async fn idle(&self) {
41
+ let _ = self.channel.send(false).await;
42
+ }
43
+ }
44
+
45
+ async fn run(publish: impl Fn(bool, Duration), mut channel: Receiver<bool>) {
46
+ let mut busy = false;
47
+ let mut since = Instant::now();
48
+ loop {
49
+ tokio::select! {
50
+ rxed = channel.recv() => {
51
+ let Some(rxed) = rxed else { break };
52
+ publish(busy, since.elapsed());
53
+ busy = rxed;
54
+ since = Instant::now();
55
+ },
56
+ _ = sleep(Duration::from_secs(30)) => {
57
+ publish(busy, since.elapsed());
58
+ since = Instant::now();
59
+ }
60
+ }
61
+ }
62
+ }
@@ -39,11 +39,9 @@ use tracing::*;
39
39
  use crate::{
40
40
  NidxMetadata, Settings,
41
41
  metadata::{Deletion, Index, IndexKind, MergeJob, NewSegment, Segment},
42
- metrics::{
43
- IndexKindLabels, OperationStatusLabels,
44
- worker::{MERGE_COUNTER, PER_INDEX_MERGE_TIME},
45
- },
42
+ metrics::{IndexKindLabels, OperationStatusLabels, worker::*},
46
43
  segment_store::{download_segment, pack_and_upload},
44
+ utilization_tracker::UtilizationTracker,
47
45
  };
48
46
 
49
47
  pub async fn run(settings: Settings, shutdown: CancellationToken) -> anyhow::Result<()> {
@@ -55,9 +53,14 @@ pub async fn run(settings: Settings, shutdown: CancellationToken) -> anyhow::Res
55
53
  None => tempfile::env::temp_dir(),
56
54
  };
57
55
 
56
+ let utilization = UtilizationTracker::new(|busy, duration| {
57
+ WORKER_BUSY.get_or_create(&busy.into()).inc_by(duration.as_secs_f64());
58
+ });
59
+
58
60
  while !shutdown.is_cancelled() {
59
61
  let job = MergeJob::take(&meta.pool).await?;
60
62
  if let Some(job) = job {
63
+ utilization.busy().await;
61
64
  let span = info_span!("worker_job", ?job.id);
62
65
  info!(job.id, "Running job");
63
66
 
@@ -85,6 +88,7 @@ pub async fn run(settings: Settings, shutdown: CancellationToken) -> anyhow::Res
85
88
  // Stop keep alives
86
89
  keepalive.abort();
87
90
  } else {
91
+ utilization.idle().await;
88
92
  debug!("No jobs, waiting for more");
89
93
  tokio::select! {
90
94
  _ = tokio::time::sleep(Duration::from_secs(5)) => {},