nidx-binding 6.3.1.post20__tar.gz → 6.3.1.post26__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 (242) hide show
  1. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/PKG-INFO +1 -1
  2. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_protos/pyproject.toml +1 -1
  3. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/pyproject.toml +1 -1
  4. nidx_binding-6.3.1.post26/src/searcher/query_language.rs +123 -0
  5. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/searcher/query_planner.rs +23 -31
  6. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/searcher/shard_suggest.rs +2 -16
  7. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/tests/common/services.rs +8 -17
  8. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/tests/test_date_range_search.rs +90 -28
  9. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/tests/test_search_filtering.rs +79 -27
  10. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/tests/test_searcher_cluster.rs +5 -5
  11. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/tests/test_suggest.rs +30 -21
  12. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/tests/test_synced_searcher.rs +10 -7
  13. nidx_binding-6.3.1.post20/src/searcher/query_language.rs +0 -584
  14. nidx_binding-6.3.1.post20/src/searcher/query_planner/old_filter_compatibility.rs +0 -212
  15. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-0cfce9b29547f8f5bafa6e440f86103be7b8c4ad2fd92db9ac223f4efbe23d10.json +0 -0
  16. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-1a561eed00f3dbe868bf5030059793300209179dc8fb73e4b57a54b5e81262fe.json +0 -0
  17. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-1d3fca2682e25a01143da92285297f134a6a105a96f64d87e0db3abb219855e4.json +0 -0
  18. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-249b3b57c27a71baa823f1fe0f0bba9c9af36f61c28f731e58beea60ec48e687.json +0 -0
  19. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-24cb6b683daa42d7125f862e25943ab4be7bf275cd8739f8da4859d701795e1a.json +0 -0
  20. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-263c8fce6db5b03bbd012fafdba6943cbee6ed7eb8976cdef4f5b01dde7ca6fd.json +0 -0
  21. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-2a5d92fb1638df830a4477a7cdf24e6db6b43034b7bbe74fdfb63e8afe2c4071.json +0 -0
  22. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-2b065a363f58caed60e3706603c1260dbf5a4c795604a5b68edda22eb07fec1b.json +0 -0
  23. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-3fc3cb39934683de8cd475ce1368c8373453eb1e01f81587d66b9d14b109ce6e.json +0 -0
  24. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-48f33b77b7c1633467b0b2efcaa1d3c207e7757e4f1d83b40d15e6ca365f7771.json +0 -0
  25. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-4ae09f2c08e2f324bee01bb8487a8f37678a1c5e9d327339235c50d4921a8949.json +0 -0
  26. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-4d7a76fa413c9ef0ce2a47ac7bb7e01d3e6a2aabded9487d21010a53efee8852.json +0 -0
  27. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-4fcbdd6657c7dc9b60b3a563dd41711b3dbcf72ce063427b7a01f8cddf34c244.json +0 -0
  28. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-577109ac00ccfbd38ecaccab94116f2f46a4caf5612afa372cded197123c1e08.json +0 -0
  29. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-5db25f97d8578d6d78f2f6bd4b72cc82a9b1b82805c6422d967ac63b20d99db4.json +0 -0
  30. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-5ec3233a3a23e926055056d46bdde17836a633066dbb5f349502648cd3ea9a60.json +0 -0
  31. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-66edb6ea424d8681927dcddb6bac5f1239175f4775d1f40417ba15054b0c6f19.json +0 -0
  32. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-6f9c6d201c1b5712efb68c363bffd3e0169c11f2a8f925e8cd4e8808599ff7b4.json +0 -0
  33. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-733c3ebacc86f444bf5e2dd79ade660c291e88a00fc09b722f6e2e191545874c.json +0 -0
  34. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-77a245aed9f6f8b9fc643efbd4b1e2e8e99bbba085e3e75a4f29321cd7b2a25c.json +0 -0
  35. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-7a3bf27c330c468a596e8a297cf7d8b192e31e67ecc5177c1267f579e8e247c7.json +0 -0
  36. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-7a7e59e47b30b12237511fd3d7da2d17b0471ad2b006af48d6a6f587c779692b.json +0 -0
  37. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-7dcbb33312cc9f11ae3a6d73b1ace017a9f19a8bf8f10304fc57977c8efeadff.json +0 -0
  38. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-7efa7c0d747afc4b6aed0586ff846c27839c3213ff7ee9f30c89b0d0f17e60e3.json +0 -0
  39. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-8493140d788604d498a4e48da4158708572ccc9d60185290a00d549cc84533db.json +0 -0
  40. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-8493bb0059b013eaca42fd10cd7d04f0d06a8acaed379eff0d23f3229edde9ee.json +0 -0
  41. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-87996b3d6c7a2195438d7038015b06949102bce8c7b8cd8db1f83aaf23cbe489.json +0 -0
  42. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-8f096d8171b89f9615d18f95d696dc9e4fb3674e103161a713cdc806f7a68506.json +0 -0
  43. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-917732a56ee04bf3a6e127319dda8225210869c82f9828d878162394dba4e078.json +0 -0
  44. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-95fe4ef93ee90733db1b67ed7987f80b5aac792f1590b979c68b418d1599eb98.json +0 -0
  45. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-9b67658569b343d8b4b61ae0a7dc721f367f2ba33c7b69b9e68bfd5c9bff5206.json +0 -0
  46. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-9c8062ea55d070afef68309e58fa987eb37fda44e1efbf68c8ba2af7846cc968.json +0 -0
  47. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-a06e1d9f6f95e4c4c2b98310ebddcc9d963cc033582bf2e945e8bf3a301b4247.json +0 -0
  48. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-a55265c9b07bd1399961a6f1e757201fd0eebe868ddaf96437111113d80fce92.json +0 -0
  49. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-a891a37be5c2d7cce775c2dd33726b0318fd3839beab222a1b22bc6174604207.json +0 -0
  50. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-a945191bb4b3e37d6823ed3ad499339d007d69983105de8567777d9daf517b28.json +0 -0
  51. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-abe9f7832f2bd799ac44008da031e8d8ab52d4f5fbfc2a7e3974e8873bae55b2.json +0 -0
  52. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-aca588cca57a85e4d7fcc40c23cd87e57d53d11ca550d78e7e3d5e39e524fcd3.json +0 -0
  53. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-b02f8aafc00a7724510772ac41269e368c5bccf03ef7b4590e0ef6fd1a1bf64f.json +0 -0
  54. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-b742e17cabe2d64617e9aa64bafc782172f7a4f8023d1b54f952a0fb39f6b2b8.json +0 -0
  55. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-b94e349dbc0daec57f8f8f6e9e2dffb06100b1bb2b41d297c9f3b191da37a83d.json +0 -0
  56. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-bd9afa22994aba671dbf7b5f89b53c2ee02f53c0442a81265786a6d52d08512f.json +0 -0
  57. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-be60554eca98a5899efc6b49785cecd6444a6d39afed9e4a884ce2dbf162012c.json +0 -0
  58. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-bf49702b506c9a1650ece1f8e8d9f14834a902f8caefafe30ded55e2790f2188.json +0 -0
  59. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-bfb8ae2e860e451b0868a7b1b50a451d998b2105f9fdfd307b26a1775d145e9f.json +0 -0
  60. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-bfcd21ed704cd305db5c17fcdec7d92aa4ac501913c9c9514d8ff92928c0c7e7.json +0 -0
  61. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-c3ab694650f49a75b146fb877a92e48c4f20f0d99f70f8ec859fbb763b01a1e5.json +0 -0
  62. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-c55542bb9fae544d87fae6f30e0fe8a9088d12075f4442ab4fe2fcd05e472234.json +0 -0
  63. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-cb29a6556d35ac630ee0aa885dd7341cf9573bd3efd216ff8a887b87686b03db.json +0 -0
  64. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-d0a1f341a89f5f14696b10baa72db9d95551c2b7e5fc67308fd52dc03dd98a92.json +0 -0
  65. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-d2ad0a0ca2649c9e4873cfcc1fc66d2d07cc45d0f65c560b06d7b5f592f4fa8a.json +0 -0
  66. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-d6cfe78eb635ba0b89ca4021a4dc8182d18ab5b197f30149cd28488eba4c1df5.json +0 -0
  67. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-d729b56dea00e49dcdba8cf0001e2811da27351eabe98212db3b589f18fc6f32.json +0 -0
  68. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-d9658bfd4e7170b41d03f2ddf2446d0bf54171c0d39d53bf20af2b8437f2ec48.json +0 -0
  69. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-dbba7b3d3289425bae711aedbf73fbc3699f857f86f84d95c3b556d05c5658b0.json +0 -0
  70. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-dcb96b649d6d63a58efd5d445453a4f3d7869a56ff714b69bedf3d616a0473ca.json +0 -0
  71. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-ebd876fbf5362a5900e75bc05f2f11c73c406ef7da4e95097fc6a1c3d1b8bc54.json +0 -0
  72. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-eef5cc6bce1cc14eba8f3e68971724ef181e88cffcedd74673615f2026b89a62.json +0 -0
  73. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/.sqlx/query-ef56d5fefc5774040d1ee397beadb475f6af02768c22f0e583c74062e2e821ce.json +0 -0
  74. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/Cargo.lock +0 -0
  75. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/Cargo.toml +0 -0
  76. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/README.md +0 -0
  77. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/migrations/20241007163501_initial.sql +0 -0
  78. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/migrations/20241211120039_merge_job_priority.sql +0 -0
  79. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/migrations/20241211121159_basic_indexes.sql +0 -0
  80. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/migrations/20241212151105_check_segment_records.sql +0 -0
  81. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/migrations/20250110145554_in_flight_messages.sql +0 -0
  82. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_binding/Cargo.toml +0 -0
  83. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_binding/src/lib.rs +0 -0
  84. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/Cargo.toml +0 -0
  85. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/src/fuzzy_query.rs +0 -0
  86. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/src/lib.rs +0 -0
  87. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/src/query_io.rs +0 -0
  88. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/src/reader.rs +0 -0
  89. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/src/request_types.rs +0 -0
  90. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/src/resource_indexer.rs +0 -0
  91. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/src/schema.rs +0 -0
  92. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/src/search_query.rs +0 -0
  93. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/src/search_response.rs +0 -0
  94. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/src/set_query.rs +0 -0
  95. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/src/stop_words.rs +0 -0
  96. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/README.md +0 -0
  97. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/ar.json +0 -0
  98. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/az.json +0 -0
  99. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/bn.json +0 -0
  100. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/ca.json +0 -0
  101. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/ch.json +0 -0
  102. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/da.json +0 -0
  103. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/de.json +0 -0
  104. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/el.json +0 -0
  105. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/en.json +0 -0
  106. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/es.json +0 -0
  107. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/eu.json +0 -0
  108. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/extract.py +0 -0
  109. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/fi.json +0 -0
  110. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/fr.json +0 -0
  111. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/he.json +0 -0
  112. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/hu.json +0 -0
  113. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/id.json +0 -0
  114. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/it.json +0 -0
  115. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/kk.json +0 -0
  116. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/ne.json +0 -0
  117. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/nl.json +0 -0
  118. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/no.json +0 -0
  119. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/pt.json +0 -0
  120. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/ro.json +0 -0
  121. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/ru.json +0 -0
  122. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/sl.json +0 -0
  123. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/sv.json +0 -0
  124. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/tg.json +0 -0
  125. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/stop_words/tr.json +0 -0
  126. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/tests/common/mod.rs +0 -0
  127. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_paragraph/tests/reader.rs +0 -0
  128. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_protos/Cargo.toml +0 -0
  129. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_protos/build.py +0 -0
  130. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_protos/build.rs +0 -0
  131. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_protos/src/lib.rs +0 -0
  132. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_protos/src/nidx.proto +0 -0
  133. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_relation/Cargo.toml +0 -0
  134. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_relation/src/graph_query_parser.rs +0 -0
  135. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_relation/src/io_maps.rs +0 -0
  136. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_relation/src/lib.rs +0 -0
  137. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_relation/src/reader.rs +0 -0
  138. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_relation/src/resource_indexer.rs +0 -0
  139. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_relation/src/schema.rs +0 -0
  140. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_relation/tests/common/mod.rs +0 -0
  141. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_relation/tests/test_graph_search.rs +0 -0
  142. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_relation/tests/test_reader.rs +0 -0
  143. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_relation/tests/test_writer.rs +0 -0
  144. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_tantivy/Cargo.toml +0 -0
  145. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_tantivy/src/index_reader.rs +0 -0
  146. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_tantivy/src/lib.rs +0 -0
  147. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_tests/Cargo.toml +0 -0
  148. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_tests/src/lib.rs +0 -0
  149. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_text/Cargo.toml +0 -0
  150. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_text/src/lib.rs +0 -0
  151. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_text/src/prefilter.rs +0 -0
  152. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_text/src/query_io.rs +0 -0
  153. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_text/src/reader.rs +0 -0
  154. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_text/src/request_types.rs +0 -0
  155. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_text/src/resource_indexer.rs +0 -0
  156. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_text/src/schema.rs +0 -0
  157. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_text/src/search_query.rs +0 -0
  158. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_text/tests/common/mod.rs +0 -0
  159. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_text/tests/test_flow.rs +0 -0
  160. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_text/tests/test_search.rs +0 -0
  161. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_text/tests/test_streaming.rs +0 -0
  162. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_types/Cargo.toml +0 -0
  163. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_types/src/lib.rs +0 -0
  164. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_types/src/prefilter.rs +0 -0
  165. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_types/src/query_language.rs +0 -0
  166. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/Cargo.toml +0 -0
  167. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/config.rs +0 -0
  168. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/data_point/disk_hnsw.rs +0 -0
  169. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/data_point/mod.rs +0 -0
  170. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/data_point/node.rs +0 -0
  171. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/data_point/ops_hnsw.rs +0 -0
  172. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/data_point/params.rs +0 -0
  173. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/data_point/ram_hnsw.rs +0 -0
  174. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/data_point/tests.rs +0 -0
  175. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/data_point_provider/mod.rs +0 -0
  176. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/data_point_provider/reader.rs +0 -0
  177. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/data_types/data_store.rs +0 -0
  178. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/data_types/mod.rs +0 -0
  179. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/data_types/trie.rs +0 -0
  180. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/data_types/trie_ram.rs +0 -0
  181. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/formula/mod.rs +0 -0
  182. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/indexer.rs +0 -0
  183. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/inverted_index/fst_index.rs +0 -0
  184. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/inverted_index/map.rs +0 -0
  185. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/inverted_index.rs +0 -0
  186. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/lib.rs +0 -0
  187. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/query_io.rs +0 -0
  188. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/request_types.rs +0 -0
  189. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/utils.rs +0 -0
  190. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/vector_types/dense_f32.rs +0 -0
  191. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/src/vector_types/mod.rs +0 -0
  192. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/tests/common/mod.rs +0 -0
  193. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/tests/test_basic_search.rs +0 -0
  194. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/nidx_vector/tests/test_hidden.rs +0 -0
  195. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/api/grpc.rs +0 -0
  196. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/api/shards.rs +0 -0
  197. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/api.rs +0 -0
  198. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/control.rs +0 -0
  199. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/errors.rs +0 -0
  200. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/grpc_server.rs +0 -0
  201. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/import_export.rs +0 -0
  202. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/indexer.rs +0 -0
  203. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/lib.rs +0 -0
  204. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/main.rs +0 -0
  205. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/metadata/deletion.rs +0 -0
  206. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/metadata/index.rs +0 -0
  207. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/metadata/index_request.rs +0 -0
  208. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/metadata/merge_job.rs +0 -0
  209. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/metadata/segment.rs +0 -0
  210. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/metadata/shard.rs +0 -0
  211. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/metadata.rs +0 -0
  212. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/metrics.rs +0 -0
  213. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/scheduler/audit_task.rs +0 -0
  214. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/scheduler/log_merge.rs +0 -0
  215. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/scheduler/merge_task.rs +0 -0
  216. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/scheduler/metrics_task.rs +0 -0
  217. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/scheduler/purge_tasks.rs +0 -0
  218. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/scheduler/vector_merge.rs +0 -0
  219. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/scheduler.rs +0 -0
  220. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/searcher/grpc.rs +0 -0
  221. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/searcher/index_cache.rs +0 -0
  222. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/searcher/shard_search.rs +0 -0
  223. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/searcher/shard_selector.rs +0 -0
  224. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/searcher/streams.rs +0 -0
  225. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/searcher/sync.rs +0 -0
  226. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/searcher.rs +0 -0
  227. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/segment_store.rs +0 -0
  228. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/settings.rs +0 -0
  229. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/telemetry/duration_layer.rs +0 -0
  230. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/telemetry/log_format.rs +0 -0
  231. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/telemetry/middleware.rs +0 -0
  232. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/telemetry.rs +0 -0
  233. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/tool.rs +0 -0
  234. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/src/worker.rs +0 -0
  235. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/tests/common/mod.rs +0 -0
  236. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/tests/test_search_relations.rs +0 -0
  237. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/tests/test_search_sorting.rs +0 -0
  238. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/tests/test_security_search.rs +0 -0
  239. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/tests/test_shards.rs +0 -0
  240. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/tests/test_shards_api.rs +0 -0
  241. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/tests/test_vector_normalization.rs +0 -0
  242. {nidx_binding-6.3.1.post20 → nidx_binding-6.3.1.post26}/tests/test_vectorsets.rs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nidx_binding
3
- Version: 6.3.1.post20
3
+ Version: 6.3.1.post26
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  Classifier: Programming Language :: Python :: Implementation :: PyPy
@@ -4,7 +4,7 @@ build-backend = "pdm.backend"
4
4
 
5
5
  [project]
6
6
  name = "nidx_protos"
7
- version = "6.3.1.post20"
7
+ version = "6.3.1.post26"
8
8
  license = { text = "AGPL" }
9
9
  description = "Protobuf definitions for nucliadb/nidx"
10
10
  authors = [ { name = "Nuclia", email = "nucliadb@nuclia.com" }]
@@ -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.1.post20"
16
+ version = "6.3.1.post26"
17
17
 
18
18
  [project.urls]
19
19
  Homepage = "https://nuclia.com"
@@ -0,0 +1,123 @@
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
+ use nidx_protos::{
21
+ filter_expression::{Expr, FacetFilter, FilterExpressionList},
22
+ FilterExpression,
23
+ };
24
+ use nidx_types::query_language::*;
25
+
26
+ /// Extract an expression only involving some labels if it's an AND subset of the total expression
27
+ pub fn extract_label_filters(expression: &FilterExpression, labels: &[&str]) -> Option<BooleanExpression> {
28
+ match expression.expr.as_ref().unwrap() {
29
+ Expr::Facet(FacetFilter {
30
+ facet,
31
+ }) if labels.contains(&facet.as_str()) => Some(BooleanExpression::Literal(facet.clone())),
32
+ Expr::BoolNot(not_expr) => {
33
+ extract_label_filters(not_expr.as_ref(), labels).map(|e| BooleanExpression::Not(Box::new(e)))
34
+ }
35
+ Expr::BoolAnd(FilterExpressionList {
36
+ operands,
37
+ }) => {
38
+ let relevant: Vec<_> = operands.iter().filter_map(|e| extract_label_filters(e, labels)).collect();
39
+ match &relevant[..] {
40
+ [] => None,
41
+ [expression] => Some(expression.clone()),
42
+ _ => Some(BooleanExpression::Operation(BooleanOperation {
43
+ operator: Operator::And,
44
+ operands: relevant,
45
+ })),
46
+ }
47
+ }
48
+ _ => None,
49
+ }
50
+ }
51
+
52
+ #[cfg(test)]
53
+ mod tests {
54
+ use super::*;
55
+
56
+ #[test]
57
+ fn test_extract_label_filters() {
58
+ const LABELS: &[&str] = &["/v", "/w"];
59
+
60
+ let a = FilterExpression {
61
+ expr: Some(Expr::Facet(FacetFilter {
62
+ facet: "/a".into(),
63
+ })),
64
+ };
65
+ let v = FilterExpression {
66
+ expr: Some(Expr::Facet(FacetFilter {
67
+ facet: "/v".into(),
68
+ })),
69
+ };
70
+ let w = FilterExpression {
71
+ expr: Some(Expr::Facet(FacetFilter {
72
+ facet: "/w".into(),
73
+ })),
74
+ };
75
+
76
+ let not = |e| FilterExpression {
77
+ expr: Some(Expr::BoolNot(Box::new(e))),
78
+ };
79
+
80
+ // Literal
81
+ assert_eq!(extract_label_filters(&a, LABELS), None);
82
+ assert_eq!(extract_label_filters(&v, LABELS), Some(BooleanExpression::Literal("/v".into())));
83
+
84
+ // Not literal
85
+ assert_eq!(extract_label_filters(&not(a.clone()), LABELS), None);
86
+
87
+ assert_eq!(
88
+ extract_label_filters(&not(v.clone()), LABELS),
89
+ Some(BooleanExpression::Not(Box::new(BooleanExpression::Literal("/v".into()))))
90
+ );
91
+
92
+ // Or (not supported)
93
+ let or_expr = FilterExpression {
94
+ expr: Some(Expr::BoolOr(FilterExpressionList {
95
+ operands: vec![a.clone(), v.clone(), not(w.clone())],
96
+ })),
97
+ };
98
+ assert_eq!(extract_label_filters(&or_expr, LABELS), None);
99
+
100
+ // And
101
+ let expr = FilterExpression {
102
+ expr: Some(Expr::BoolAnd(FilterExpressionList {
103
+ operands: vec![a.clone(), v.clone(), not(w.clone())],
104
+ })),
105
+ };
106
+ let expected = BooleanExpression::Operation(BooleanOperation {
107
+ operator: Operator::And,
108
+ operands: vec![
109
+ BooleanExpression::Literal("/v".into()),
110
+ BooleanExpression::Not(Box::new(BooleanExpression::Literal("/w".into()))),
111
+ ],
112
+ });
113
+ assert_eq!(extract_label_filters(&expr, LABELS), Some(expected));
114
+
115
+ // Nested
116
+ let expr = FilterExpression {
117
+ expr: Some(Expr::BoolAnd(FilterExpressionList {
118
+ operands: vec![a, v, or_expr],
119
+ })),
120
+ };
121
+ assert_eq!(extract_label_filters(&expr, LABELS), Some(BooleanExpression::Literal("/v".into())));
122
+ }
123
+ }
@@ -27,12 +27,9 @@ use nidx_types::prefilter::PrefilterResult;
27
27
  use nidx_types::query_language::*;
28
28
  use nidx_vector::VectorSearchRequest;
29
29
  use nidx_vector::SEGMENT_TAGS;
30
- use old_filter_compatibility::filter_from_search_request;
31
30
 
32
31
  use super::query_language::extract_label_filters;
33
32
 
34
- pub mod old_filter_compatibility;
35
-
36
33
  /// The queries a [`QueryPlan`] has decided to send to each index.
37
34
  #[derive(Default, Clone)]
38
35
  pub struct IndexQueries {
@@ -67,19 +64,7 @@ pub struct QueryPlan {
67
64
  pub index_queries: IndexQueries,
68
65
  }
69
66
 
70
- pub fn build_query_plan(mut search_request: SearchRequest) -> anyhow::Result<QueryPlan> {
71
- // Backwards compatibility with old filters
72
- let (field_filter, paragraph_filter) = filter_from_search_request(&search_request)?;
73
- let has_old_filters = field_filter.is_some() || paragraph_filter.is_some();
74
- let has_new_filters = search_request.field_filter.is_some() || search_request.paragraph_filter.is_some();
75
- if has_old_filters && has_new_filters {
76
- return Err(anyhow::anyhow!("Cannot specify old and new filters in the same request"));
77
- }
78
- if has_old_filters {
79
- search_request.field_filter = field_filter;
80
- search_request.paragraph_filter = paragraph_filter;
81
- }
82
-
67
+ pub fn build_query_plan(search_request: SearchRequest) -> anyhow::Result<QueryPlan> {
83
68
  let relations_request = compute_relations_request(&search_request);
84
69
  let texts_request = compute_texts_request(&search_request);
85
70
  let vectors_request = compute_vectors_request(&search_request)?;
@@ -186,7 +171,6 @@ fn compute_relations_request(search_request: &SearchRequest) -> Option<RelationS
186
171
  shard_id: search_request.shard.clone(),
187
172
  prefix: search_request.relation_prefix.clone(),
188
173
  subgraph: search_request.relation_subgraph.clone(),
189
- reload: search_request.reload,
190
174
  })
191
175
  }
192
176
 
@@ -222,29 +206,37 @@ pub fn filter_to_boolean_expression(filter: FilterExpression) -> anyhow::Result<
222
206
 
223
207
  #[cfg(test)]
224
208
  mod tests {
225
- use nidx_protos::{filter_expression::FacetFilter, Filter};
209
+ use nidx_protos::filter_expression::{FacetFilter, FilterExpressionList};
226
210
 
227
211
  use super::*;
228
212
  #[test]
229
213
  fn proper_propagation() {
230
- let expression = serde_json::json!({
231
- "and": [
232
- { "literal": "this" },
233
- { "literal": "and" },
234
- { "literal": "that"},
235
- ],
236
- });
237
214
  #[allow(deprecated)]
238
215
  let request = SearchRequest {
239
- filter: Some(Filter {
240
- field_labels: vec!["this".to_string()],
241
- paragraph_labels: vec!["and".to_string(), "that".to_string()],
242
- labels_expression: expression.to_string(),
243
- keywords_expression: "".to_string(),
244
- }),
245
216
  result_per_page: 10,
246
217
  vector: vec![1.0],
247
218
  paragraph: true,
219
+ field_filter: Some(FilterExpression {
220
+ expr: Some(Expr::Facet(FacetFilter {
221
+ facet: "this".into(),
222
+ })),
223
+ }),
224
+ paragraph_filter: Some(FilterExpression {
225
+ expr: Some(Expr::BoolAnd(FilterExpressionList {
226
+ operands: vec![
227
+ FilterExpression {
228
+ expr: Some(Expr::Facet(FacetFilter {
229
+ facet: "and".into(),
230
+ })),
231
+ },
232
+ FilterExpression {
233
+ expr: Some(Expr::Facet(FacetFilter {
234
+ facet: "that".into(),
235
+ })),
236
+ },
237
+ ],
238
+ })),
239
+ }),
248
240
  ..Default::default()
249
241
  };
250
242
  let query_plan = build_query_plan(request).unwrap();
@@ -29,10 +29,7 @@ use tracing::{instrument, Span};
29
29
 
30
30
  use crate::errors::{NidxError, NidxResult};
31
31
 
32
- use super::{
33
- index_cache::IndexCache,
34
- query_planner::{filter_to_boolean_expression, old_filter_compatibility::filter_from_suggest_request},
35
- };
32
+ use super::{index_cache::IndexCache, query_planner::filter_to_boolean_expression};
36
33
 
37
34
  /// Max number of words accepted as a suggest query. This is useful for
38
35
  /// compounds with semantic meaning (like a name and a surname) but can add
@@ -99,18 +96,7 @@ fn blocking_suggest(
99
96
 
100
97
  let mut paragraph_request = None;
101
98
  if suggest_paragraphs {
102
- let filter_expression = filter_from_suggest_request(&request)?;
103
- if let Some(expr) = filter_expression {
104
- if request.field_filter.is_some() {
105
- return Err(anyhow::anyhow!("Cannot specify old and new filters in the same request"));
106
- }
107
- let prefilter = PreFilterRequest {
108
- security: None,
109
- filter_expression: Some(expr),
110
- };
111
-
112
- prefiltered = text_searcher.prefilter(&prefilter)?;
113
- } else if let Some(expr) = &request.field_filter {
99
+ if let Some(expr) = &request.field_filter {
114
100
  let prefilter = PreFilterRequest {
115
101
  security: None,
116
102
  filter_expression: Some(expr.clone()),
@@ -19,14 +19,15 @@
19
19
  //
20
20
 
21
21
  use std::sync::Arc;
22
+ use std::time::Duration;
22
23
 
23
24
  use nidx::api::grpc::ApiServer;
24
25
  use nidx::grpc_server::GrpcServer;
25
26
  use nidx::indexer::index_resource;
26
27
  use nidx::searcher::grpc::SearchServer;
27
28
  use nidx::searcher::shard_selector::ShardSelector;
28
- use nidx::searcher::{SyncStatus, SyncedSearcher};
29
- use nidx::settings::{EnvSettings, MetadataSettings, SearcherSettings, StorageSettings};
29
+ use nidx::searcher::SyncedSearcher;
30
+ use nidx::settings::{EnvSettings, MetadataSettings, StorageSettings};
30
31
  use nidx::{NidxMetadata, Settings};
31
32
  use nidx_protos::nidx::nidx_api_client::NidxApiClient;
32
33
  use nidx_protos::nidx::nidx_searcher_client::NidxSearcherClient;
@@ -34,7 +35,6 @@ use nidx_protos::Resource;
34
35
  use object_store::memory::InMemory;
35
36
  use sqlx::PgPool;
36
37
  use tempfile::tempdir;
37
- use tokio::sync::watch;
38
38
  use tokio_util::sync::CancellationToken;
39
39
  use tonic::transport::Channel;
40
40
 
@@ -43,7 +43,6 @@ pub struct NidxFixture {
43
43
  pub api_client: NidxApiClient<Channel>,
44
44
  pub settings: Settings,
45
45
  seq: i64,
46
- sync_watcher: watch::Receiver<SyncStatus>,
47
46
  }
48
47
 
49
48
  impl NidxFixture {
@@ -66,11 +65,7 @@ impl NidxFixture {
66
65
  telemetry: Default::default(),
67
66
  work_path: None,
68
67
  control_socket: None,
69
- searcher: Some(SearcherSettings {
70
- // Reduced refresh interval for faster testing
71
- metadata_refresh_interval: 0.1,
72
- ..Default::default()
73
- }),
68
+ searcher: Default::default(),
74
69
  audit: None,
75
70
  },
76
71
  };
@@ -88,7 +83,6 @@ impl NidxFixture {
88
83
  let searcher_port = searcher_server.port()?;
89
84
  tokio::task::spawn(searcher_server.serve(searcher_api.into_router(), shutdown.clone()));
90
85
  let settings_copy = settings.clone();
91
- let (sync_reporter, sync_watcher) = watch::channel(SyncStatus::Syncing);
92
86
  tokio::task::spawn(async move {
93
87
  searcher
94
88
  .run(
@@ -96,7 +90,7 @@ impl NidxFixture {
96
90
  settings_copy.searcher.clone().unwrap_or_default(),
97
91
  shutdown.clone(),
98
92
  ShardSelector::new_single(),
99
- Some(sync_reporter),
93
+ None,
100
94
  None,
101
95
  )
102
96
  .await
@@ -111,7 +105,6 @@ impl NidxFixture {
111
105
  api_client,
112
106
  settings,
113
107
  seq: 1,
114
- sync_watcher,
115
108
  })
116
109
  }
117
110
 
@@ -129,10 +122,8 @@ impl NidxFixture {
129
122
  Ok(())
130
123
  }
131
124
 
132
- pub async fn wait_sync(&mut self) {
133
- // Wait for a new sync to start
134
- self.sync_watcher.wait_for(|s| matches!(s, SyncStatus::Syncing)).await.unwrap();
135
- // Wait for it to finish
136
- self.sync_watcher.wait_for(|s| matches!(s, SyncStatus::Synced)).await.unwrap();
125
+ pub async fn wait_sync(&self) {
126
+ // TODO: Check the searcher has synced? For now, waiting twice the sync interval
127
+ tokio::time::sleep(Duration::from_secs(2)).await;
137
128
  }
138
129
  }
@@ -23,11 +23,13 @@ mod common;
23
23
  use std::collections::HashMap;
24
24
 
25
25
  use common::services::NidxFixture;
26
+ use nidx_protos::filter_expression::date_range_filter::DateField;
27
+ use nidx_protos::filter_expression::{DateRangeFilter, Expr, FilterExpressionList};
26
28
  use nidx_protos::prost_types::Timestamp;
27
29
  use nidx_protos::resource::ResourceStatus;
28
30
  use nidx_protos::{
29
- IndexMetadata, IndexParagraph, IndexParagraphs, NewShardRequest, Resource, ResourceId, SearchRequest,
30
- TextInformation, Timestamps, VectorIndexConfig, VectorSentence, VectorsetSentences,
31
+ FilterExpression, IndexMetadata, IndexParagraph, IndexParagraphs, NewShardRequest, Resource, ResourceId,
32
+ SearchRequest, TextInformation, VectorIndexConfig, VectorSentence, VectorsetSentences,
31
33
  };
32
34
  use sqlx::PgPool;
33
35
  use tonic::Request;
@@ -138,7 +140,6 @@ async fn test_date_range_search(pool: PgPool) -> Result<(), Box<dyn std::error::
138
140
  let request = SearchRequest {
139
141
  shard: shard_id.clone(),
140
142
  order: None,
141
- timestamps: None,
142
143
  vectorset: "english".to_string(),
143
144
  vector: vec![4.0, 6.0, 7.0],
144
145
  page_number: 0,
@@ -158,11 +159,25 @@ async fn test_date_range_search(pool: PgPool) -> Result<(), Box<dyn std::error::
158
159
 
159
160
  // Time range allows everything
160
161
  let mut request_all_range = request.clone();
161
- request_all_range.timestamps = Some(Timestamps {
162
- from_modified: Some(base_time),
163
- to_modified: None,
164
- from_created: Some(base_time),
165
- to_created: None,
162
+ request_all_range.field_filter = Some(FilterExpression {
163
+ expr: Some(Expr::BoolAnd(FilterExpressionList {
164
+ operands: vec![
165
+ FilterExpression {
166
+ expr: Some(Expr::Date(DateRangeFilter {
167
+ field: DateField::Modified.into(),
168
+ since: Some(base_time),
169
+ until: None,
170
+ })),
171
+ },
172
+ FilterExpression {
173
+ expr: Some(Expr::Date(DateRangeFilter {
174
+ field: DateField::Created.into(),
175
+ since: Some(base_time),
176
+ until: None,
177
+ })),
178
+ },
179
+ ],
180
+ })),
166
181
  });
167
182
  let result = fixture.searcher_client.search(request_all_range).await.unwrap();
168
183
  let result = result.into_inner();
@@ -171,11 +186,25 @@ async fn test_date_range_search(pool: PgPool) -> Result<(), Box<dyn std::error::
171
186
 
172
187
  // Time range allows only second batch
173
188
  let mut request_second_batch = request.clone();
174
- request_second_batch.timestamps = Some(Timestamps {
175
- from_modified: Some(base_time_plus_one),
176
- to_modified: None,
177
- from_created: Some(base_time_plus_one),
178
- to_created: None,
189
+ request_second_batch.field_filter = Some(FilterExpression {
190
+ expr: Some(Expr::BoolAnd(FilterExpressionList {
191
+ operands: vec![
192
+ FilterExpression {
193
+ expr: Some(Expr::Date(DateRangeFilter {
194
+ field: DateField::Modified.into(),
195
+ since: Some(base_time_plus_one),
196
+ until: None,
197
+ })),
198
+ },
199
+ FilterExpression {
200
+ expr: Some(Expr::Date(DateRangeFilter {
201
+ field: DateField::Created.into(),
202
+ since: Some(base_time_plus_one),
203
+ until: None,
204
+ })),
205
+ },
206
+ ],
207
+ })),
179
208
  });
180
209
  let result = fixture.searcher_client.search(request_second_batch).await.unwrap();
181
210
  let result = result.into_inner();
@@ -184,11 +213,16 @@ async fn test_date_range_search(pool: PgPool) -> Result<(), Box<dyn std::error::
184
213
 
185
214
  // Time range allows only second batch, but with modified only
186
215
  let mut request_second_batch = request.clone();
187
- request_second_batch.timestamps = Some(Timestamps {
188
- from_modified: Some(base_time_plus_one),
189
- to_modified: None,
190
- from_created: None,
191
- to_created: None,
216
+ request_second_batch.field_filter = Some(FilterExpression {
217
+ expr: Some(Expr::BoolAnd(FilterExpressionList {
218
+ operands: vec![FilterExpression {
219
+ expr: Some(Expr::Date(DateRangeFilter {
220
+ field: DateField::Modified.into(),
221
+ since: Some(base_time_plus_one),
222
+ until: None,
223
+ })),
224
+ }],
225
+ })),
192
226
  });
193
227
  let result = fixture.searcher_client.search(request_second_batch).await.unwrap();
194
228
  let result = result.into_inner();
@@ -200,11 +234,25 @@ async fn test_date_range_search(pool: PgPool) -> Result<(), Box<dyn std::error::
200
234
 
201
235
  // Time range does not match any field, therefore the response has no results
202
236
  let mut request_second_batch = request.clone();
203
- request_second_batch.timestamps = Some(Timestamps {
204
- from_modified: Some(base_time_plus_two),
205
- to_modified: None,
206
- from_created: Some(base_time_plus_two),
207
- to_created: None,
237
+ request_second_batch.field_filter = Some(FilterExpression {
238
+ expr: Some(Expr::BoolAnd(FilterExpressionList {
239
+ operands: vec![
240
+ FilterExpression {
241
+ expr: Some(Expr::Date(DateRangeFilter {
242
+ field: DateField::Modified.into(),
243
+ since: Some(base_time_plus_two),
244
+ until: None,
245
+ })),
246
+ },
247
+ FilterExpression {
248
+ expr: Some(Expr::Date(DateRangeFilter {
249
+ field: DateField::Created.into(),
250
+ since: Some(base_time_plus_two),
251
+ until: None,
252
+ })),
253
+ },
254
+ ],
255
+ })),
208
256
  });
209
257
  let result = fixture.searcher_client.search(request_second_batch).await.unwrap();
210
258
  let result = result.into_inner();
@@ -215,11 +263,25 @@ async fn test_date_range_search(pool: PgPool) -> Result<(), Box<dyn std::error::
215
263
 
216
264
  // Multiple timestamps are parsed as AND conditions
217
265
  let mut request_second_batch = request.clone();
218
- request_second_batch.timestamps = Some(Timestamps {
219
- from_modified: Some(base_time_plus_one),
220
- to_modified: None,
221
- from_created: Some(base_time_plus_two),
222
- to_created: None,
266
+ request_second_batch.field_filter = Some(FilterExpression {
267
+ expr: Some(Expr::BoolAnd(FilterExpressionList {
268
+ operands: vec![
269
+ FilterExpression {
270
+ expr: Some(Expr::Date(DateRangeFilter {
271
+ field: DateField::Modified.into(),
272
+ since: Some(base_time_plus_one),
273
+ until: None,
274
+ })),
275
+ },
276
+ FilterExpression {
277
+ expr: Some(Expr::Date(DateRangeFilter {
278
+ field: DateField::Created.into(),
279
+ since: Some(base_time_plus_two),
280
+ until: None,
281
+ })),
282
+ },
283
+ ],
284
+ })),
223
285
  });
224
286
  let result = fixture.searcher_client.search(request_second_batch).await.unwrap();
225
287
  let result = result.into_inner();