diff --git a/.code-samples.meilisearch.yaml b/.code-samples.meilisearch.yaml index d4d33198..a78e70c5 100644 --- a/.code-samples.meilisearch.yaml +++ b/.code-samples.meilisearch.yaml @@ -626,6 +626,12 @@ update_pagination_settings_1: |- client.index('books').update_pagination_settings({'maxTotalHits': 100}) reset_pagination_settings_1: |- client.index('books').reset_pagination_settings() +get_facet_search_settings_1: |- + client.index('books').get_facet_search_settings() +update_facet_search_settings_1: |- + client.index('books').update_facet_search_settings(False) +reset_facet_search_settings_1: |- + client.index('books').reset_facet_search_settings() get_faceting_settings_1: |- client.index('books').get_faceting_settings() update_faceting_settings_1: |- @@ -716,6 +722,12 @@ update_search_cutoff_1: |- client.index('movies').update_search_cutoff_ms(150) reset_search_cutoff_1: |- client.index('movies').reset_search_cutoff_ms() +get_prefix_search_settings_1: |- + client.index('books').get_prefix_search() +update_prefix_search_settings_1: |- + client.index('books').update_prefix_search(PrefixSearch.DISABLED) +reset_prefix_search_settings_1: |- + client.index('books').reset_prefix_search() get_proximity_precision_settings_1: |- client.index('books').get_proximity_precision() update_proximity_precision_settings_1: |- diff --git a/Pipfile.lock b/Pipfile.lock index 08ef7b95..d83b7f03 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -329,11 +329,11 @@ }, "cachetools": { "hashes": [ - "sha256:1a661caa9175d26759571b2e19580f9d6393969e5dfca11fdb1f947a23e640d4", - "sha256:d26a22bcc62eb95c3beabd9f1ee5e820d3d2704fe2967cbe350e20c8ffcd3f0a" + "sha256:82e73ba88f7b30228b5507dce1a1f878498fc669d972aef2dde4f3a3c24f103e", + "sha256:f225782b84438f828328fc2ad74346522f27e5b1440f4e9fd18b20ebfd1aa2cf" ], - "markers": "python_version >= '3.7'", - "version": "==5.5.2" + "markers": "python_version >= '3.9'", + "version": "==6.0.0" }, "certifi": { "hashes": [ @@ -372,79 +372,81 @@ "toml" ], "hashes": [ - "sha256:00a1d69c112ff5149cabe60d2e2ee948752c975d95f1e1096742e6077affd376", - "sha256:023bf8ee3ec6d35af9c1c6ccc1d18fa69afa1cb29eaac57cb064dbb262a517f9", - "sha256:0294ca37f1ba500667b1aef631e48d875ced93ad5e06fa665a3295bdd1d95111", - "sha256:06babbb8f4e74b063dbaeb74ad68dfce9186c595a15f11f5d5683f748fa1d172", - "sha256:0809082ee480bb8f7416507538243c8863ac74fd8a5d2485c46f0f7499f2b491", - "sha256:0b3fb02fe73bed561fa12d279a417b432e5b50fe03e8d663d61b3d5990f29546", - "sha256:0b58c672d14f16ed92a48db984612f5ce3836ae7d72cdd161001cc54512571f2", - "sha256:0bcd1069e710600e8e4cf27f65c90c7843fa8edfb4520fb0ccb88894cad08b11", - "sha256:1032e178b76a4e2b5b32e19d0fd0abbce4b58e77a1ca695820d10e491fa32b08", - "sha256:11a223a14e91a4693d2d0755c7a043db43d96a7450b4f356d506c2562c48642c", - "sha256:12394842a3a8affa3ba62b0d4ab7e9e210c5e366fbac3e8b2a68636fb19892c2", - "sha256:182e6cd5c040cec0a1c8d415a87b67ed01193ed9ad458ee427741c7d8513d963", - "sha256:1d5b8007f81b88696d06f7df0cb9af0d3b835fe0c8dbf489bad70b45f0e45613", - "sha256:1f76846299ba5c54d12c91d776d9605ae33f8ae2b9d1d3c3703cf2db1a67f2c0", - "sha256:27fb4a050aaf18772db513091c9c13f6cb94ed40eacdef8dad8411d92d9992db", - "sha256:29155cd511ee058e260db648b6182c419422a0d2e9a4fa44501898cf918866cf", - "sha256:29fc0f17b1d3fea332f8001d4558f8214af7f1d87a345f3a133c901d60347c73", - "sha256:2b6b4c83d8e8ea79f27ab80778c19bc037759aea298da4b56621f4474ffeb117", - "sha256:2fdef0d83a2d08d69b1f2210a93c416d54e14d9eb398f6ab2f0a209433db19e1", - "sha256:3c65d37f3a9ebb703e710befdc489a38683a5b152242664b973a7b7b22348a4e", - "sha256:4f704f0998911abf728a7783799444fcbbe8261c4a6c166f667937ae6a8aa522", - "sha256:51b44306032045b383a7a8a2c13878de375117946d68dcb54308111f39775a25", - "sha256:53d202fd109416ce011578f321460795abfe10bb901b883cafd9b3ef851bacfc", - "sha256:58809e238a8a12a625c70450b48e8767cff9eb67c62e6154a642b21ddf79baea", - "sha256:5915fcdec0e54ee229926868e9b08586376cae1f5faa9bbaf8faf3561b393d52", - "sha256:5beb1ee382ad32afe424097de57134175fea3faf847b9af002cc7895be4e2a5a", - "sha256:5f8ae553cba74085db385d489c7a792ad66f7f9ba2ee85bfa508aeb84cf0ba07", - "sha256:5fbd612f8a091954a0c8dd4c0b571b973487277d26476f8480bfa4b2a65b5d06", - "sha256:6bd818b7ea14bc6e1f06e241e8234508b21edf1b242d49831831a9450e2f35fa", - "sha256:6f01ba56b1c0e9d149f9ac85a2f999724895229eb36bd997b61e62999e9b0901", - "sha256:73d2b73584446e66ee633eaad1a56aad577c077f46c35ca3283cd687b7715b0b", - "sha256:7bb92c539a624cf86296dd0c68cd5cc286c9eef2d0c3b8b192b604ce9de20a17", - "sha256:8165b796df0bd42e10527a3f493c592ba494f16ef3c8b531288e3d0d72c1f6f0", - "sha256:862264b12ebb65ad8d863d51f17758b1684560b66ab02770d4f0baf2ff75da21", - "sha256:8902dd6a30173d4ef09954bfcb24b5d7b5190cf14a43170e386979651e09ba19", - "sha256:8cf717ee42012be8c0cb205dbbf18ffa9003c4cbf4ad078db47b95e10748eec5", - "sha256:8ed9281d1b52628e81393f5eaee24a45cbd64965f41857559c2b7ff19385df51", - "sha256:99b41d18e6b2a48ba949418db48159d7a2e81c5cc290fc934b7d2380515bd0e3", - "sha256:9cb7fa111d21a6b55cbf633039f7bc2749e74932e3aa7cb7333f675a58a58bf3", - "sha256:a181e99301a0ae128493a24cfe5cfb5b488c4e0bf2f8702091473d033494d04f", - "sha256:a413a096c4cbac202433c850ee43fa326d2e871b24554da8327b01632673a076", - "sha256:a6b1e54712ba3474f34b7ef7a41e65bd9037ad47916ccb1cc78769bae324c01a", - "sha256:ade3ca1e5f0ff46b678b66201f7ff477e8fa11fb537f3b55c3f0568fbfe6e718", - "sha256:b0ac3d42cb51c4b12df9c5f0dd2f13a4f24f01943627120ec4d293c9181219ba", - "sha256:b369ead6527d025a0fe7bd3864e46dbee3aa8f652d48df6174f8d0bac9e26e0e", - "sha256:b57b768feb866f44eeed9f46975f3d6406380275c5ddfe22f531a2bf187eda27", - "sha256:b8d3a03d9bfcaf5b0141d07a88456bb6a4c3ce55c080712fec8418ef3610230e", - "sha256:bc66f0bf1d7730a17430a50163bb264ba9ded56739112368ba985ddaa9c3bd09", - "sha256:bf20494da9653f6410213424f5f8ad0ed885e01f7e8e59811f572bdb20b8972e", - "sha256:c48167910a8f644671de9f2083a23630fbf7a1cb70ce939440cd3328e0919f70", - "sha256:c481b47f6b5845064c65a7bc78bc0860e635a9b055af0df46fdf1c58cebf8e8f", - "sha256:c7c8b95bf47db6d19096a5e052ffca0a05f335bc63cef281a6e8fe864d450a72", - "sha256:c9b8e184898ed014884ca84c70562b4a82cbc63b044d366fedc68bc2b2f3394a", - "sha256:cc8ff50b50ce532de2fa7a7daae9dd12f0a699bfcd47f20945364e5c31799fef", - "sha256:d541423cdd416b78626b55f123412fcf979d22a2c39fce251b350de38c15c15b", - "sha256:dab4d16dfef34b185032580e2f2f89253d302facba093d5fa9dbe04f569c4f4b", - "sha256:dacbc52de979f2823a819571f2e3a350a7e36b8cb7484cdb1e289bceaf35305f", - "sha256:df57bdbeffe694e7842092c5e2e0bc80fff7f43379d465f932ef36f027179806", - "sha256:ed8fe9189d2beb6edc14d3ad19800626e1d9f2d975e436f84e19efb7fa19469b", - "sha256:f3ddf056d3ebcf6ce47bdaf56142af51bb7fad09e4af310241e9db7a3a8022e1", - "sha256:f8fe4984b431f8621ca53d9380901f62bfb54ff759a1348cd140490ada7b693c", - "sha256:fe439416eb6380de434886b00c859304338f8b19f6f54811984f3420a2e03858" + "sha256:042e7841a26498fff7a37d6fda770d17519982f5b7d8bf5278d140b67b61095f", + "sha256:04bfec25a8ef1c5f41f5e7e5c842f6b615599ca8ba8391ec33a9290d9d2db3a3", + "sha256:0915742f4c82208ebf47a2b154a5334155ed9ef9fe6190674b8a46c2fb89cb05", + "sha256:18c5ae6d061ad5b3e7eef4363fb27a0576012a7447af48be6c75b88494c6cf25", + "sha256:2931f66991175369859b5fd58529cd4b73582461877ecfd859b6549869287ffe", + "sha256:2e4b6b87bb0c846a9315e3ab4be2d52fac905100565f4b92f02c445c8799e257", + "sha256:3043ba1c88b2139126fc72cb48574b90e2e0546d4c78b5299317f61b7f718b78", + "sha256:379fe315e206b14e21db5240f89dc0774bdd3e25c3c58c2c733c99eca96f1ada", + "sha256:42421e04069fb2cbcbca5a696c4050b84a43b05392679d4068acbe65449b5c64", + "sha256:4dfd9a93db9e78666d178d4f08a5408aa3f2474ad4d0e0378ed5f2ef71640cb6", + "sha256:52a523153c568d2c0ef8826f6cc23031dc86cffb8c6aeab92c4ff776e7951b28", + "sha256:554fec1199d93ab30adaa751db68acec2b41c5602ac944bb19187cb9a41a8067", + "sha256:581a40c7b94921fffd6457ffe532259813fc68eb2bdda60fa8cc343414ce3733", + "sha256:5a26c0c795c3e0b63ec7da6efded5f0bc856d7c0b24b2ac84b4d1d7bc578d676", + "sha256:5a570cd9bd20b85d1a0d7b009aaf6c110b52b5755c17be6962f8ccd65d1dbd23", + "sha256:5aaeb00761f985007b38cf463b1d160a14a22c34eb3f6a39d9ad6fc27cb73008", + "sha256:5ac46d0c2dd5820ce93943a501ac5f6548ea81594777ca585bf002aa8854cacd", + "sha256:5c8a5c139aae4c35cbd7cadca1df02ea8cf28a911534fc1b0456acb0b14234f3", + "sha256:6b8af63b9afa1031c0ef05b217faa598f3069148eeee6bb24b79da9012423b82", + "sha256:769773614e676f9d8e8a0980dd7740f09a6ea386d0f383db6821df07d0f08545", + "sha256:771eb7587a0563ca5bb6f622b9ed7f9d07bd08900f7589b4febff05f469bea00", + "sha256:77af0f6447a582fdc7de5e06fa3757a3ef87769fbb0fdbdeba78c23049140a47", + "sha256:7a3d62b3b03b4b6fd41a085f3574874cf946cb4604d2b4d3e8dca8cd570ca501", + "sha256:821f7bcbaa84318287115d54becb1915eece6918136c6f91045bb84e2f88739d", + "sha256:89b1f4af0d4afe495cd4787a68e00f30f1d15939f550e869de90a86efa7e0814", + "sha256:8a1d96e780bdb2d0cbb297325711701f7c0b6f89199a57f2049e90064c29f6bd", + "sha256:8a40fcf208e021eb14b0fac6bdb045c0e0cab53105f93ba0d03fd934c956143a", + "sha256:8f99eb72bf27cbb167b636eb1726f590c00e1ad375002230607a844d9e9a2318", + "sha256:90e7fbc6216ecaffa5a880cdc9c77b7418c1dcb166166b78dbc630d07f278cc3", + "sha256:94ec0be97723ae72d63d3aa41961a0b9a6f5a53ff599813c324548d18e3b9e8c", + "sha256:95aa6ae391a22bbbce1b77ddac846c98c5473de0372ba5c463480043a07bff42", + "sha256:96121edfa4c2dfdda409877ea8608dd01de816a4dc4a0523356067b305e4e17a", + "sha256:a1f406a8e0995d654b2ad87c62caf6befa767885301f3b8f6f73e6f3c31ec3a6", + "sha256:a321c61477ff8ee705b8a5fed370b5710c56b3a52d17b983d9215861e37b642a", + "sha256:a5761c70c017c1b0d21b0815a920ffb94a670c8d5d409d9b38857874c21f70d7", + "sha256:a9abbccd778d98e9c7e85038e35e91e67f5b520776781d9a1e2ee9d400869487", + "sha256:ad80e6b4a0c3cb6f10f29ae4c60e991f424e6b14219d46f1e7d442b938ee68a4", + "sha256:b44674870709017e4b4036e3d0d6c17f06a0e6d4436422e0ad29b882c40697d2", + "sha256:b571bf5341ba8c6bc02e0baeaf3b061ab993bf372d982ae509807e7f112554e9", + "sha256:b8194fb8e50d556d5849753de991d390c5a1edeeba50f68e3a9253fbd8bf8ccd", + "sha256:b87eb6fc9e1bb8f98892a2458781348fa37e6925f35bb6ceb9d4afd54ba36c73", + "sha256:bbb5cc845a0292e0c520656d19d7ce40e18d0e19b22cb3e0409135a575bf79fc", + "sha256:be945402e03de47ba1872cd5236395e0f4ad635526185a930735f66710e1bd3f", + "sha256:bf13d564d310c156d1c8e53877baf2993fb3073b2fc9f69790ca6a732eb4bfea", + "sha256:cf60dd2696b457b710dd40bf17ad269d5f5457b96442f7f85722bdb16fa6c899", + "sha256:d1ba00ae33be84066cfbe7361d4e04dec78445b2b88bdb734d0d1cbab916025a", + "sha256:d39fc4817fd67b3915256af5dda75fd4ee10621a3d484524487e33416c6f3543", + "sha256:d766a4f0e5aa1ba056ec3496243150698dc0481902e2b8559314368717be82b1", + "sha256:dbf364b4c5e7bae9250528167dfe40219b62e2d573c854d74be213e1e52069f7", + "sha256:dd19608788b50eed889e13a5d71d832edc34fc9dfce606f66e8f9f917eef910d", + "sha256:e013b07ba1c748dacc2a80e69a46286ff145935f260eb8c72df7185bf048f502", + "sha256:e5d2b9be5b0693cf21eb4ce0ec8d211efb43966f6657807f6859aab3814f946b", + "sha256:e5ff52d790c7e1628241ffbcaeb33e07d14b007b6eb00a19320c7b8a7024c040", + "sha256:e75a2ad7b647fd8046d58c3132d7eaf31b12d8a53c0e4b21fa9c4d23d6ee6d3c", + "sha256:e7ac22a0bb2c7c49f441f7a6d46c9c80d96e56f5a8bc6972529ed43c8b694e27", + "sha256:ed2144b8a78f9d94d9515963ed273d620e07846acd5d4b0a642d4849e8d91a0c", + "sha256:f017a61399f13aa6d1039f75cd467be388d157cd81f1a119b9d9a68ba6f2830d", + "sha256:f1d8a2a57b47142b10374902777e798784abf400a004b14f1b0b9eaf1e528ba4", + "sha256:f2d32f95922927186c6dbc8bc60df0d186b6edb828d299ab10898ef3f40052fe", + "sha256:f319bae0321bc838e205bf9e5bc28f0a3165f30c203b610f17ab5552cff90323", + "sha256:f3c38e4e5ccbdc9198aecc766cedbb134b2d89bf64533973678dfcf07effd883", + "sha256:f9983d01d7705b2d1f7a95e10bbe4091fabc03a46881a256c2787637b087003f", + "sha256:fa260de59dfb143af06dcf30c2be0b200bed2a73737a8a59248fcb9fa601ef0f" ], "markers": "python_version >= '3.9'", - "version": "==7.6.4" + "version": "==7.8.0" }, "dill": { "hashes": [ - "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a", - "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c" + "sha256:0633f1d2df477324f53a895b02c901fb961bdbf65a17122586ea7019292cbcf0", + "sha256:44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049" ], + "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==0.3.9" + "version": "==0.4.0" }, "distlib": { "hashes": [ @@ -455,11 +457,11 @@ }, "exceptiongroup": { "hashes": [ - "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", - "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc" + "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10", + "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88" ], "markers": "python_version < '3.11' and python_version < '3.11'", - "version": "==1.2.2" + "version": "==1.3.0" }, "filelock": { "hashes": [ @@ -587,58 +589,58 @@ }, "mypy": { "hashes": [ - "sha256:1124a18bc11a6a62887e3e137f37f53fbae476dc36c185d549d4f837a2a6a14e", - "sha256:171a9ca9a40cd1843abeca0e405bc1940cd9b305eaeea2dda769ba096932bb22", - "sha256:1905f494bfd7d85a23a88c5d97840888a7bd516545fc5aaedff0267e0bb54e2f", - "sha256:1fbb8da62dc352133d7d7ca90ed2fb0e9d42bb1a32724c287d3c76c58cbaa9c2", - "sha256:2922d42e16d6de288022e5ca321cd0618b238cfc5570e0263e5ba0a77dbef56f", - "sha256:2e2c2e6d3593f6451b18588848e66260ff62ccca522dd231cd4dd59b0160668b", - "sha256:2ee2d57e01a7c35de00f4634ba1bbf015185b219e4dc5909e281016df43f5ee5", - "sha256:2f2147ab812b75e5b5499b01ade1f4a81489a147c01585cda36019102538615f", - "sha256:404534629d51d3efea5c800ee7c42b72a6554d6c400e6a79eafe15d11341fd43", - "sha256:5469affef548bd1895d86d3bf10ce2b44e33d86923c29e4d675b3e323437ea3e", - "sha256:5a95fb17c13e29d2d5195869262f8125dfdb5c134dc8d9a9d0aecf7525b10c2c", - "sha256:6983aae8b2f653e098edb77f893f7b6aca69f6cffb19b2cc7443f23cce5f4828", - "sha256:712e962a6357634fef20412699a3655c610110e01cdaa6180acec7fc9f8513ba", - "sha256:8023ff13985661b50a5928fc7a5ca15f3d1affb41e5f0a9952cb68ef090b31ee", - "sha256:811aeccadfb730024c5d3e326b2fbe9249bb7413553f15499a4050f7c30e801d", - "sha256:8f8722560a14cde92fdb1e31597760dc35f9f5524cce17836c0d22841830fd5b", - "sha256:93faf3fdb04768d44bf28693293f3904bbb555d076b781ad2530214ee53e3445", - "sha256:973500e0774b85d9689715feeffcc980193086551110fd678ebe1f4342fb7c5e", - "sha256:979e4e1a006511dacf628e36fadfecbcc0160a8af6ca7dad2f5025529e082c13", - "sha256:98b7b9b9aedb65fe628c62a6dc57f6d5088ef2dfca37903a7d9ee374d03acca5", - "sha256:aea39e0583d05124836ea645f412e88a5c7d0fd77a6d694b60d9b6b2d9f184fd", - "sha256:b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf", - "sha256:baefc32840a9f00babd83251560e0ae1573e2f9d1b067719479bfb0e987c6357", - "sha256:be68172e9fd9ad8fb876c6389f16d1c1b5f100ffa779f77b1fb2176fcc9ab95b", - "sha256:c43a7682e24b4f576d93072216bf56eeff70d9140241f9edec0c104d0c515036", - "sha256:c4bb0e1bd29f7d34efcccd71cf733580191e9a264a2202b0239da95984c5b559", - "sha256:c7be1e46525adfa0d97681432ee9fcd61a3964c2446795714699a998d193f1a3", - "sha256:c9817fa23833ff189db061e6d2eff49b2f3b6ed9856b4a0a73046e41932d744f", - "sha256:ce436f4c6d218a070048ed6a44c0bbb10cd2cc5e272b29e7845f6a2f57ee4464", - "sha256:d10d994b41fb3497719bbf866f227b3489048ea4bbbb5015357db306249f7980", - "sha256:e601a7fa172c2131bff456bb3ee08a88360760d0d2f8cbd7a75a65497e2df078", - "sha256:f95579473af29ab73a10bada2f9722856792a36ec5af5399b653aa28360290a5" + "sha256:021a68568082c5b36e977d54e8f1de978baf401a33884ffcea09bd8e88a98f4c", + "sha256:089bedc02307c2548eb51f426e085546db1fa7dd87fbb7c9fa561575cf6eb1ff", + "sha256:09a8da6a0ee9a9770b8ff61b39c0bb07971cda90e7297f4213741b48a0cc8d93", + "sha256:0b07e107affb9ee6ce1f342c07f51552d126c32cd62955f59a7db94a51ad12c0", + "sha256:15486beea80be24ff067d7d0ede673b001d0d684d0095803b3e6e17a886a2a92", + "sha256:29e1499864a3888bca5c1542f2d7232c6e586295183320caa95758fc84034031", + "sha256:2e7e0ad35275e02797323a5aa1be0b14a4d03ffdb2e5f2b0489fa07b89c67b21", + "sha256:4086883a73166631307fdd330c4a9080ce24913d4f4c5ec596c601b3a4bdd777", + "sha256:54066fed302d83bf5128632d05b4ec68412e1f03ef2c300434057d66866cea4b", + "sha256:55f9076c6ce55dd3f8cd0c6fff26a008ca8e5131b89d5ba6d86bd3f47e736eeb", + "sha256:6a2322896003ba66bbd1318c10d3afdfe24e78ef12ea10e2acd985e9d684a666", + "sha256:7909541fef256527e5ee9c0a7e2aeed78b6cda72ba44298d1334fe7881b05c5c", + "sha256:82d056e6faa508501af333a6af192c700b33e15865bda49611e3d7d8358ebea2", + "sha256:84b94283f817e2aa6350a14b4a8fb2a35a53c286f97c9d30f53b63620e7af8ab", + "sha256:936ccfdd749af4766be824268bfe22d1db9eb2f34a3ea1d00ffbe5b5265f5491", + "sha256:9f826aaa7ff8443bac6a494cf743f591488ea940dd360e7dd330e30dd772a5ab", + "sha256:a5fcfdb7318c6a8dd127b14b1052743b83e97a970f0edb6c913211507a255e20", + "sha256:a7e32297a437cc915599e0578fa6bc68ae6a8dc059c9e009c628e1c47f91495d", + "sha256:a9e056237c89f1587a3be1a3a70a06a698d25e2479b9a2f57325ddaaffc3567b", + "sha256:afe420c9380ccec31e744e8baff0d406c846683681025db3531b32db56962d52", + "sha256:b4968f14f44c62e2ec4a038c8797a87315be8df7740dc3ee8d3bfe1c6bf5dba8", + "sha256:bd4e1ebe126152a7bbaa4daedd781c90c8f9643c79b9748caa270ad542f12bec", + "sha256:c5436d11e89a3ad16ce8afe752f0f373ae9620841c50883dc96f8b8805620b13", + "sha256:c6fb60cbd85dc65d4d63d37cb5c86f4e3a301ec605f606ae3a9173e5cf34997b", + "sha256:d045d33c284e10a038f5e29faca055b90eee87da3fc63b8889085744ebabb5a1", + "sha256:e71d6f0090c2256c713ed3d52711d01859c82608b5d68d4fa01a3fe30df95571", + "sha256:eb14a4a871bb8efb1e4a50360d4e3c8d6c601e7a31028a2c79f9bb659b63d730", + "sha256:eb5fbc8063cb4fde7787e4c0406aa63094a34a2daf4673f359a1fb64050e9cb2", + "sha256:f2622af30bf01d8fc36466231bdd203d120d7a599a6d88fb22bdcb9dbff84090", + "sha256:f2ed0e0847a80655afa2c121835b848ed101cc7b8d8d6ecc5205aedc732b1436", + "sha256:f56236114c425620875c7cf71700e3d60004858da856c6fc78998ffe767b73d3", + "sha256:feec38097f71797da0231997e0de3a58108c51845399669ebc532c815f93866b" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==1.15.0" + "version": "==1.16.0" }, "mypy-extensions": { "hashes": [ - "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", - "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782" + "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", + "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558" ], - "markers": "python_version >= '3.5'", - "version": "==1.0.0" + "markers": "python_version >= '3.8'", + "version": "==1.1.0" }, "packaging": { "hashes": [ - "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", - "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" + "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", + "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f" ], "markers": "python_version >= '3.8'", - "version": "==24.2" + "version": "==25.0" }, "pathspec": { "hashes": [ @@ -667,19 +669,19 @@ }, "platformdirs": { "hashes": [ - "sha256:a03875334331946f13c549dbd8f4bac7a13a50a895a0eb1e8c6a8ace80d40a94", - "sha256:eb437d586b6a0986388f0d6f74aa0cde27b48d0e3d66843640bfb6bdcdb6e351" + "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", + "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4" ], "markers": "python_version >= '3.9'", - "version": "==4.3.7" + "version": "==4.3.8" }, "pluggy": { "hashes": [ - "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", - "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669" + "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", + "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746" ], - "markers": "python_version >= '3.8'", - "version": "==1.5.0" + "markers": "python_version >= '3.9'", + "version": "==1.6.0" }, "pylint": { "hashes": [ @@ -692,11 +694,11 @@ }, "pyproject-api": { "hashes": [ - "sha256:326df9d68dea22d9d98b5243c46e3ca3161b07a1b9b18e213d1e24fd0e605766", - "sha256:7e8a9854b2dfb49454fae421cb86af43efbb2b2454e5646ffb7623540321ae6e" + "sha256:43c9918f49daab37e302038fc1aed54a8c7a91a9fa935d00b9a485f37e0f5335", + "sha256:7d6238d92f8962773dd75b5f0c4a6a27cce092a14b623b811dba656f3b628948" ], "markers": "python_version >= '3.9'", - "version": "==1.9.0" + "version": "==1.9.1" }, "pytest": { "hashes": [ @@ -709,12 +711,12 @@ }, "pytest-cov": { "hashes": [ - "sha256:eee6f1b9e61008bd34975a4d5bab25801eb31898b032dd55addc93e96fcaaa35", - "sha256:fde0b595ca248bb8e2d76f020b465f3b107c9632e6a1d1705f17834c89dcadc0" + "sha256:46935f7aaefba760e716c2ebfbe1c216240b9592966e7da99ea8292d4d3e2a0a", + "sha256:bddf29ed2d0ab6f4df17b4c55b0a657287db8684af9c42ea546b21b1041b3dde" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==6.0.0" + "version": "==6.1.1" }, "pytest-ordering": { "hashes": [ @@ -727,11 +729,12 @@ }, "setuptools": { "hashes": [ - "sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd", - "sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686" + "sha256:c3a9c4211ff4c309edb8b8c4f1cbfa7ae324c4ba9f91ff254e3d305b9fd54561", + "sha256:fcc17fd9cd898242f6b4adfaca46137a9edef687f43e6f78469692a5e70d851d" ], - "markers": "python_version >= '3.8'", - "version": "==75.3.0" + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==78.1.1" }, "tomli": { "hashes": [ @@ -781,12 +784,12 @@ }, "tox": { "hashes": [ - "sha256:4dfdc7ba2cc6fdc6688dde1b21e7b46ff6c41795fb54586c91a3533317b5255c", - "sha256:dd67f030317b80722cf52b246ff42aafd3ed27ddf331c415612d084304cf5e52" + "sha256:75f17aaf09face9b97bd41645028d9f722301e912be8b4c65a3f938024560224", + "sha256:a83b3b67b0159fa58e44e646505079e35a43317a62d2ae94725e0586266faeca" ], "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==4.25.0" + "markers": "python_version >= '3.9'", + "version": "==4.26.0" }, "tox-pipenv": { "hashes": [ @@ -798,36 +801,36 @@ }, "types-requests": { "hashes": [ - "sha256:72ff80f84b15eb3aa7a8e2625fffb6a93f2ad5a0c20215fc1dcfa61117bcb2a2", - "sha256:c9e67228ea103bd811c96984fac36ed2ae8da87a36a633964a21f199d60baf32" + "sha256:09c8b63c11318cb2460813871aaa48b671002e59fda67ca909e9883777787581", + "sha256:f8eba93b3a892beee32643ff836993f15a785816acca21ea0ffa006f05ef0fb2" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==2.32.0.20250328" + "version": "==2.32.0.20250515" }, "typing-extensions": { "hashes": [ - "sha256:0a4ac55a5820789d87e297727d229866c9650f6521b64206413c4fbada24d95b", - "sha256:c8dd92cc0d6425a97c18fbb9d1954e5ff92c1ca881a309c45f06ebc0b79058e5" + "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c", + "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef" ], "markers": "python_version >= '3.8'", - "version": "==4.13.0" + "version": "==4.13.2" }, "urllib3": { "hashes": [ - "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", - "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d" + "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", + "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813" ], "markers": "python_version >= '3.9'", - "version": "==2.3.0" + "version": "==2.4.0" }, "virtualenv": { "hashes": [ - "sha256:800863162bcaa5450a6e4d721049730e7f2dae07720e0902b0e4040bd6f9ada8", - "sha256:e34302959180fca3af42d1800df014b35019490b119eba981af27f2fa486e5d6" + "sha256:36efd0d9650ee985f0cad72065001e66d49a6f24eb44d98980f630686243cf11", + "sha256:e10c0a9d02835e592521be48b332b6caee6887f332c111aa79a09b9e79efc2af" ], "markers": "python_version >= '3.8'", - "version": "==20.30.0" + "version": "==20.31.2" }, "wrapt": { "hashes": [ diff --git a/meilisearch/_httprequests.py b/meilisearch/_httprequests.py index 2d11184b..11f9d493 100644 --- a/meilisearch/_httprequests.py +++ b/meilisearch/_httprequests.py @@ -12,7 +12,7 @@ MeilisearchCommunicationError, MeilisearchTimeoutError, ) -from meilisearch.models.index import ProximityPrecision +from meilisearch.models.index import PrefixSearch, ProximityPrecision from meilisearch.version import qualified_version @@ -36,6 +36,7 @@ def send_request( Mapping[str, Any], Sequence[Mapping[str, Any]], List[str], + bool, bytes, str, int, @@ -67,7 +68,7 @@ def send_request( serialize_body = isinstance(body, dict) or body data = ( json.dumps(body, cls=serializer) - if serialize_body + if isinstance(body, bool) or serialize_body else "" if body == "" else "null" ) @@ -80,6 +81,16 @@ def send_request( raise MeilisearchTimeoutError(str(err)) from err except requests.exceptions.ConnectionError as err: raise MeilisearchCommunicationError(str(err)) from err + except requests.exceptions.InvalidSchema as err: + if "://" not in self.config.url: + raise MeilisearchCommunicationError( + f""" + Invalid URL {self.config.url}, no scheme/protocol supplied. + Did you mean https://{self.config.url}? + """ + ) from err + + raise MeilisearchCommunicationError(str(err)) from err def get(self, path: str) -> Any: return self.send_request(requests.get, path) @@ -114,9 +125,11 @@ def put( Mapping[str, Any], Sequence[Mapping[str, Any]], List[str], + bool, bytes, str, int, + PrefixSearch, ProximityPrecision, ] ] = None, diff --git a/meilisearch/config.py b/meilisearch/config.py index acf5745b..d482afe0 100644 --- a/meilisearch/config.py +++ b/meilisearch/config.py @@ -42,6 +42,7 @@ class Paths: swap = "swap-indexes" embedders = "embedders" search_cutoff_ms = "search-cutoff-ms" + prefix_search = "prefix-search" proximity_precision = "proximity-precision" localized_attributes = "localized-attributes" edit = "edit" diff --git a/meilisearch/index.py b/meilisearch/index.py index 812c3a57..9bc4792c 100644 --- a/meilisearch/index.py +++ b/meilisearch/index.py @@ -25,6 +25,7 @@ from meilisearch.errors import version_error_hint_message from meilisearch.models.document import Document, DocumentsResults from meilisearch.models.embedders import ( + CompositeEmbedder, Embedders, EmbedderType, HuggingFaceEmbedder, @@ -38,6 +39,7 @@ IndexStats, LocalizedAttributes, Pagination, + PrefixSearch, ProximityPrecision, TypoTolerance, ) @@ -977,6 +979,8 @@ def get_settings(self) -> Dict[str, Any]: embedders[k] = HuggingFaceEmbedder(**v) elif v.get("source") == "rest": embedders[k] = RestEmbedder(**v) + elif v.get("source") == "composite": + embedders[k] = CompositeEmbedder(**v) else: embedders[k] = UserProvidedEmbedder(**v) @@ -1662,6 +1666,57 @@ def reset_pagination_settings(self) -> TaskInfo: return TaskInfo(**task) + def get_facet_search_settings(self) -> bool: + """Get the facet search settings of an index. + + Returns + ------- + bool: + True if facet search is enabled, False if disabled. + Raises + ------ + MeilisearchApiError + An error containing details about why Meilisearch can't process your request. Meilisearch error codes are described here: https://www.meilisearch.com/docs/reference/errors/error_codes#meilisearch-errors + """ + + return self.http.get(self.__settings_url_for(self.config.paths.facet_search)) + + def update_facet_search_settings(self, body: Union[bool, None]) -> TaskInfo: + """Update the facet search settings of the index. + + Parameters + ---------- + body: bool + True to enable facet search, False to disable it. + + Returns + ------- + task_info: + TaskInfo instance containing information about a task to track the progress of an asynchronous process. + https://www.meilisearch.com/docs/reference/api/tasks#get-one-task + + Raises + ------ + MeilisearchApiError + An error containing details about why Meilisearch can't process your request. Meilisearch error codes are described here: https://www.meilisearch.com/docs/reference/errors/error_codes#meilisearch-errors + """ + task = self.http.put(self.__settings_url_for(self.config.paths.facet_search), body=body) + + return TaskInfo(**task) + + def reset_facet_search_settings(self) -> TaskInfo: + """Reset facet search settings of the index to default values. + + Returns + ------- + task_info: + TaskInfo instance containing information about a task to track the progress of an asynchronous process. + https://www.meilisearch.com/docs/reference/api/tasks + """ + task = self.http.delete(self.__settings_url_for(self.config.paths.facet_search)) + + return TaskInfo(**task) + def get_faceting_settings(self) -> Faceting: """Get the faceting settings of an index. @@ -1675,7 +1730,6 @@ def get_faceting_settings(self) -> Faceting: MeilisearchApiError An error containing details about why Meilisearch can't process your request. Meilisearch error codes are described here: https://www.meilisearch.com/docs/reference/errors/error_codes#meilisearch-errors """ - faceting = self.http.get(self.__settings_url_for(self.config.paths.faceting)) return Faceting(**faceting) @@ -1934,6 +1988,8 @@ def get_embedders(self) -> Embedders | None: embedders[k] = OllamaEmbedder(**v) elif source == "rest": embedders[k] = RestEmbedder(**v) + elif source == "composite": + embedders[k] = CompositeEmbedder(**v) elif source == "userProvided": embedders[k] = UserProvidedEmbedder(**v) else: @@ -1977,6 +2033,8 @@ def update_embedders(self, body: Union[MutableMapping[str, Any], None]) -> TaskI embedders[k] = OllamaEmbedder(**v) elif source == "rest": embedders[k] = RestEmbedder(**v) + elif source == "composite": + embedders[k] = CompositeEmbedder(**v) elif source == "userProvided": embedders[k] = UserProvidedEmbedder(**v) else: @@ -2071,6 +2129,58 @@ def reset_search_cutoff_ms(self) -> TaskInfo: return TaskInfo(**task) + # PREFIX SEARCH + + def get_prefix_search(self) -> PrefixSearch: + """Get the prefix search settings of an index. + + Returns + ------- + settings: + The prefix search settings of the index. + + Raises + ------ + MeilisearchApiError + An error containing details about why Meilisearch can't process your request. Meilisearch error codes are described here: https://www.meilisearch.com/docs/reference/errors/error_codes#meilisearch-errors + """ + prefix_search = self.http.get(self.__settings_url_for(self.config.paths.prefix_search)) + + return PrefixSearch[to_snake(prefix_search).upper()] + + def update_prefix_search(self, body: Union[PrefixSearch, None]) -> TaskInfo: + """Update the prefix search settings of the index. + + Parameters + ---------- + body: + Prefix search settings + + Returns + ------- + task_info: + TaskInfo instance containing information about a task to track the progress of an asynchronous process. + https://www.meilisearch.com/docs/reference/api/tasks + """ + task = self.http.put(self.__settings_url_for(self.config.paths.prefix_search), body) + + return TaskInfo(**task) + + def reset_prefix_search(self) -> TaskInfo: + """Reset the prefix search settings of the index + + Returns + ------- + task_info: + TaskInfo instance containing information about a task to track the progress of an asynchronous process. + https://www.meilisearch.com/docs/reference/api/tasks + """ + task = self.http.delete( + self.__settings_url_for(self.config.paths.prefix_search), + ) + + return TaskInfo(**task) + # PROXIMITY PRECISION SETTINGS def get_proximity_precision(self) -> ProximityPrecision: diff --git a/meilisearch/models/embedders.py b/meilisearch/models/embedders.py index 01ba7b3c..9dcd5d00 100644 --- a/meilisearch/models/embedders.py +++ b/meilisearch/models/embedders.py @@ -1,5 +1,6 @@ from __future__ import annotations +from enum import Enum from typing import Any, Dict, Optional, Union from camel_converter.pydantic_base import CamelBase @@ -20,6 +21,24 @@ class Distribution(CamelBase): sigma: float +class PoolingType(str, Enum): + """Pooling strategies for HuggingFaceEmbedder. + + Attributes + ---------- + USE_MODEL : str + Use the model's default pooling strategy. + FORCE_MEAN : str + Force mean pooling over the token embeddings. + FORCE_CLS : str + Use the [CLS] token embedding as the sentence representation. + """ + + USE_MODEL = "useModel" + FORCE_MEAN = "forceMean" + FORCE_CLS = "forceCls" + + class OpenAiEmbedder(CamelBase): """OpenAI embedder configuration. @@ -79,6 +98,8 @@ class HuggingFaceEmbedder(CamelBase): Describes the natural distribution of search results binary_quantized: Optional[bool] Once set to true, irreversibly converts all vector dimensions to 1-bit values + pooling: Optional[PoolingType] + Configures how individual tokens are merged into a single embedding """ source: str = "huggingFace" @@ -90,6 +111,7 @@ class HuggingFaceEmbedder(CamelBase): document_template_max_bytes: Optional[int] = None # Default to 400 distribution: Optional[Distribution] = None binary_quantized: Optional[bool] = None + pooling: Optional[PoolingType] = PoolingType.USE_MODEL class OllamaEmbedder(CamelBase): @@ -191,6 +213,45 @@ class UserProvidedEmbedder(CamelBase): binary_quantized: Optional[bool] = None +class CompositeEmbedder(CamelBase): + """Composite embedder configuration. + + Parameters + ---------- + source: str + The embedder source, must be "composite" + indexing_embedder: Union[ + OpenAiEmbedder, + HuggingFaceEmbedder, + OllamaEmbedder, + RestEmbedder, + UserProvidedEmbedder, + ] + search_embedder: Union[ + OpenAiEmbedder, + HuggingFaceEmbedder, + OllamaEmbedder, + RestEmbedder, + UserProvidedEmbedder, + ]""" + + source: str = "composite" + search_embedder: Union[ + OpenAiEmbedder, + HuggingFaceEmbedder, + OllamaEmbedder, + RestEmbedder, + UserProvidedEmbedder, + ] + indexing_embedder: Union[ + OpenAiEmbedder, + HuggingFaceEmbedder, + OllamaEmbedder, + RestEmbedder, + UserProvidedEmbedder, + ] + + # Type alias for the embedder union type EmbedderType = Union[ OpenAiEmbedder, @@ -198,6 +259,7 @@ class UserProvidedEmbedder(CamelBase): OllamaEmbedder, RestEmbedder, UserProvidedEmbedder, + CompositeEmbedder, ] diff --git a/meilisearch/models/index.py b/meilisearch/models/index.py index f23cb458..f83fc9bc 100644 --- a/meilisearch/models/index.py +++ b/meilisearch/models/index.py @@ -49,6 +49,18 @@ class TypoTolerance(CamelBase): min_word_size_for_typos: Optional[MinWordSizeForTypos] = None +class PrefixSearch(str, Enum): + INDEXING_TIME = "indexingTime" + """ + Calculate prefix search during indexing. This is the default behavior. + """ + + DISABLED = "disabled" + """ + Do not calculate prefix search. May speed up indexing, but will severely impact search result relevancy. + """ + + class ProximityPrecision(str, Enum): BY_WORD = "byWord" BY_ATTRIBUTE = "byAttribute" diff --git a/tests/conftest.py b/tests/conftest.py index 54e53e4e..207d086c 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -274,3 +274,20 @@ def new_embedders(): "default": UserProvidedEmbedder(dimensions=1).model_dump(by_alias=True), "open_ai": OpenAiEmbedder().model_dump(by_alias=True), } + + +@fixture +def enable_composite_embedders(): + requests.patch( + f"{common.BASE_URL}/experimental-features", + headers={"Authorization": f"Bearer {common.MASTER_KEY}"}, + json={"compositeEmbedders": True}, + timeout=10, + ) + yield + requests.patch( + f"{common.BASE_URL}/experimental-features", + headers={"Authorization": f"Bearer {common.MASTER_KEY}"}, + json={"compositeEmbedders": False}, + timeout=10, + ) diff --git a/tests/errors/test_communication_error_meilisearch.py b/tests/errors/test_communication_error_meilisearch.py index c2fcee7f..be67a673 100644 --- a/tests/errors/test_communication_error_meilisearch.py +++ b/tests/errors/test_communication_error_meilisearch.py @@ -17,3 +17,12 @@ def test_meilisearch_communication_error_host(mock_post): client = meilisearch.Client("http://wrongurl:1234", MASTER_KEY) with pytest.raises(MeilisearchCommunicationError): client.create_index("some_index") + + +@patch("requests.post") +def test_meilisearch_communication_error_no_protocol(mock_post): + mock_post.configure_mock(__name__="post") + mock_post.side_effect = requests.exceptions.InvalidSchema() + client = meilisearch.Client("localhost:7700", MASTER_KEY) + with pytest.raises(MeilisearchCommunicationError, match="no scheme/protocol supplied."): + client.create_index("some_index") diff --git a/tests/settings/test_settings_embedders.py b/tests/settings/test_settings_embedders.py index 5baf2e09..333678bc 100644 --- a/tests/settings/test_settings_embedders.py +++ b/tests/settings/test_settings_embedders.py @@ -1,6 +1,14 @@ # pylint: disable=redefined-outer-name -from meilisearch.models.embedders import OpenAiEmbedder, UserProvidedEmbedder +import pytest + +from meilisearch.models.embedders import ( + CompositeEmbedder, + HuggingFaceEmbedder, + OpenAiEmbedder, + PoolingType, + UserProvidedEmbedder, +) def test_get_default_embedders(empty_index): @@ -97,6 +105,7 @@ def test_huggingface_embedder_format(empty_index): assert embedders.embedders["huggingface"].distribution.mean == 0.5 assert embedders.embedders["huggingface"].distribution.sigma == 0.1 assert embedders.embedders["huggingface"].binary_quantized is False + assert embedders.embedders["huggingface"].pooling is PoolingType.USE_MODEL def test_ollama_embedder_format(empty_index): @@ -183,3 +192,43 @@ def test_user_provided_embedder_format(empty_index): assert embedders.embedders["user_provided"].distribution.mean == 0.5 assert embedders.embedders["user_provided"].distribution.sigma == 0.1 assert embedders.embedders["user_provided"].binary_quantized is False + + +@pytest.mark.usefixtures("enable_composite_embedders") +def test_composite_embedder_format(empty_index): + """Tests that CompositeEmbedder embedder has the required fields and proper format.""" + index = empty_index() + + embedder = HuggingFaceEmbedder().model_dump(by_alias=True, exclude_none=True) + + # create composite embedder + composite_embedder = { + "composite": { + "source": "composite", + "searchEmbedder": embedder, + "indexingEmbedder": embedder, + } + } + + response = index.update_embedders(composite_embedder) + update = index.wait_for_task(response.task_uid) + embedders = index.get_embedders() + assert update.status == "succeeded" + + assert embedders.embedders["composite"].source == "composite" + + # ensure serialization roundtrips nicely + assert isinstance(embedders.embedders["composite"], CompositeEmbedder) + assert isinstance(embedders.embedders["composite"].search_embedder, HuggingFaceEmbedder) + assert isinstance(embedders.embedders["composite"].indexing_embedder, HuggingFaceEmbedder) + + # ensure search_embedder has no document_template + assert getattr(embedders.embedders["composite"].search_embedder, "document_template") is None + assert ( + getattr( + embedders.embedders["composite"].search_embedder, + "document_template_max_bytes", + ) + is None + ) + assert getattr(embedders.embedders["composite"].indexing_embedder, "document_template") diff --git a/tests/settings/test_settings_facet_search.py b/tests/settings/test_settings_facet_search.py new file mode 100644 index 00000000..00ab6040 --- /dev/null +++ b/tests/settings/test_settings_facet_search.py @@ -0,0 +1,38 @@ +DEFAULT_FACET_SEARCH_SETTINGS_STATUS = True +ENABLED_FACET_SEARCH_SETTINGS_STATUS = True +DISABLED_FACET_SEARCH_SETTINGS_STATUS = False + + +def test_get_facet_search_settings(empty_index): + response = empty_index().get_facet_search_settings() + + assert DEFAULT_FACET_SEARCH_SETTINGS_STATUS == response + + +def test_update_facet_search_settings(empty_index): + index = empty_index() + + response = index.update_facet_search_settings(DISABLED_FACET_SEARCH_SETTINGS_STATUS) + index.wait_for_task(response.task_uid) + response = index.get_facet_search_settings() + assert DISABLED_FACET_SEARCH_SETTINGS_STATUS == response + + response = index.update_facet_search_settings(ENABLED_FACET_SEARCH_SETTINGS_STATUS) + index.wait_for_task(response.task_uid) + response = index.get_facet_search_settings() + assert ENABLED_FACET_SEARCH_SETTINGS_STATUS == response + + +def test_reset_facet_search_settings(empty_index): + index = empty_index() + + response = index.update_facet_search_settings(DISABLED_FACET_SEARCH_SETTINGS_STATUS) + index.wait_for_task(response.task_uid) + response = index.get_facet_search_settings() + assert DISABLED_FACET_SEARCH_SETTINGS_STATUS == response + assert DEFAULT_FACET_SEARCH_SETTINGS_STATUS != response + + response = index.reset_facet_search_settings() + index.wait_for_task(response.task_uid) + response = index.get_facet_search_settings() + assert DEFAULT_FACET_SEARCH_SETTINGS_STATUS == response diff --git a/tests/settings/test_settings_prefix_search.py b/tests/settings/test_settings_prefix_search.py new file mode 100644 index 00000000..eb1efa23 --- /dev/null +++ b/tests/settings/test_settings_prefix_search.py @@ -0,0 +1,38 @@ +from meilisearch.models.index import PrefixSearch + +DEFAULT_PREFIX_SEARCH_SETTINGS = PrefixSearch.INDEXING_TIME + + +def test_get_prefix_search(empty_index): + response = empty_index().get_prefix_search() + + assert DEFAULT_PREFIX_SEARCH_SETTINGS == response + + +def test_update_prefix_search(empty_index): + index = empty_index() + + response = index.update_prefix_search(PrefixSearch.DISABLED) + index.wait_for_task(response.task_uid) + response = index.get_prefix_search() + assert PrefixSearch.DISABLED == response + + response = index.update_prefix_search(PrefixSearch.INDEXING_TIME) + index.wait_for_task(response.task_uid) + response = index.get_prefix_search() + assert PrefixSearch.INDEXING_TIME == response + + +def test_reset_prefix_search(empty_index): + index = empty_index() + + response = index.update_prefix_search(PrefixSearch.DISABLED) + index.wait_for_task(response.task_uid) + response = index.get_prefix_search() + assert PrefixSearch.DISABLED == response + assert DEFAULT_PREFIX_SEARCH_SETTINGS != response + + response = index.reset_prefix_search() + index.wait_for_task(response.task_uid) + response = index.get_prefix_search() + assert DEFAULT_PREFIX_SEARCH_SETTINGS == response