nidx-binding 6.3.1.post72__tar.gz → 6.3.1.post82__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 (241) hide show
  1. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/PKG-INFO +1 -1
  2. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/src/query_io.rs +3 -3
  3. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/src/request_types.rs +2 -2
  4. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/src/search_query.rs +1 -1
  5. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_protos/pyproject.toml +1 -1
  6. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_relation/src/graph_query_parser.rs +104 -48
  7. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_relation/src/reader.rs +21 -31
  8. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_types/src/query_language.rs +6 -6
  9. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/data_point_provider/reader.rs +2 -2
  10. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/query_io.rs +3 -3
  11. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/request_types.rs +2 -2
  12. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/pyproject.toml +1 -1
  13. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/searcher/query_language.rs +1 -1
  14. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/searcher/query_planner.rs +3 -3
  15. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/tests/test_search_relations.rs +154 -189
  16. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-0cfce9b29547f8f5bafa6e440f86103be7b8c4ad2fd92db9ac223f4efbe23d10.json +0 -0
  17. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-1a561eed00f3dbe868bf5030059793300209179dc8fb73e4b57a54b5e81262fe.json +0 -0
  18. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-1d3fca2682e25a01143da92285297f134a6a105a96f64d87e0db3abb219855e4.json +0 -0
  19. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-249b3b57c27a71baa823f1fe0f0bba9c9af36f61c28f731e58beea60ec48e687.json +0 -0
  20. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-24cb6b683daa42d7125f862e25943ab4be7bf275cd8739f8da4859d701795e1a.json +0 -0
  21. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-263c8fce6db5b03bbd012fafdba6943cbee6ed7eb8976cdef4f5b01dde7ca6fd.json +0 -0
  22. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-2a5d92fb1638df830a4477a7cdf24e6db6b43034b7bbe74fdfb63e8afe2c4071.json +0 -0
  23. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-2b065a363f58caed60e3706603c1260dbf5a4c795604a5b68edda22eb07fec1b.json +0 -0
  24. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-3fc3cb39934683de8cd475ce1368c8373453eb1e01f81587d66b9d14b109ce6e.json +0 -0
  25. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-48f33b77b7c1633467b0b2efcaa1d3c207e7757e4f1d83b40d15e6ca365f7771.json +0 -0
  26. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-4ae09f2c08e2f324bee01bb8487a8f37678a1c5e9d327339235c50d4921a8949.json +0 -0
  27. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-4d7a76fa413c9ef0ce2a47ac7bb7e01d3e6a2aabded9487d21010a53efee8852.json +0 -0
  28. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-4fcbdd6657c7dc9b60b3a563dd41711b3dbcf72ce063427b7a01f8cddf34c244.json +0 -0
  29. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-577109ac00ccfbd38ecaccab94116f2f46a4caf5612afa372cded197123c1e08.json +0 -0
  30. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-5db25f97d8578d6d78f2f6bd4b72cc82a9b1b82805c6422d967ac63b20d99db4.json +0 -0
  31. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-5ec3233a3a23e926055056d46bdde17836a633066dbb5f349502648cd3ea9a60.json +0 -0
  32. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-66edb6ea424d8681927dcddb6bac5f1239175f4775d1f40417ba15054b0c6f19.json +0 -0
  33. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-6f9c6d201c1b5712efb68c363bffd3e0169c11f2a8f925e8cd4e8808599ff7b4.json +0 -0
  34. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-733c3ebacc86f444bf5e2dd79ade660c291e88a00fc09b722f6e2e191545874c.json +0 -0
  35. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-77a245aed9f6f8b9fc643efbd4b1e2e8e99bbba085e3e75a4f29321cd7b2a25c.json +0 -0
  36. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-7a3bf27c330c468a596e8a297cf7d8b192e31e67ecc5177c1267f579e8e247c7.json +0 -0
  37. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-7a7e59e47b30b12237511fd3d7da2d17b0471ad2b006af48d6a6f587c779692b.json +0 -0
  38. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-7dcbb33312cc9f11ae3a6d73b1ace017a9f19a8bf8f10304fc57977c8efeadff.json +0 -0
  39. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-7efa7c0d747afc4b6aed0586ff846c27839c3213ff7ee9f30c89b0d0f17e60e3.json +0 -0
  40. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-8493140d788604d498a4e48da4158708572ccc9d60185290a00d549cc84533db.json +0 -0
  41. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-8493bb0059b013eaca42fd10cd7d04f0d06a8acaed379eff0d23f3229edde9ee.json +0 -0
  42. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-87996b3d6c7a2195438d7038015b06949102bce8c7b8cd8db1f83aaf23cbe489.json +0 -0
  43. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-8f096d8171b89f9615d18f95d696dc9e4fb3674e103161a713cdc806f7a68506.json +0 -0
  44. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-917732a56ee04bf3a6e127319dda8225210869c82f9828d878162394dba4e078.json +0 -0
  45. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-95fe4ef93ee90733db1b67ed7987f80b5aac792f1590b979c68b418d1599eb98.json +0 -0
  46. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-9b67658569b343d8b4b61ae0a7dc721f367f2ba33c7b69b9e68bfd5c9bff5206.json +0 -0
  47. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-9c8062ea55d070afef68309e58fa987eb37fda44e1efbf68c8ba2af7846cc968.json +0 -0
  48. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-a06e1d9f6f95e4c4c2b98310ebddcc9d963cc033582bf2e945e8bf3a301b4247.json +0 -0
  49. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-a55265c9b07bd1399961a6f1e757201fd0eebe868ddaf96437111113d80fce92.json +0 -0
  50. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-a891a37be5c2d7cce775c2dd33726b0318fd3839beab222a1b22bc6174604207.json +0 -0
  51. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-a945191bb4b3e37d6823ed3ad499339d007d69983105de8567777d9daf517b28.json +0 -0
  52. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-abe9f7832f2bd799ac44008da031e8d8ab52d4f5fbfc2a7e3974e8873bae55b2.json +0 -0
  53. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-aca588cca57a85e4d7fcc40c23cd87e57d53d11ca550d78e7e3d5e39e524fcd3.json +0 -0
  54. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-b02f8aafc00a7724510772ac41269e368c5bccf03ef7b4590e0ef6fd1a1bf64f.json +0 -0
  55. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-b742e17cabe2d64617e9aa64bafc782172f7a4f8023d1b54f952a0fb39f6b2b8.json +0 -0
  56. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-b94e349dbc0daec57f8f8f6e9e2dffb06100b1bb2b41d297c9f3b191da37a83d.json +0 -0
  57. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-bd9afa22994aba671dbf7b5f89b53c2ee02f53c0442a81265786a6d52d08512f.json +0 -0
  58. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-be60554eca98a5899efc6b49785cecd6444a6d39afed9e4a884ce2dbf162012c.json +0 -0
  59. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-bf49702b506c9a1650ece1f8e8d9f14834a902f8caefafe30ded55e2790f2188.json +0 -0
  60. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-bfb8ae2e860e451b0868a7b1b50a451d998b2105f9fdfd307b26a1775d145e9f.json +0 -0
  61. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-bfcd21ed704cd305db5c17fcdec7d92aa4ac501913c9c9514d8ff92928c0c7e7.json +0 -0
  62. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-c3ab694650f49a75b146fb877a92e48c4f20f0d99f70f8ec859fbb763b01a1e5.json +0 -0
  63. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-c55542bb9fae544d87fae6f30e0fe8a9088d12075f4442ab4fe2fcd05e472234.json +0 -0
  64. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-cb29a6556d35ac630ee0aa885dd7341cf9573bd3efd216ff8a887b87686b03db.json +0 -0
  65. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-d0a1f341a89f5f14696b10baa72db9d95551c2b7e5fc67308fd52dc03dd98a92.json +0 -0
  66. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-d2ad0a0ca2649c9e4873cfcc1fc66d2d07cc45d0f65c560b06d7b5f592f4fa8a.json +0 -0
  67. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-d6cfe78eb635ba0b89ca4021a4dc8182d18ab5b197f30149cd28488eba4c1df5.json +0 -0
  68. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-d729b56dea00e49dcdba8cf0001e2811da27351eabe98212db3b589f18fc6f32.json +0 -0
  69. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-d9658bfd4e7170b41d03f2ddf2446d0bf54171c0d39d53bf20af2b8437f2ec48.json +0 -0
  70. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-dbba7b3d3289425bae711aedbf73fbc3699f857f86f84d95c3b556d05c5658b0.json +0 -0
  71. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-dcb96b649d6d63a58efd5d445453a4f3d7869a56ff714b69bedf3d616a0473ca.json +0 -0
  72. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-ebd876fbf5362a5900e75bc05f2f11c73c406ef7da4e95097fc6a1c3d1b8bc54.json +0 -0
  73. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-eef5cc6bce1cc14eba8f3e68971724ef181e88cffcedd74673615f2026b89a62.json +0 -0
  74. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/.sqlx/query-ef56d5fefc5774040d1ee397beadb475f6af02768c22f0e583c74062e2e821ce.json +0 -0
  75. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/Cargo.lock +0 -0
  76. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/Cargo.toml +0 -0
  77. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/README.md +0 -0
  78. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/migrations/20241007163501_initial.sql +0 -0
  79. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/migrations/20241211120039_merge_job_priority.sql +0 -0
  80. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/migrations/20241211121159_basic_indexes.sql +0 -0
  81. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/migrations/20241212151105_check_segment_records.sql +0 -0
  82. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/migrations/20250110145554_in_flight_messages.sql +0 -0
  83. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_binding/Cargo.toml +0 -0
  84. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_binding/src/lib.rs +0 -0
  85. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/Cargo.toml +0 -0
  86. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/src/fuzzy_query.rs +0 -0
  87. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/src/lib.rs +0 -0
  88. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/src/reader.rs +0 -0
  89. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/src/resource_indexer.rs +0 -0
  90. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/src/schema.rs +0 -0
  91. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/src/search_response.rs +0 -0
  92. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/src/set_query.rs +0 -0
  93. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/src/stop_words.rs +0 -0
  94. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/README.md +0 -0
  95. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/ar.json +0 -0
  96. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/az.json +0 -0
  97. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/bn.json +0 -0
  98. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/ca.json +0 -0
  99. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/ch.json +0 -0
  100. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/da.json +0 -0
  101. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/de.json +0 -0
  102. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/el.json +0 -0
  103. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/en.json +0 -0
  104. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/es.json +0 -0
  105. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/eu.json +0 -0
  106. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/extract.py +0 -0
  107. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/fi.json +0 -0
  108. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/fr.json +0 -0
  109. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/he.json +0 -0
  110. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/hu.json +0 -0
  111. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/id.json +0 -0
  112. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/it.json +0 -0
  113. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/kk.json +0 -0
  114. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/ne.json +0 -0
  115. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/nl.json +0 -0
  116. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/no.json +0 -0
  117. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/pt.json +0 -0
  118. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/ro.json +0 -0
  119. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/ru.json +0 -0
  120. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/sl.json +0 -0
  121. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/sv.json +0 -0
  122. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/tg.json +0 -0
  123. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/stop_words/tr.json +0 -0
  124. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/tests/common/mod.rs +0 -0
  125. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_paragraph/tests/reader.rs +0 -0
  126. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_protos/Cargo.toml +0 -0
  127. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_protos/build.py +0 -0
  128. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_protos/build.rs +0 -0
  129. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_protos/src/lib.rs +0 -0
  130. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_protos/src/nidx.proto +0 -0
  131. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_relation/Cargo.toml +0 -0
  132. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_relation/src/io_maps.rs +0 -0
  133. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_relation/src/lib.rs +0 -0
  134. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_relation/src/resource_indexer.rs +0 -0
  135. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_relation/src/schema.rs +0 -0
  136. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_relation/tests/common/mod.rs +0 -0
  137. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_relation/tests/test_graph_search.rs +0 -0
  138. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_relation/tests/test_reader.rs +0 -0
  139. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_relation/tests/test_writer.rs +0 -0
  140. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_tantivy/Cargo.toml +0 -0
  141. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_tantivy/src/index_reader.rs +0 -0
  142. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_tantivy/src/lib.rs +0 -0
  143. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_tests/Cargo.toml +0 -0
  144. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_tests/src/graph.rs +0 -0
  145. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_tests/src/lib.rs +0 -0
  146. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_text/Cargo.toml +0 -0
  147. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_text/src/lib.rs +0 -0
  148. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_text/src/prefilter.rs +0 -0
  149. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_text/src/query_io.rs +0 -0
  150. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_text/src/reader.rs +0 -0
  151. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_text/src/request_types.rs +0 -0
  152. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_text/src/resource_indexer.rs +0 -0
  153. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_text/src/schema.rs +0 -0
  154. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_text/src/search_query.rs +0 -0
  155. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_text/tests/common/mod.rs +0 -0
  156. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_text/tests/test_flow.rs +0 -0
  157. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_text/tests/test_search.rs +0 -0
  158. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_text/tests/test_streaming.rs +0 -0
  159. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_types/Cargo.toml +0 -0
  160. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_types/src/lib.rs +0 -0
  161. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_types/src/prefilter.rs +0 -0
  162. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/Cargo.toml +0 -0
  163. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/config.rs +0 -0
  164. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/data_point/disk_hnsw.rs +0 -0
  165. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/data_point/mod.rs +0 -0
  166. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/data_point/node.rs +0 -0
  167. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/data_point/ops_hnsw.rs +0 -0
  168. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/data_point/params.rs +0 -0
  169. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/data_point/ram_hnsw.rs +0 -0
  170. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/data_point/tests.rs +0 -0
  171. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/data_point_provider/mod.rs +0 -0
  172. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/data_types/data_store.rs +0 -0
  173. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/data_types/mod.rs +0 -0
  174. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/data_types/trie.rs +0 -0
  175. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/data_types/trie_ram.rs +0 -0
  176. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/formula/mod.rs +0 -0
  177. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/indexer.rs +0 -0
  178. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/inverted_index/fst_index.rs +0 -0
  179. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/inverted_index/map.rs +0 -0
  180. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/inverted_index.rs +0 -0
  181. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/lib.rs +0 -0
  182. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/utils.rs +0 -0
  183. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/vector_types/dense_f32.rs +0 -0
  184. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/src/vector_types/mod.rs +0 -0
  185. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/tests/common/mod.rs +0 -0
  186. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/tests/test_basic_search.rs +0 -0
  187. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/nidx_vector/tests/test_hidden.rs +0 -0
  188. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/api/grpc.rs +0 -0
  189. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/api/shards.rs +0 -0
  190. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/api.rs +0 -0
  191. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/control.rs +0 -0
  192. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/errors.rs +0 -0
  193. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/grpc_server.rs +0 -0
  194. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/import_export.rs +0 -0
  195. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/indexer.rs +0 -0
  196. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/lib.rs +0 -0
  197. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/main.rs +0 -0
  198. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/metadata/deletion.rs +0 -0
  199. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/metadata/index.rs +0 -0
  200. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/metadata/index_request.rs +0 -0
  201. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/metadata/merge_job.rs +0 -0
  202. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/metadata/segment.rs +0 -0
  203. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/metadata/shard.rs +0 -0
  204. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/metadata.rs +0 -0
  205. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/metrics.rs +0 -0
  206. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/scheduler/audit_task.rs +0 -0
  207. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/scheduler/log_merge.rs +0 -0
  208. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/scheduler/merge_task.rs +0 -0
  209. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/scheduler/metrics_task.rs +0 -0
  210. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/scheduler/purge_tasks.rs +0 -0
  211. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/scheduler/vector_merge.rs +0 -0
  212. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/scheduler.rs +0 -0
  213. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/searcher/grpc.rs +0 -0
  214. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/searcher/index_cache.rs +0 -0
  215. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/searcher/shard_search.rs +0 -0
  216. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/searcher/shard_selector.rs +0 -0
  217. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/searcher/shard_suggest.rs +0 -0
  218. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/searcher/streams.rs +0 -0
  219. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/searcher/sync.rs +0 -0
  220. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/searcher.rs +0 -0
  221. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/segment_store.rs +0 -0
  222. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/settings.rs +0 -0
  223. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/telemetry/duration_layer.rs +0 -0
  224. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/telemetry/log_format.rs +0 -0
  225. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/telemetry/middleware.rs +0 -0
  226. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/telemetry.rs +0 -0
  227. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/tool.rs +0 -0
  228. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/src/worker.rs +0 -0
  229. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/tests/common/mod.rs +0 -0
  230. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/tests/common/services.rs +0 -0
  231. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/tests/test_date_range_search.rs +0 -0
  232. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/tests/test_search_filtering.rs +0 -0
  233. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/tests/test_search_sorting.rs +0 -0
  234. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/tests/test_searcher_cluster.rs +0 -0
  235. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/tests/test_security_search.rs +0 -0
  236. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/tests/test_shards.rs +0 -0
  237. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/tests/test_shards_api.rs +0 -0
  238. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/tests/test_suggest.rs +0 -0
  239. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/tests/test_synced_searcher.rs +0 -0
  240. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/tests/test_vector_normalization.rs +0 -0
  241. {nidx_binding-6.3.1.post72 → nidx_binding-6.3.1.post82}/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.post72
3
+ Version: 6.3.1.post82
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  Classifier: Programming Language :: Python :: Implementation :: PyPy
@@ -29,7 +29,7 @@ fn translate_literal(literal: &str, schema: &ParagraphSchema) -> Box<dyn Query>
29
29
  Box::new(TermQuery::new(term, IndexRecordOption::Basic))
30
30
  }
31
31
 
32
- fn translate_not(inner: &BooleanExpression, schema: &ParagraphSchema) -> Box<dyn Query> {
32
+ fn translate_not(inner: &BooleanExpression<String>, schema: &ParagraphSchema) -> Box<dyn Query> {
33
33
  let mut operands = Vec::with_capacity(2);
34
34
 
35
35
  // Check the following issue to see why the additional AllQuery is needed:
@@ -43,7 +43,7 @@ fn translate_not(inner: &BooleanExpression, schema: &ParagraphSchema) -> Box<dyn
43
43
  Box::new(BooleanQuery::new(operands))
44
44
  }
45
45
 
46
- fn translate_operation(operation: &BooleanOperation, schema: &ParagraphSchema) -> Box<dyn Query> {
46
+ fn translate_operation(operation: &BooleanOperation<String>, schema: &ParagraphSchema) -> Box<dyn Query> {
47
47
  let operator = match operation.operator {
48
48
  Operator::And => Occur::Must,
49
49
  Operator::Or => Occur::Should,
@@ -59,7 +59,7 @@ fn translate_operation(operation: &BooleanOperation, schema: &ParagraphSchema) -
59
59
  Box::new(BooleanQuery::new(operands))
60
60
  }
61
61
 
62
- pub fn translate_expression(expression: &BooleanExpression, schema: &ParagraphSchema) -> Box<dyn Query> {
62
+ pub fn translate_expression(expression: &BooleanExpression<String>, schema: &ParagraphSchema) -> Box<dyn Query> {
63
63
  match expression {
64
64
  BooleanExpression::Not(inner) => translate_not(inner, schema),
65
65
  BooleanExpression::Literal(literal) => translate_literal(literal, schema),
@@ -35,14 +35,14 @@ pub struct ParagraphSearchRequest {
35
35
  pub min_score: f32,
36
36
  pub security: Option<nidx_protos::utils::Security>,
37
37
 
38
- pub filtering_formula: Option<BooleanExpression>,
38
+ pub filtering_formula: Option<BooleanExpression<String>>,
39
39
  /// Whether to do an OR/AND between prefilter results and filtering_formula
40
40
  pub filter_or: bool,
41
41
  }
42
42
 
43
43
  pub struct ParagraphSuggestRequest {
44
44
  pub body: String,
45
- pub filtering_formula: Option<BooleanExpression>,
45
+ pub filtering_formula: Option<BooleanExpression<String>>,
46
46
  /// Whether to do an OR/AND between prefilter results and filtering_formula
47
47
  pub filter_or: bool,
48
48
  }
@@ -262,7 +262,7 @@ fn preprocess_raw_query(query: &str, tc: &mut TermCollector) -> ProcessedQuery {
262
262
  fn filter_query(
263
263
  schema: &ParagraphSchema,
264
264
  prefilter: &PrefilterResult,
265
- paragraph_formula: &Option<BooleanExpression>,
265
+ paragraph_formula: &Option<BooleanExpression<String>>,
266
266
  filter_or: bool,
267
267
  ) -> Option<Box<dyn Query>> {
268
268
  let mut filter_terms = vec![];
@@ -4,7 +4,7 @@ build-backend = "pdm.backend"
4
4
 
5
5
  [project]
6
6
  name = "nidx_protos"
7
- version = "6.3.1.post72"
7
+ version = "6.3.1.post82"
8
8
  license = { text = "AGPL" }
9
9
  description = "Protobuf definitions for nucliadb/nidx"
10
10
  authors = [ { name = "Nuclia", email = "nucliadb@nuclia.com" }]
@@ -18,12 +18,15 @@
18
18
  // along with this program. If not, see <http://www.gnu.org/licenses/>.
19
19
  //
20
20
  use nidx_protos::relation_node::NodeType;
21
+ use nidx_types::query_language::{BooleanExpression, BooleanOperation, Operator};
21
22
  use tantivy::query::{AllQuery, BooleanQuery, FuzzyTermQuery, Occur, Query, TermQuery};
22
23
  use tantivy::schema::{Field, IndexRecordOption};
23
24
 
24
25
  use crate::schema::Schema;
25
26
  use crate::{io_maps, schema};
26
27
 
28
+ const DEFAULT_NODE_VALUE_FUZZY_DISTANCE: u8 = 2;
29
+
27
30
  #[derive(Clone)]
28
31
  pub struct FuzzyTerm {
29
32
  pub value: String,
@@ -46,7 +49,6 @@ pub struct Node {
46
49
 
47
50
  #[derive(Default, Clone)]
48
51
  pub struct Relation {
49
- // TODO: fuzzy
50
52
  pub value: Option<String>,
51
53
  }
52
54
 
@@ -105,6 +107,8 @@ pub enum GraphQuery {
105
107
  PathQuery(PathQuery),
106
108
  }
107
109
 
110
+ pub struct BoolGraphQuery(BooleanExpression<GraphQuery>);
111
+
108
112
  #[derive(Clone, Copy)]
109
113
  struct NodeSchemaFields {
110
114
  normalized_value: Field,
@@ -121,6 +125,33 @@ impl GraphQueryParser {
121
125
  Self { schema: Schema::new() }
122
126
  }
123
127
 
128
+ pub fn parse_bool(&self, query: BoolGraphQuery) -> Box<dyn Query> {
129
+ self.inner_parse_bool(query.0)
130
+ }
131
+
132
+ fn inner_parse_bool(&self, query: BooleanExpression<GraphQuery>) -> Box<dyn Query> {
133
+ match query {
134
+ BooleanExpression::Literal(query) => self.parse(query),
135
+ BooleanExpression::Not(subquery) => {
136
+ let mut subqueries = vec![];
137
+ subqueries.push((Occur::Must, Box::new(AllQuery) as Box<dyn Query>));
138
+ subqueries.push((Occur::MustNot, self.inner_parse_bool(*subquery)));
139
+ Box::new(BooleanQuery::new(subqueries))
140
+ }
141
+ BooleanExpression::Operation(operation) => {
142
+ let mut subqueries = vec![];
143
+ let occur = match operation.operator {
144
+ Operator::And => Occur::Must,
145
+ Operator::Or => Occur::Should,
146
+ };
147
+ for expression in operation.operands {
148
+ subqueries.push((occur, self.inner_parse_bool(expression)));
149
+ }
150
+ Box::new(BooleanQuery::new(subqueries))
151
+ }
152
+ }
153
+ }
154
+
124
155
  pub fn parse(&self, query: GraphQuery) -> Box<dyn Query> {
125
156
  // REVIEW: if at some point we only want to return what the query really asks (nodes,
126
157
  // relations or paths), we may want to return the query and some kind of response builder
@@ -425,51 +456,79 @@ impl From<&str> for Term {
425
456
  }
426
457
  }
427
458
 
428
- impl TryFrom<&nidx_protos::graph_query::Query> for GraphQuery {
459
+ impl TryFrom<&nidx_protos::graph_query::PathQuery> for BoolGraphQuery {
429
460
  type Error = anyhow::Error;
430
461
 
431
- fn try_from(value: &nidx_protos::graph_query::Query) -> Result<Self, Self::Error> {
432
- let query = match value {
433
- nidx_protos::graph_query::Query::Node(query_node) => {
434
- let node = Node::try_from(query_node)?;
435
- Self::NodeQuery(NodeQuery::Node(Expression::Value(node)))
436
- }
462
+ fn try_from(value: &nidx_protos::graph_query::PathQuery) -> Result<Self, Self::Error> {
463
+ let bool_expr = match &value.query {
464
+ Some(query) => match query {
465
+ nidx_protos::graph_query::path_query::Query::Path(path) => {
466
+ let source = match &path.source {
467
+ Some(source_pb) => Node::try_from(source_pb)?,
468
+ None => Node::default(),
469
+ };
470
+ let relation = match &path.relation {
471
+ Some(relation_pb) => Relation::try_from(relation_pb)?,
472
+ None => Relation::default(),
473
+ };
474
+ let destination = match &path.destination {
475
+ Some(destination_pb) => Node::try_from(destination_pb)?,
476
+ None => Node::default(),
477
+ };
478
+
479
+ let path_query = if path.undirected {
480
+ GraphQuery::PathQuery(PathQuery::UndirectedPath((
481
+ Expression::Value(source),
482
+ Expression::Value(relation),
483
+ Expression::Value(destination),
484
+ )))
485
+ } else {
486
+ GraphQuery::PathQuery(PathQuery::DirectedPath((
487
+ Expression::Value(source),
488
+ Expression::Value(relation),
489
+ Expression::Value(destination),
490
+ )))
491
+ };
492
+
493
+ BooleanExpression::Literal(path_query)
494
+ }
437
495
 
438
- nidx_protos::graph_query::Query::Relation(relation) => {
439
- Self::RelationQuery(RelationQuery(Expression::Value(Relation::try_from(relation)?)))
440
- }
496
+ nidx_protos::graph_query::path_query::Query::BoolNot(bool_not) => {
497
+ let subquery = BoolGraphQuery::try_from(bool_not.as_ref())?.0;
498
+ BooleanExpression::Not(Box::new(subquery))
499
+ }
441
500
 
442
- nidx_protos::graph_query::Query::Path(path) => {
443
- let source = match &path.source {
444
- Some(source_pb) => Node::try_from(source_pb)?,
445
- None => Node::default(),
446
- };
447
- let relation = match &path.relation {
448
- Some(relation_pb) => Relation::try_from(relation_pb)?,
449
- None => Relation::default(),
450
- };
451
- let destination = match &path.destination {
452
- Some(destination_pb) => Node::try_from(destination_pb)?,
453
- None => Node::default(),
454
- };
501
+ nidx_protos::graph_query::path_query::Query::BoolAnd(bool_and) => {
502
+ BooleanExpression::Operation(BooleanOperation {
503
+ operator: Operator::And,
504
+ operands: bool_and
505
+ .operands
506
+ .iter()
507
+ .map(|o| BoolGraphQuery::try_from(o).map(|x| x.0))
508
+ .collect::<anyhow::Result<Vec<_>>>()?,
509
+ })
510
+ }
455
511
 
456
- if path.undirected {
457
- Self::PathQuery(PathQuery::UndirectedPath((
458
- Expression::Value(source),
459
- Expression::Value(relation),
460
- Expression::Value(destination),
461
- )))
462
- } else {
463
- Self::PathQuery(PathQuery::DirectedPath((
464
- Expression::Value(source),
465
- Expression::Value(relation),
466
- Expression::Value(destination),
467
- )))
512
+ nidx_protos::graph_query::path_query::Query::BoolOr(bool_or) => {
513
+ BooleanExpression::Operation(BooleanOperation {
514
+ operator: Operator::Or,
515
+ operands: bool_or
516
+ .operands
517
+ .iter()
518
+ .map(|o| BoolGraphQuery::try_from(o).map(|x| x.0))
519
+ .collect::<anyhow::Result<Vec<_>>>()?,
520
+ })
468
521
  }
469
- }
522
+ },
523
+
524
+ None => BooleanExpression::Literal(GraphQuery::PathQuery(PathQuery::UndirectedPath((
525
+ Expression::Value(Node::default()),
526
+ Expression::Value(Relation::default()),
527
+ Expression::Value(Node::default()),
528
+ )))),
470
529
  };
471
530
 
472
- Ok(query)
531
+ Ok(BoolGraphQuery(bool_expr))
473
532
  }
474
533
  }
475
534
 
@@ -477,16 +536,13 @@ impl TryFrom<&nidx_protos::graph_query::Node> for Node {
477
536
  type Error = anyhow::Error;
478
537
 
479
538
  fn try_from(node_pb: &nidx_protos::graph_query::Node) -> Result<Self, Self::Error> {
480
- let value = node_pb.value.clone().map(|value| {
481
- if node_pb.fuzzy_distance > 0 || node_pb.as_prefix {
482
- Term::Fuzzy(FuzzyTerm {
483
- value: value,
484
- fuzzy_distance: node_pb.fuzzy_distance as u8,
485
- is_prefix: node_pb.as_prefix,
486
- })
487
- } else {
488
- Term::Exact(value)
489
- }
539
+ let value = node_pb.value.clone().map(|value| match node_pb.match_kind() {
540
+ nidx_protos::graph_query::node::MatchKind::Exact => Term::Exact(value),
541
+ nidx_protos::graph_query::node::MatchKind::Fuzzy => Term::Fuzzy(FuzzyTerm {
542
+ value: value,
543
+ fuzzy_distance: DEFAULT_NODE_VALUE_FUZZY_DISTANCE,
544
+ is_prefix: true,
545
+ }),
490
546
  });
491
547
  let node_type = node_pb.node_type.map(NodeType::try_from).transpose()?;
492
548
  let node_subtype = node_pb.node_subtype.clone();
@@ -31,7 +31,7 @@ use tantivy::query::{BooleanQuery, Occur, Query};
31
31
  use tantivy::{DocAddress, Index, IndexReader, Searcher};
32
32
 
33
33
  use crate::graph_query_parser::{
34
- Expression, FuzzyTerm, GraphQuery, GraphQueryParser, Node, NodeQuery, PathQuery, Relation, Term,
34
+ BoolGraphQuery, Expression, FuzzyTerm, GraphQuery, GraphQueryParser, Node, NodeQuery, Term,
35
35
  };
36
36
  use crate::schema::Schema;
37
37
  use crate::{io_maps, schema};
@@ -71,14 +71,14 @@ impl RelationsReaderService {
71
71
  let Some(query) = &request.query else {
72
72
  return Ok(GraphSearchResponse::default());
73
73
  };
74
- let Some(query) = &query.query else {
74
+ let Some(query) = &query.path else {
75
75
  return Ok(GraphSearchResponse::default());
76
76
  };
77
77
 
78
78
  // Convert proto to tantivy query
79
- let query = GraphQuery::try_from(query)?;
79
+ let query = BoolGraphQuery::try_from(query)?;
80
80
  let parser = GraphQueryParser::new();
81
- let index_query = parser.parse(query);
81
+ let index_query = parser.parse_bool(query);
82
82
 
83
83
  // Tantivy searcher query
84
84
  let collector = TopDocs::with_limit(request.top_k as usize);
@@ -192,15 +192,11 @@ impl RelationsReaderService {
192
192
  for entry_point in bfs_request.entry_points.iter() {
193
193
  statements.push((
194
194
  Occur::Should,
195
- query_parser.parse(GraphQuery::PathQuery(PathQuery::UndirectedPath((
196
- Expression::Value(Node {
197
- value: Some(entry_point.value.clone().into()),
198
- node_type: Some(entry_point.ntype()),
199
- node_subtype: Some(entry_point.subtype.clone()),
200
- }),
201
- Expression::Value(Relation::default()),
202
- Expression::Value(Node::default()),
203
- )))),
195
+ query_parser.parse(GraphQuery::NodeQuery(NodeQuery::Node(Expression::Value(Node {
196
+ value: Some(entry_point.value.clone().into()),
197
+ node_type: Some(entry_point.ntype()),
198
+ node_subtype: Some(entry_point.subtype.clone()),
199
+ })))),
204
200
  ));
205
201
  }
206
202
 
@@ -215,20 +211,16 @@ impl RelationsReaderService {
215
211
  }
216
212
  statements.push((
217
213
  Occur::MustNot,
218
- query_parser.parse(GraphQuery::PathQuery(PathQuery::UndirectedPath((
219
- Expression::Or(
220
- deleted_nodes
221
- .node_values
222
- .iter()
223
- .map(|deleted_entity_value| Node {
224
- value: Some(deleted_entity_value.clone().into()),
225
- node_subtype: Some(deleted_nodes.node_subtype.clone()),
226
- ..Default::default()
227
- })
228
- .collect(),
229
- ),
230
- Expression::Value(Relation::default()),
231
- Expression::Value(Node::default()),
214
+ query_parser.parse(GraphQuery::NodeQuery(NodeQuery::Node(Expression::Or(
215
+ deleted_nodes
216
+ .node_values
217
+ .iter()
218
+ .map(|deleted_entity_value| Node {
219
+ value: Some(deleted_entity_value.clone().into()),
220
+ node_subtype: Some(deleted_nodes.node_subtype.clone()),
221
+ ..Default::default()
222
+ })
223
+ .collect(),
232
224
  )))),
233
225
  ));
234
226
  }
@@ -247,10 +239,8 @@ impl RelationsReaderService {
247
239
  if excluded_subtypes.len() > 0 {
248
240
  statements.push((
249
241
  Occur::MustNot,
250
- query_parser.parse(GraphQuery::PathQuery(PathQuery::UndirectedPath((
251
- Expression::Or(excluded_subtypes),
252
- Expression::Value(Relation::default()),
253
- Expression::Value(Node::default()),
242
+ query_parser.parse(GraphQuery::NodeQuery(NodeQuery::Node(Expression::Or(
243
+ excluded_subtypes,
254
244
  )))),
255
245
  ))
256
246
  }
@@ -31,14 +31,14 @@ pub enum Operator {
31
31
  }
32
32
 
33
33
  #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
34
- pub struct BooleanOperation {
34
+ pub struct BooleanOperation<T> {
35
35
  pub operator: Operator,
36
- pub operands: Vec<BooleanExpression>,
36
+ pub operands: Vec<BooleanExpression<T>>,
37
37
  }
38
38
 
39
39
  #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
40
- pub enum BooleanExpression {
41
- Literal(String),
42
- Not(Box<BooleanExpression>),
43
- Operation(BooleanOperation),
40
+ pub enum BooleanExpression<T> {
41
+ Literal(T),
42
+ Not(Box<BooleanExpression<T>>),
43
+ Operation(BooleanOperation<T>),
44
44
  }
@@ -93,7 +93,7 @@ pub struct Reader {
93
93
  open_data_points: Vec<OpenDataPoint>,
94
94
  }
95
95
 
96
- fn segment_matches(expression: &BooleanExpression, labels: &HashSet<String>) -> bool {
96
+ fn segment_matches(expression: &BooleanExpression<String>, labels: &HashSet<String>) -> bool {
97
97
  match expression {
98
98
  BooleanExpression::Literal(tag) => labels.contains(tag),
99
99
  BooleanExpression::Not(expr) => !segment_matches(expr, labels),
@@ -158,7 +158,7 @@ impl Reader {
158
158
  pub fn _search(
159
159
  &self,
160
160
  request: &dyn SearchRequest,
161
- segment_filter: &Option<BooleanExpression>,
161
+ segment_filter: &Option<BooleanExpression<String>>,
162
162
  ) -> VectorR<Vec<Neighbour>> {
163
163
  let normalized_query;
164
164
  let query = if self.config.normalize_vectors {
@@ -25,7 +25,7 @@ fn map_literal(literal: &str) -> Clause {
25
25
  Clause::Atom(AtomClause::label(literal.to_string()))
26
26
  }
27
27
 
28
- fn map_not(inner: &BooleanExpression) -> Clause {
28
+ fn map_not(inner: &BooleanExpression<String>) -> Clause {
29
29
  let operator = BooleanOperator::Not;
30
30
  let operand = map_expression(inner);
31
31
  let operands = vec![operand];
@@ -33,7 +33,7 @@ fn map_not(inner: &BooleanExpression) -> Clause {
33
33
  Clause::Compound(CompoundClause::new(operator, operands))
34
34
  }
35
35
 
36
- fn map_operation(operation: &BooleanOperation) -> Clause {
36
+ fn map_operation(operation: &BooleanOperation<String>) -> Clause {
37
37
  let operator = match operation.operator {
38
38
  Operator::And => BooleanOperator::And,
39
39
  Operator::Or => BooleanOperator::Or,
@@ -43,7 +43,7 @@ fn map_operation(operation: &BooleanOperation) -> Clause {
43
43
  Clause::Compound(CompoundClause::new(operator, operands))
44
44
  }
45
45
 
46
- pub fn map_expression(expression: &BooleanExpression) -> Clause {
46
+ pub fn map_expression(expression: &BooleanExpression<String>) -> Clause {
47
47
  match expression {
48
48
  BooleanExpression::Not(inner) => map_not(inner),
49
49
  BooleanExpression::Literal(literal) => map_literal(literal),
@@ -36,8 +36,8 @@ pub struct VectorSearchRequest {
36
36
  pub vector_set: String,
37
37
  pub min_score: f32,
38
38
 
39
- pub filtering_formula: Option<BooleanExpression>,
40
- pub segment_filtering_formula: Option<BooleanExpression>,
39
+ pub filtering_formula: Option<BooleanExpression<String>>,
40
+ pub segment_filtering_formula: Option<BooleanExpression<String>>,
41
41
  /// Whether to do an OR/AND between prefilter results and filtering_formula
42
42
  pub filter_or: bool,
43
43
  }
@@ -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.post72"
16
+ version = "6.3.1.post82"
17
17
 
18
18
  [project.urls]
19
19
  Homepage = "https://nuclia.com"
@@ -24,7 +24,7 @@ use nidx_protos::{
24
24
  use nidx_types::query_language::*;
25
25
 
26
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> {
27
+ pub fn extract_label_filters(expression: &FilterExpression, labels: &[&str]) -> Option<BooleanExpression<String>> {
28
28
  match expression.expr.as_ref().unwrap() {
29
29
  Expr::Facet(FacetFilter { facet }) if labels.contains(&facet.as_str()) => {
30
30
  Some(BooleanExpression::Literal(facet.clone()))
@@ -184,14 +184,14 @@ fn compute_relations_request(search_request: &SearchRequest) -> Option<RelationS
184
184
  })
185
185
  }
186
186
 
187
- pub fn filter_to_boolean_expression(filter: FilterExpression) -> anyhow::Result<BooleanExpression> {
187
+ pub fn filter_to_boolean_expression(filter: FilterExpression) -> anyhow::Result<BooleanExpression<String>> {
188
188
  match filter.expr.unwrap() {
189
189
  Expr::BoolAnd(and) => {
190
190
  let operands = and
191
191
  .operands
192
192
  .into_iter()
193
193
  .map(filter_to_boolean_expression)
194
- .collect::<anyhow::Result<Vec<BooleanExpression>>>()?;
194
+ .collect::<anyhow::Result<Vec<BooleanExpression<String>>>>()?;
195
195
  Ok(BooleanExpression::Operation(BooleanOperation {
196
196
  operator: Operator::And,
197
197
  operands,
@@ -202,7 +202,7 @@ pub fn filter_to_boolean_expression(filter: FilterExpression) -> anyhow::Result<
202
202
  .operands
203
203
  .into_iter()
204
204
  .map(filter_to_boolean_expression)
205
- .collect::<anyhow::Result<Vec<BooleanExpression>>>()?;
205
+ .collect::<anyhow::Result<Vec<BooleanExpression<String>>>>()?;
206
206
  Ok(BooleanExpression::Operation(BooleanOperation {
207
207
  operator: Operator::Or,
208
208
  operands,