nidx-binding 6.7.2.post490__tar.gz → 6.7.2.post495__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 (261) hide show
  1. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/PKG-INFO +1 -1
  2. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/src/query_parser/fuzzy_parser.rs +27 -12
  3. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/src/query_parser/keyword_parser.rs +37 -18
  4. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/src/query_parser/tokenizer.rs +14 -1
  5. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/src/query_parser.rs +35 -3
  6. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_protos/pyproject.toml +1 -1
  7. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/pyproject.toml +1 -1
  8. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.config/nextest.toml +0 -0
  9. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-0cfce9b29547f8f5bafa6e440f86103be7b8c4ad2fd92db9ac223f4efbe23d10.json +0 -0
  10. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-1a561eed00f3dbe868bf5030059793300209179dc8fb73e4b57a54b5e81262fe.json +0 -0
  11. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-1d3fca2682e25a01143da92285297f134a6a105a96f64d87e0db3abb219855e4.json +0 -0
  12. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-249b3b57c27a71baa823f1fe0f0bba9c9af36f61c28f731e58beea60ec48e687.json +0 -0
  13. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-24cb6b683daa42d7125f862e25943ab4be7bf275cd8739f8da4859d701795e1a.json +0 -0
  14. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-263c8fce6db5b03bbd012fafdba6943cbee6ed7eb8976cdef4f5b01dde7ca6fd.json +0 -0
  15. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-2a5d92fb1638df830a4477a7cdf24e6db6b43034b7bbe74fdfb63e8afe2c4071.json +0 -0
  16. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-2b065a363f58caed60e3706603c1260dbf5a4c795604a5b68edda22eb07fec1b.json +0 -0
  17. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-3fc3cb39934683de8cd475ce1368c8373453eb1e01f81587d66b9d14b109ce6e.json +0 -0
  18. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-48f33b77b7c1633467b0b2efcaa1d3c207e7757e4f1d83b40d15e6ca365f7771.json +0 -0
  19. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-4ae09f2c08e2f324bee01bb8487a8f37678a1c5e9d327339235c50d4921a8949.json +0 -0
  20. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-4d7a76fa413c9ef0ce2a47ac7bb7e01d3e6a2aabded9487d21010a53efee8852.json +0 -0
  21. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-4fcbdd6657c7dc9b60b3a563dd41711b3dbcf72ce063427b7a01f8cddf34c244.json +0 -0
  22. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-577109ac00ccfbd38ecaccab94116f2f46a4caf5612afa372cded197123c1e08.json +0 -0
  23. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-5db25f97d8578d6d78f2f6bd4b72cc82a9b1b82805c6422d967ac63b20d99db4.json +0 -0
  24. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-5ec3233a3a23e926055056d46bdde17836a633066dbb5f349502648cd3ea9a60.json +0 -0
  25. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-66edb6ea424d8681927dcddb6bac5f1239175f4775d1f40417ba15054b0c6f19.json +0 -0
  26. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-6f9c6d201c1b5712efb68c363bffd3e0169c11f2a8f925e8cd4e8808599ff7b4.json +0 -0
  27. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-733c3ebacc86f444bf5e2dd79ade660c291e88a00fc09b722f6e2e191545874c.json +0 -0
  28. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-7a3bf27c330c468a596e8a297cf7d8b192e31e67ecc5177c1267f579e8e247c7.json +0 -0
  29. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-7a7e59e47b30b12237511fd3d7da2d17b0471ad2b006af48d6a6f587c779692b.json +0 -0
  30. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-7dcbb33312cc9f11ae3a6d73b1ace017a9f19a8bf8f10304fc57977c8efeadff.json +0 -0
  31. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-7efa7c0d747afc4b6aed0586ff846c27839c3213ff7ee9f30c89b0d0f17e60e3.json +0 -0
  32. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-8493140d788604d498a4e48da4158708572ccc9d60185290a00d549cc84533db.json +0 -0
  33. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-8493bb0059b013eaca42fd10cd7d04f0d06a8acaed379eff0d23f3229edde9ee.json +0 -0
  34. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-87996b3d6c7a2195438d7038015b06949102bce8c7b8cd8db1f83aaf23cbe489.json +0 -0
  35. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-8d33717587c6ee8f5fc339a80b1212a73d6c03e45856b1d55457fc8074709dd0.json +0 -0
  36. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-8f096d8171b89f9615d18f95d696dc9e4fb3674e103161a713cdc806f7a68506.json +0 -0
  37. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-917732a56ee04bf3a6e127319dda8225210869c82f9828d878162394dba4e078.json +0 -0
  38. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-95fe4ef93ee90733db1b67ed7987f80b5aac792f1590b979c68b418d1599eb98.json +0 -0
  39. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-9b67658569b343d8b4b61ae0a7dc721f367f2ba33c7b69b9e68bfd5c9bff5206.json +0 -0
  40. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-9c8062ea55d070afef68309e58fa987eb37fda44e1efbf68c8ba2af7846cc968.json +0 -0
  41. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-a06e1d9f6f95e4c4c2b98310ebddcc9d963cc033582bf2e945e8bf3a301b4247.json +0 -0
  42. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-a55265c9b07bd1399961a6f1e757201fd0eebe868ddaf96437111113d80fce92.json +0 -0
  43. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-a60ec2f66f1e7b84189e5b089f2087a29ff6a64326a3743dea935bbc58ee77fa.json +0 -0
  44. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-a891a37be5c2d7cce775c2dd33726b0318fd3839beab222a1b22bc6174604207.json +0 -0
  45. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-a945191bb4b3e37d6823ed3ad499339d007d69983105de8567777d9daf517b28.json +0 -0
  46. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-abe9f7832f2bd799ac44008da031e8d8ab52d4f5fbfc2a7e3974e8873bae55b2.json +0 -0
  47. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-aca588cca57a85e4d7fcc40c23cd87e57d53d11ca550d78e7e3d5e39e524fcd3.json +0 -0
  48. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-b02f8aafc00a7724510772ac41269e368c5bccf03ef7b4590e0ef6fd1a1bf64f.json +0 -0
  49. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-b742e17cabe2d64617e9aa64bafc782172f7a4f8023d1b54f952a0fb39f6b2b8.json +0 -0
  50. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-b94e349dbc0daec57f8f8f6e9e2dffb06100b1bb2b41d297c9f3b191da37a83d.json +0 -0
  51. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-bd9afa22994aba671dbf7b5f89b53c2ee02f53c0442a81265786a6d52d08512f.json +0 -0
  52. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-be60554eca98a5899efc6b49785cecd6444a6d39afed9e4a884ce2dbf162012c.json +0 -0
  53. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-bf49702b506c9a1650ece1f8e8d9f14834a902f8caefafe30ded55e2790f2188.json +0 -0
  54. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-bfcd21ed704cd305db5c17fcdec7d92aa4ac501913c9c9514d8ff92928c0c7e7.json +0 -0
  55. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-c3ab694650f49a75b146fb877a92e48c4f20f0d99f70f8ec859fbb763b01a1e5.json +0 -0
  56. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-c55542bb9fae544d87fae6f30e0fe8a9088d12075f4442ab4fe2fcd05e472234.json +0 -0
  57. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-cb29a6556d35ac630ee0aa885dd7341cf9573bd3efd216ff8a887b87686b03db.json +0 -0
  58. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-d0a1f341a89f5f14696b10baa72db9d95551c2b7e5fc67308fd52dc03dd98a92.json +0 -0
  59. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-d2ad0a0ca2649c9e4873cfcc1fc66d2d07cc45d0f65c560b06d7b5f592f4fa8a.json +0 -0
  60. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-d6cfe78eb635ba0b89ca4021a4dc8182d18ab5b197f30149cd28488eba4c1df5.json +0 -0
  61. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-d729b56dea00e49dcdba8cf0001e2811da27351eabe98212db3b589f18fc6f32.json +0 -0
  62. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-d9658bfd4e7170b41d03f2ddf2446d0bf54171c0d39d53bf20af2b8437f2ec48.json +0 -0
  63. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-dbba7b3d3289425bae711aedbf73fbc3699f857f86f84d95c3b556d05c5658b0.json +0 -0
  64. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-dcb96b649d6d63a58efd5d445453a4f3d7869a56ff714b69bedf3d616a0473ca.json +0 -0
  65. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-ebd876fbf5362a5900e75bc05f2f11c73c406ef7da4e95097fc6a1c3d1b8bc54.json +0 -0
  66. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-eef5cc6bce1cc14eba8f3e68971724ef181e88cffcedd74673615f2026b89a62.json +0 -0
  67. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/.sqlx/query-ef56d5fefc5774040d1ee397beadb475f6af02768c22f0e583c74062e2e821ce.json +0 -0
  68. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/Cargo.lock +0 -0
  69. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/Cargo.toml +0 -0
  70. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/README.md +0 -0
  71. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/migrations/20241007163501_initial.sql +0 -0
  72. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/migrations/20241211120039_merge_job_priority.sql +0 -0
  73. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/migrations/20241211121159_basic_indexes.sql +0 -0
  74. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/migrations/20241212151105_check_segment_records.sql +0 -0
  75. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/migrations/20250110145554_in_flight_messages.sql +0 -0
  76. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_binding/Cargo.toml +0 -0
  77. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_binding/src/lib.rs +0 -0
  78. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/Cargo.toml +0 -0
  79. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/src/fuzzy_query.rs +0 -0
  80. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/src/lib.rs +0 -0
  81. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/src/query_io.rs +0 -0
  82. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/src/query_parser/stop_words.rs +0 -0
  83. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/src/reader.rs +0 -0
  84. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/src/request_types.rs +0 -0
  85. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/src/resource_indexer.rs +0 -0
  86. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/src/schema.rs +0 -0
  87. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/src/search_query.rs +0 -0
  88. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/src/search_response.rs +0 -0
  89. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/src/set_query.rs +0 -0
  90. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/README.md +0 -0
  91. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/ar.json +0 -0
  92. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/az.json +0 -0
  93. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/bn.json +0 -0
  94. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/ca.json +0 -0
  95. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/ch.json +0 -0
  96. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/da.json +0 -0
  97. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/de.json +0 -0
  98. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/el.json +0 -0
  99. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/en.json +0 -0
  100. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/es.json +0 -0
  101. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/eu.json +0 -0
  102. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/extract.py +0 -0
  103. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/fi.json +0 -0
  104. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/fr.json +0 -0
  105. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/he.json +0 -0
  106. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/hu.json +0 -0
  107. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/id.json +0 -0
  108. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/it.json +0 -0
  109. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/kk.json +0 -0
  110. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/ne.json +0 -0
  111. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/nl.json +0 -0
  112. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/no.json +0 -0
  113. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/pt.json +0 -0
  114. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/ro.json +0 -0
  115. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/ru.json +0 -0
  116. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/sl.json +0 -0
  117. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/sv.json +0 -0
  118. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/tg.json +0 -0
  119. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/stop_words/tr.json +0 -0
  120. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/tests/common/mod.rs +0 -0
  121. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_paragraph/tests/reader.rs +0 -0
  122. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_protos/Cargo.toml +0 -0
  123. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_protos/build.py +0 -0
  124. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_protos/build.rs +0 -0
  125. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_protos/nidx.proto +0 -0
  126. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_protos/nodereader.proto +0 -0
  127. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_protos/noderesources.proto +0 -0
  128. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_protos/nodewriter.proto +0 -0
  129. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_protos/src/lib.rs +0 -0
  130. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_relation/Cargo.toml +0 -0
  131. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_relation/src/graph_collector.rs +0 -0
  132. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_relation/src/graph_query_parser.rs +0 -0
  133. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_relation/src/io_maps.rs +0 -0
  134. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_relation/src/lib.rs +0 -0
  135. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_relation/src/reader.rs +0 -0
  136. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_relation/src/resource_indexer.rs +0 -0
  137. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_relation/src/schema.rs +0 -0
  138. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_relation/src/top_unique_n.rs +0 -0
  139. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_relation/tests/common/mod.rs +0 -0
  140. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_relation/tests/test_graph_query_parser_search.rs +0 -0
  141. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_relation/tests/test_graph_search.rs +0 -0
  142. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_relation/tests/test_writer.rs +0 -0
  143. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_tantivy/Cargo.toml +0 -0
  144. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_tantivy/src/index_reader.rs +0 -0
  145. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_tantivy/src/lib.rs +0 -0
  146. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_tantivy/src/utils.rs +0 -0
  147. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_tests/Cargo.toml +0 -0
  148. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_tests/src/graph.rs +0 -0
  149. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_tests/src/lib.rs +0 -0
  150. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_text/Cargo.toml +0 -0
  151. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_text/src/lib.rs +0 -0
  152. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_text/src/prefilter.rs +0 -0
  153. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_text/src/query_io.rs +0 -0
  154. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_text/src/reader.rs +0 -0
  155. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_text/src/request_types.rs +0 -0
  156. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_text/src/resource_indexer.rs +0 -0
  157. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_text/src/schema.rs +0 -0
  158. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_text/src/search_query.rs +0 -0
  159. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_text/tests/common/mod.rs +0 -0
  160. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_text/tests/test_deletions.rs +0 -0
  161. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_text/tests/test_flow.rs +0 -0
  162. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_text/tests/test_search.rs +0 -0
  163. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_text/tests/test_streaming.rs +0 -0
  164. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_types/Cargo.toml +0 -0
  165. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_types/src/lib.rs +0 -0
  166. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_types/src/prefilter.rs +0 -0
  167. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_types/src/query_language.rs +0 -0
  168. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/Cargo.toml +0 -0
  169. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/config.rs +0 -0
  170. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/data_store/v1/node.rs +0 -0
  171. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/data_store/v1/store.rs +0 -0
  172. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/data_store/v1/trie.rs +0 -0
  173. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/data_store/v1/trie_ram.rs +0 -0
  174. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/data_store/v1.rs +0 -0
  175. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/data_store/v2/paragraph_store.rs +0 -0
  176. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/data_store/v2/vector_store.rs +0 -0
  177. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/data_store/v2.rs +0 -0
  178. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/data_store.rs +0 -0
  179. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/data_types.rs +0 -0
  180. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/formula.rs +0 -0
  181. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/hnsw/disk_hnsw.rs +0 -0
  182. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/hnsw/ops_hnsw.rs +0 -0
  183. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/hnsw/params.rs +0 -0
  184. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/hnsw/ram_hnsw.rs +0 -0
  185. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/hnsw.rs +0 -0
  186. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/indexer.rs +0 -0
  187. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/inverted_index/fst_index.rs +0 -0
  188. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/inverted_index/map.rs +0 -0
  189. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/inverted_index.rs +0 -0
  190. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/lib.rs +0 -0
  191. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/multivector.rs +0 -0
  192. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/query_io.rs +0 -0
  193. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/request_types.rs +0 -0
  194. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/searcher.rs +0 -0
  195. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/segment/tests.rs +0 -0
  196. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/segment.rs +0 -0
  197. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/utils.rs +0 -0
  198. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/vector_types/dense_f32.rs +0 -0
  199. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/src/vector_types/mod.rs +0 -0
  200. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/tests/common/mod.rs +0 -0
  201. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/tests/test_basic_search.rs +0 -0
  202. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/tests/test_hidden.rs +0 -0
  203. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/nidx_vector/tests/test_maxsim.rs +0 -0
  204. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/api/grpc.rs +0 -0
  205. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/api/shards.rs +0 -0
  206. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/api.rs +0 -0
  207. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/control.rs +0 -0
  208. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/errors.rs +0 -0
  209. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/grpc_server.rs +0 -0
  210. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/import_export.rs +0 -0
  211. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/indexer.rs +0 -0
  212. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/lib.rs +0 -0
  213. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/main.rs +0 -0
  214. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/metadata/deletion.rs +0 -0
  215. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/metadata/index.rs +0 -0
  216. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/metadata/index_request.rs +0 -0
  217. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/metadata/merge_job.rs +0 -0
  218. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/metadata/segment.rs +0 -0
  219. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/metadata/shard.rs +0 -0
  220. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/metadata.rs +0 -0
  221. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/metrics.rs +0 -0
  222. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/scheduler/audit_task.rs +0 -0
  223. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/scheduler/log_merge.rs +0 -0
  224. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/scheduler/merge_task.rs +0 -0
  225. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/scheduler/metrics_task.rs +0 -0
  226. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/scheduler/purge_tasks.rs +0 -0
  227. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/scheduler/vector_merge.rs +0 -0
  228. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/scheduler.rs +0 -0
  229. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/searcher/grpc.rs +0 -0
  230. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/searcher/index_cache.rs +0 -0
  231. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/searcher/query_language.rs +0 -0
  232. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/searcher/query_planner.rs +0 -0
  233. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/searcher/shard_search.rs +0 -0
  234. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/searcher/shard_selector.rs +0 -0
  235. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/searcher/shard_suggest.rs +0 -0
  236. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/searcher/streams.rs +0 -0
  237. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/searcher/sync.rs +0 -0
  238. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/searcher.rs +0 -0
  239. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/segment_store.rs +0 -0
  240. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/settings.rs +0 -0
  241. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/telemetry/duration_layer.rs +0 -0
  242. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/telemetry/log_format.rs +0 -0
  243. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/telemetry/middleware.rs +0 -0
  244. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/telemetry.rs +0 -0
  245. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/tool.rs +0 -0
  246. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/utilization_tracker.rs +0 -0
  247. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/src/worker.rs +0 -0
  248. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/tests/common/mod.rs +0 -0
  249. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/tests/common/services.rs +0 -0
  250. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/tests/test_date_range_search.rs +0 -0
  251. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/tests/test_search_filtering.rs +0 -0
  252. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/tests/test_search_relations.rs +0 -0
  253. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/tests/test_search_sorting.rs +0 -0
  254. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/tests/test_searcher_cluster.rs +0 -0
  255. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/tests/test_security_search.rs +0 -0
  256. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/tests/test_shards.rs +0 -0
  257. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/tests/test_shards_api.rs +0 -0
  258. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/tests/test_suggest.rs +0 -0
  259. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/tests/test_synced_searcher.rs +0 -0
  260. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/tests/test_vector_normalization.rs +0 -0
  261. {nidx_binding-6.7.2.post490 → nidx_binding-6.7.2.post495}/tests/test_vectorsets.rs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nidx_binding
3
- Version: 6.7.2.post490
3
+ Version: 6.7.2.post495
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  Classifier: Programming Language :: Python :: Implementation :: PyPy
@@ -30,6 +30,7 @@ use crate::fuzzy_query::FuzzyTermQuery;
30
30
  use crate::schema::ParagraphSchema;
31
31
  use crate::search_query::SharedTermC;
32
32
 
33
+ use super::FallbackQuery;
33
34
  use super::keyword_parser;
34
35
  use super::tokenizer::Token;
35
36
 
@@ -53,7 +54,13 @@ pub const FUZZY_DISTANCE: u8 = 1;
53
54
  /// literals will be searched as fuzzy. The last literal can be searched as a
54
55
  /// fuzzy prefix if a suggest-like feature is desired.
55
56
  ///
56
- pub fn parse_fuzzy_query(query: &[Token], term_collector: SharedTermC, last_literal_as_prefix: bool) -> Box<dyn Query> {
57
+ pub fn parse_fuzzy_query(
58
+ query: &[Token],
59
+ term_collector: SharedTermC,
60
+ last_literal_as_prefix: bool,
61
+ ) -> Result<Box<dyn Query>, FallbackQuery> {
62
+ let mut errors = vec![];
63
+
57
64
  let last_literal_index = if last_literal_as_prefix {
58
65
  query.iter().rposition(|token| matches!(token, Token::Literal(_)))
59
66
  } else {
@@ -92,8 +99,14 @@ pub fn parse_fuzzy_query(query: &[Token], term_collector: SharedTermC, last_lite
92
99
  subqueries.push((Occur::Should, q));
93
100
  }
94
101
  Token::Quoted(quoted) => {
95
- let q = keyword_parser::parse_quoted(&schema, quoted);
96
- subqueries.push((Occur::Should, q));
102
+ match keyword_parser::parse_quoted(&schema, quoted) {
103
+ Ok(q) => {
104
+ subqueries.push((Occur::Should, q));
105
+ }
106
+ Err(error) => {
107
+ errors.push(error);
108
+ }
109
+ };
97
110
  }
98
111
  Token::Excluded(excluded) => {
99
112
  let q = keyword_parser::parse_excluded(&schema, excluded);
@@ -102,13 +115,15 @@ pub fn parse_fuzzy_query(query: &[Token], term_collector: SharedTermC, last_lite
102
115
  }
103
116
  }
104
117
 
105
- if subqueries.is_empty() {
118
+ let q = if subqueries.is_empty() {
106
119
  Box::new(AllQuery)
107
120
  } else if subqueries.len() == 1 {
108
121
  subqueries.pop().unwrap().1
109
122
  } else {
110
123
  Box::new(BooleanQuery::new(subqueries))
111
- }
124
+ };
125
+
126
+ if errors.is_empty() { Ok(q) } else { Err((q, errors)) }
112
127
  }
113
128
 
114
129
  #[cfg(test)]
@@ -125,7 +140,7 @@ mod tests {
125
140
  let literal = "ab";
126
141
  assert!(literal.len() < MIN_FUZZY_LEN);
127
142
  let query = [Token::Literal(literal.into())];
128
- let fuzzy = parse_fuzzy_query(&query, term_collector.clone(), false);
143
+ let fuzzy = parse_fuzzy_query(&query, term_collector.clone(), false).unwrap();
129
144
  assert!(fuzzy.is::<TermQuery>());
130
145
  let q = fuzzy.downcast::<TermQuery>().unwrap();
131
146
  assert_eq!(q.term().value().as_str(), Some(literal));
@@ -138,7 +153,7 @@ mod tests {
138
153
  let literal = "abcd";
139
154
  assert!(literal.len() >= MIN_FUZZY_LEN);
140
155
  let query = [Token::Literal(literal.into())];
141
- let fuzzy = parse_fuzzy_query(&query, term_collector.clone(), false);
156
+ let fuzzy = parse_fuzzy_query(&query, term_collector.clone(), false).unwrap();
142
157
  assert!(fuzzy.is::<FuzzyTermQuery>());
143
158
  assert!(!fuzzy.downcast::<FuzzyTermQuery>().unwrap().is_prefix());
144
159
  }
@@ -154,18 +169,18 @@ mod tests {
154
169
  assert!(literal.len() >= MIN_FUZZY_PREFIX_LEN);
155
170
  let query = [Token::Literal(literal.into())];
156
171
 
157
- let fuzzy = parse_fuzzy_query(&query, term_collector.clone(), false);
172
+ let fuzzy = parse_fuzzy_query(&query, term_collector.clone(), false).unwrap();
158
173
  assert!(fuzzy.is::<FuzzyTermQuery>());
159
174
  assert!(!fuzzy.downcast::<FuzzyTermQuery>().unwrap().is_prefix());
160
175
 
161
- let fuzzy = parse_fuzzy_query(&query, term_collector.clone(), true);
176
+ let fuzzy = parse_fuzzy_query(&query, term_collector.clone(), true).unwrap();
162
177
  assert!(fuzzy.is::<FuzzyTermQuery>());
163
178
  assert!(fuzzy.downcast::<FuzzyTermQuery>().unwrap().is_prefix());
164
179
 
165
180
  // only the last term is fuzzy prefix
166
181
 
167
182
  let query = [Token::Literal(literal.into()), Token::Literal(literal.into())];
168
- let fuzzy = parse_fuzzy_query(&query, term_collector.clone(), true);
183
+ let fuzzy = parse_fuzzy_query(&query, term_collector.clone(), true).unwrap();
169
184
  assert!(fuzzy.is::<BooleanQuery>());
170
185
  let q = fuzzy.downcast::<BooleanQuery>().unwrap();
171
186
  let clauses = q.clauses();
@@ -181,11 +196,11 @@ mod tests {
181
196
  assert!(literal.len() < MIN_FUZZY_PREFIX_LEN);
182
197
  let query = [Token::Literal(literal.into())];
183
198
 
184
- let fuzzy = parse_fuzzy_query(&query, term_collector.clone(), false);
199
+ let fuzzy = parse_fuzzy_query(&query, term_collector.clone(), false).unwrap();
185
200
  assert!(fuzzy.is::<FuzzyTermQuery>());
186
201
  assert!(!fuzzy.downcast::<FuzzyTermQuery>().unwrap().is_prefix());
187
202
 
188
- let fuzzy = parse_fuzzy_query(&query, term_collector.clone(), true);
203
+ let fuzzy = parse_fuzzy_query(&query, term_collector.clone(), true).unwrap();
189
204
  assert!(fuzzy.is::<FuzzyTermQuery>());
190
205
  assert!(!fuzzy.downcast::<FuzzyTermQuery>().unwrap().is_prefix());
191
206
  }
@@ -18,18 +18,22 @@
18
18
  // along with this program. If not, see <http://www.gnu.org/licenses/>.
19
19
  //
20
20
  use tantivy::Term;
21
- use tantivy::query::{AllQuery, BooleanQuery, EmptyQuery, Occur, PhraseQuery, Query, TermQuery};
21
+ use tantivy::query::{AllQuery, BooleanQuery, Occur, PhraseQuery, Query, TermQuery};
22
22
  use tantivy::schema::IndexRecordOption;
23
- use tracing::error;
24
23
 
25
24
  use crate::ParagraphSchema;
26
25
 
26
+ use super::FallbackQuery;
27
27
  use super::tokenizer::Token;
28
28
 
29
29
  /// Convert a tokenized query into a tantivy keyword query
30
30
  ///
31
31
  /// Empty queries will match everything.
32
- pub fn parse_keyword_query<'a>(query: &'a [Token<'a>], schema: &ParagraphSchema) -> Box<dyn Query> {
32
+ pub fn parse_keyword_query<'a>(
33
+ query: &'a [Token<'a>],
34
+ schema: &ParagraphSchema,
35
+ ) -> Result<Box<dyn Query>, FallbackQuery> {
36
+ let mut errors = vec![];
33
37
  let mut subqueries = vec![];
34
38
  for item in query {
35
39
  match item {
@@ -37,10 +41,10 @@ pub fn parse_keyword_query<'a>(query: &'a [Token<'a>], schema: &ParagraphSchema)
37
41
  let q = parse_literal(schema, literal);
38
42
  subqueries.push((Occur::Should, q));
39
43
  }
40
- Token::Quoted(quoted) => {
41
- let q = parse_quoted(schema, quoted);
42
- subqueries.push((Occur::Should, q));
43
- }
44
+ Token::Quoted(quoted) => match parse_quoted(schema, quoted) {
45
+ Ok(q) => subqueries.push((Occur::Should, q)),
46
+ Err(error) => errors.push(error),
47
+ },
44
48
  Token::Excluded(excluded) => {
45
49
  let q = parse_excluded(schema, excluded);
46
50
  subqueries.push((Occur::Should, q));
@@ -48,13 +52,15 @@ pub fn parse_keyword_query<'a>(query: &'a [Token<'a>], schema: &ParagraphSchema)
48
52
  }
49
53
  }
50
54
 
51
- if subqueries.is_empty() {
55
+ let q = if subqueries.is_empty() {
52
56
  Box::new(AllQuery)
53
57
  } else if subqueries.len() == 1 {
54
58
  subqueries.pop().unwrap().1
55
59
  } else {
56
60
  Box::new(BooleanQuery::new(subqueries))
57
- }
61
+ };
62
+
63
+ if errors.is_empty() { Ok(q) } else { Err((q, errors)) }
58
64
  }
59
65
 
60
66
  #[inline]
@@ -65,7 +71,7 @@ pub fn parse_literal(schema: &ParagraphSchema, literal: &str) -> Box<dyn Query>
65
71
  ))
66
72
  }
67
73
 
68
- pub fn parse_quoted(schema: &ParagraphSchema, quoted: &str) -> Box<dyn Query> {
74
+ pub fn parse_quoted(schema: &ParagraphSchema, quoted: &str) -> Result<Box<dyn Query>, String> {
69
75
  let mut terms: Vec<Term> = quoted
70
76
  .split_whitespace()
71
77
  .map(|word| Term::from_field_text(schema.text, word))
@@ -75,18 +81,18 @@ pub fn parse_quoted(schema: &ParagraphSchema, quoted: &str) -> Box<dyn Query> {
75
81
  if terms.len() == 1 {
76
82
  // phrase queries must have more than one term, so we use a term query
77
83
  let term = terms.remove(0); // safe because terms.len() == 1
78
- Box::new(TermQuery::new(term, IndexRecordOption::Basic))
84
+ Ok(Box::new(TermQuery::new(term, IndexRecordOption::Basic)))
79
85
  } else if terms.len() > 1 {
80
- Box::new(PhraseQuery::new(terms))
86
+ Ok(Box::new(PhraseQuery::new(terms)))
81
87
  } else {
88
+ #[cfg(not(test))] // we don't want an assert on tests, we want the error
82
89
  debug_assert!(
83
90
  false,
84
91
  "Quoted content should have been validated to not only contain whitespaces"
85
92
  );
86
- // we return a fallback to protect us from tokenizer errors, but this branch should never
93
+ // we return an error to protect us from tokenizer errors, but this branch should never
87
94
  // happen
88
- error!("Keyword tokenizer build a query with a only whitespaces Quoted token!");
89
- Box::new(EmptyQuery)
95
+ Err("Keyword tokenizer built a query with a only whitespaces Quoted token!".to_string())
90
96
  }
91
97
  }
92
98
 
@@ -111,7 +117,7 @@ mod tests {
111
117
  #[test]
112
118
  fn test_empty_query_is_all_query() {
113
119
  let schema = ParagraphSchema::new();
114
- let query = parse_keyword_query(&[], &schema);
120
+ let query = parse_keyword_query(&[], &schema).unwrap();
115
121
  assert!(query.is::<AllQuery>());
116
122
  }
117
123
 
@@ -119,7 +125,7 @@ mod tests {
119
125
  fn test_one_clause_simplification() {
120
126
  let schema = ParagraphSchema::new();
121
127
 
122
- let query = parse_keyword_query(&[Token::Literal("nucliadb".into())], &schema);
128
+ let query = parse_keyword_query(&[Token::Literal("nucliadb".into())], &schema).unwrap();
123
129
  let term = extract_term_from(&query);
124
130
  assert_eq!(*term, Term::from_field_text(schema.text, "nucliadb"));
125
131
  }
@@ -137,7 +143,7 @@ mod tests {
137
143
  Token::Literal("with".into()),
138
144
  Token::Quoted("superpowers".into()),
139
145
  ];
140
- let r = downcast_boolean_query(parse_keyword_query(&query, &schema));
146
+ let r = downcast_boolean_query(parse_keyword_query(&query, &schema).unwrap());
141
147
  let clauses = r.clauses();
142
148
  assert_eq!(clauses.len(), 6);
143
149
 
@@ -188,6 +194,19 @@ mod tests {
188
194
  assert_eq!(*term, Term::from_field_text(schema.text, "superpowers"));
189
195
  }
190
196
 
197
+ #[test]
198
+ /// The tokenizer should not allow an empty (whitespaces) Quoted token
199
+ fn test_parse_quoted_error() {
200
+ let schema = ParagraphSchema::new();
201
+
202
+ let quoted = " ";
203
+ let r = parse_quoted(&schema, quoted);
204
+ assert!(r.is_err());
205
+
206
+ let r = parse_keyword_query(&[Token::Quoted(" ".into())], &schema);
207
+ assert!(r.is_err());
208
+ }
209
+
191
210
  fn downcast_boolean_query(q: Box<dyn Query>) -> Box<BooleanQuery> {
192
211
  let q = q.downcast::<BooleanQuery>();
193
212
  assert!(q.is_ok(), "BooleanQuery expected");
@@ -165,7 +165,14 @@ fn tantivy_retokenize(tokens: Vec<Token>) -> Vec<Token> {
165
165
  let token = stream.token();
166
166
  tokens.push(token.text.clone())
167
167
  }
168
- vec![Token::Quoted(Cow::Owned(tokens.into_iter().join(" ")))]
168
+ let text = tokens.into_iter().join(" ");
169
+ // as with the nom tokenizer, empty quotes make no sense so we
170
+ // get rid of them
171
+ if !text.is_empty() {
172
+ vec![Token::Quoted(Cow::Owned(text))]
173
+ } else {
174
+ vec![]
175
+ }
169
176
  }
170
177
  Token::Excluded(Cow::Borrowed(excluded)) => {
171
178
  let mut stream = tantivy_tokenizer.token_stream(excluded);
@@ -331,6 +338,12 @@ mod tests {
331
338
  ];
332
339
  let tokens = tokenize_query_infallible(query);
333
340
  assert_eq!(tokens, expected);
341
+
342
+ // quoted strings with special characters that tantivy tokenizer removes are removed
343
+ let query = r#"tantivy deletes "...""#;
344
+ let expected = vec![Literal("tantivy".into()), Literal("deletes".into())];
345
+ let tokens = tokenize_query_infallible(query);
346
+ assert_eq!(tokens, expected);
334
347
  }
335
348
 
336
349
  #[test]
@@ -24,6 +24,7 @@ mod tokenizer;
24
24
 
25
25
  use tantivy::query::Query;
26
26
  use tokenizer::{Token, tokenize_query_infallible};
27
+ use tracing::error;
27
28
 
28
29
  use crate::{
29
30
  schema::ParagraphSchema,
@@ -33,6 +34,10 @@ use crate::{
33
34
  pub use fuzzy_parser::FUZZY_DISTANCE;
34
35
  use stop_words::remove_stop_words;
35
36
 
37
+ /// Alias to make clippy happier. A FallbackQuery is no more than a query with a list of errors
38
+ /// found while parsing
39
+ pub type FallbackQuery = (Box<dyn Query>, Vec<String>);
40
+
36
41
  /// `Parser` is the nidx keyword grammar query parser
37
42
  ///
38
43
  /// It allows some behavior configuration and query parsing capabilities. Query
@@ -82,12 +87,29 @@ impl<'a> Parser<'a> {
82
87
  }
83
88
  let shared_term_collector = SharedTermC::from(term_collector);
84
89
 
85
- let keyword = keyword_parser::parse_keyword_query(&tokenized, self.schema);
86
- let fuzzy = fuzzy_parser::parse_fuzzy_query(
90
+ let keyword = match keyword_parser::parse_keyword_query(&tokenized, self.schema) {
91
+ Ok(q) => q,
92
+ Err((q, errors)) => {
93
+ for err in errors {
94
+ error!(?query, parser = "keyword", err);
95
+ }
96
+ q
97
+ }
98
+ };
99
+
100
+ let fuzzy = match fuzzy_parser::parse_fuzzy_query(
87
101
  &tokenized,
88
102
  shared_term_collector.clone(),
89
103
  self.last_fuzzy_term_as_prefix,
90
- );
104
+ ) {
105
+ Ok(q) => q,
106
+ Err((q, errors)) => {
107
+ for err in errors {
108
+ error!(?query, parser = "fuzzy", err);
109
+ }
110
+ q
111
+ }
112
+ };
91
113
 
92
114
  ParsedQuery {
93
115
  keyword,
@@ -115,6 +137,16 @@ mod tests {
115
137
  // keeps last term even if is a stop word
116
138
  "nuclia database the",
117
139
  ),
140
+ (
141
+ "nuclia \"is\" a database for the",
142
+ // keeps last term even if is a stop word
143
+ "nuclia \"is\" database the",
144
+ ),
145
+ (
146
+ "nuclia \"...\" a database for the",
147
+ // keeps last term even if is a stop word
148
+ "nuclia database the",
149
+ ),
118
150
  ("is a for and", "and"),
119
151
  ("what does stop is?", "stop is"),
120
152
  ("", ""),
@@ -10,7 +10,7 @@ build-backend = "pdm.backend"
10
10
 
11
11
  [project]
12
12
  name = "nidx_protos"
13
- version = "6.7.2.post490"
13
+ version = "6.7.2.post495"
14
14
  license = "AGPL-3.0-or-later"
15
15
  description = "Protobuf definitions for nucliadb/nidx"
16
16
  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.7.2.post490"
16
+ version = "6.7.2.post495"
17
17
 
18
18
  [project.urls]
19
19
  Homepage = "https://nuclia.com"