From aff4b64265ea87f1f45dcb0151085dca273e504c Mon Sep 17 00:00:00 2001 From: ManyTheFish Date: Tue, 23 Aug 2022 15:15:03 +0200 Subject: [PATCH 1/5] Update dependencies --- Cargo.lock | 118 ++++++++++++++---------------------- meilisearch-auth/Cargo.toml | 4 +- meilisearch-http/Cargo.toml | 6 +- meilisearch-lib/Cargo.toml | 6 +- 4 files changed, 55 insertions(+), 79 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a6b73bde2..babbd0ab2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -285,9 +285,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.57" +version = "1.0.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc" +checksum = "1485d4d2cc45e7b201ee3767015c96faa5904387c9d87c6efdd0fb511f12d305" dependencies = [ "backtrace", ] @@ -644,9 +644,9 @@ dependencies = [ [[package]] name = "charabia" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ed19edcd98f5bf6572f48d6f5982d595cb8718e47c6f0066d942b280575ff02" +checksum = "d1234c5cd955fb67f2b111b43855a0eabdedc35d9fb4e6a9d24030050e89b779" dependencies = [ "character_converter", "cow-utils", @@ -654,7 +654,6 @@ dependencies = [ "fst", "jieba-rs", "lindera", - "lindera-core", "once_cell", "slice-group-by", "unicode-segmentation", @@ -672,24 +671,18 @@ dependencies = [ "once_cell", ] -[[package]] -name = "chunked_transfer" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff857943da45f546682664a79488be82e69e43c1a7a2307679ab9afb3a66d2e" - [[package]] name = "clap" -version = "3.1.18" +version = "3.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2dbdf4bdacb33466e854ce889eee8dfd5729abf7ccd7664d0a2d60cd384440b" +checksum = "29e724a68d9319343bb3328c9cc2dfde263f4b3142ee1059a9980580171c954b" dependencies = [ "atty", "bitflags", "clap_derive", "clap_lex", "indexmap", - "lazy_static", + "once_cell", "strsim", "termcolor", "textwrap", @@ -697,9 +690,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "3.1.18" +version = "3.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25320346e922cffe59c0bbc5410c8d8784509efb321488971081313cb1e1a33c" +checksum = "13547f7012c01ab4a0e8f8967730ada8f9fdf419e8b6c792788f39cf4e46eefa" dependencies = [ "heck", "proc-macro-error", @@ -710,9 +703,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.2.0" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a37c35f1112dad5e6e0b1adaff798507497a18fceeb30cceb3bae7d1427b9213" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" dependencies = [ "os_str_bytes", ] @@ -1126,8 +1119,8 @@ dependencies = [ [[package]] name = "filter-parser" -version = "0.32.0" -source = "git+https://github.com/meilisearch/milli.git?tag=v0.32.0#e1bc610d2722a8010216c45d5a32cbe3db18468e" +version = "0.33.0" +source = "git+https://github.com/meilisearch/milli.git?tag=v0.33.0#a79ff8a1a98a807f40f970131c8de2ab11560de5" dependencies = [ "nom", "nom_locate", @@ -1151,8 +1144,8 @@ dependencies = [ [[package]] name = "flatten-serde-json" -version = "0.32.0" -source = "git+https://github.com/meilisearch/milli.git?tag=v0.32.0#e1bc610d2722a8010216c45d5a32cbe3db18468e" +version = "0.33.0" +source = "git+https://github.com/meilisearch/milli.git?tag=v0.33.0#a79ff8a1a98a807f40f970131c8de2ab11560de5" dependencies = [ "serde_json", ] @@ -1438,8 +1431,8 @@ checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" [[package]] name = "heed" -version = "0.12.1" -source = "git+https://github.com/meilisearch/heed?tag=v0.12.1#fc017cf3394af737f92fd71e16f0499a78b79d65" +version = "0.12.2" +source = "git+https://github.com/meilisearch/heed?tag=v0.12.3#076971765f4ce09591ed7e19e45ea817580a53e3" dependencies = [ "byteorder", "heed-traits", @@ -1456,12 +1449,12 @@ dependencies = [ [[package]] name = "heed-traits" version = "0.7.0" -source = "git+https://github.com/meilisearch/heed?tag=v0.12.1#fc017cf3394af737f92fd71e16f0499a78b79d65" +source = "git+https://github.com/meilisearch/heed?tag=v0.12.3#076971765f4ce09591ed7e19e45ea817580a53e3" [[package]] name = "heed-types" version = "0.7.2" -source = "git+https://github.com/meilisearch/heed?tag=v0.12.1#fc017cf3394af737f92fd71e16f0499a78b79d65" +source = "git+https://github.com/meilisearch/heed?tag=v0.12.3#076971765f4ce09591ed7e19e45ea817580a53e3" dependencies = [ "bincode", "heed-traits", @@ -1664,8 +1657,8 @@ dependencies = [ [[package]] name = "json-depth-checker" -version = "0.32.0" -source = "git+https://github.com/meilisearch/milli.git?tag=v0.32.0#e1bc610d2722a8010216c45d5a32cbe3db18468e" +version = "0.33.0" +source = "git+https://github.com/meilisearch/milli.git?tag=v0.33.0#a79ff8a1a98a807f40f970131c8de2ab11560de5" dependencies = [ "serde_json", ] @@ -1752,9 +1745,9 @@ dependencies = [ [[package]] name = "lindera" -version = "0.13.5" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d1c5db4b1d12637aa316dc1adb215f78fe79025080af750942516c5ff17d1a0" +checksum = "4dddd011921cac0ec59025a6b6e26c2cd9af3adce384b56c753c31df71a07965" dependencies = [ "anyhow", "bincode", @@ -1774,9 +1767,9 @@ dependencies = [ [[package]] name = "lindera-cc-cedict-builder" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73a3509fb497340571d49feddb57e1db2ce5248c4d449f2548d0ee8cb745eb1e" +checksum = "584491a91b758f92ef3202aaf969d837522f2c11390c4de0049a356d63bc0b0f" dependencies = [ "anyhow", "bincode", @@ -1794,9 +1787,9 @@ dependencies = [ [[package]] name = "lindera-core" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20d1b2c085393aed58625d741beca69410e1143fc35bc67ebc35c9885f9f74" +checksum = "c726ee1bf3282621a802d50f5e03d3f88aae41456815e1d0cb2271a538ff83ec" dependencies = [ "anyhow", "bincode", @@ -1810,9 +1803,9 @@ dependencies = [ [[package]] name = "lindera-decompress" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b96b8050cded13927a99bcb8cbb0987f89fc8f35429fc153b4bc05ddc7a53a44" +checksum = "6f9df38ea9310a1256cdee64ff0ebe3f17c49314e3176e53d2213371729d6744" dependencies = [ "anyhow", "lzma-rs", @@ -1821,9 +1814,9 @@ dependencies = [ [[package]] name = "lindera-dictionary" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5abe3dddc22303402957edb4472ab0c996e0d93b3b00643de3bee8b28c2f9297" +checksum = "0a525b654642ff9f27927c5abba33f4c651e984b54a65e4f787c0b8c8e22e4a6" dependencies = [ "anyhow", "bincode", @@ -1833,9 +1826,9 @@ dependencies = [ [[package]] name = "lindera-ipadic" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8f4c111f6ad9eb9e015d02061af2ed36fc0255f29359294415c7c2f1ea5b5b6" +checksum = "4797e016fc7dc0709ddb8c31da3b9e923e33e14043a4ff58431dd9c447ffacd2" dependencies = [ "bincode", "byteorder", @@ -1845,14 +1838,13 @@ dependencies = [ "lindera-ipadic-builder", "once_cell", "tar", - "ureq", ] [[package]] name = "lindera-ipadic-builder" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2b9893f22a4a7511ac70ff7d96cda9b8d7259b7d7121784183c73bc593ce6e7" +checksum = "9bd3ecfb07e8810f5ba313fa836804b66120f0ea76c2d93948c2ddcf4f81fd90" dependencies = [ "anyhow", "bincode", @@ -1870,9 +1862,9 @@ dependencies = [ [[package]] name = "lindera-ko-dic-builder" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14282600ebfe7ab6fd4f3042143024ff9d74c09d58fd983d0c587839cf940d4a" +checksum = "fc86f26560ea69e91413eecc078d8e13f39b3c1fdc5a242d79d7622f6fab3a83" dependencies = [ "anyhow", "bincode", @@ -1890,9 +1882,9 @@ dependencies = [ [[package]] name = "lindera-unidic-builder" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b20825d46c95854e47c532c3e548dfec07c8f187c1ed89383cb6c35790338088" +checksum = "05c1bb8b7d38ffec7d949ee2c603b6ef96dfa7cf4937e91bad295a2d2b267b82" dependencies = [ "anyhow", "bincode", @@ -2203,8 +2195,8 @@ dependencies = [ [[package]] name = "milli" -version = "0.32.0" -source = "git+https://github.com/meilisearch/milli.git?tag=v0.32.0#e1bc610d2722a8010216c45d5a32cbe3db18468e" +version = "0.33.0" +source = "git+https://github.com/meilisearch/milli.git?tag=v0.33.0#a79ff8a1a98a807f40f970131c8de2ab11560de5" dependencies = [ "bimap", "bincode", @@ -3133,9 +3125,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.137" +version = "1.0.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" +checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860" dependencies = [ "serde_derive", ] @@ -3151,9 +3143,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.137" +version = "1.0.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" +checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00" dependencies = [ "proc-macro2 1.0.39", "quote 1.0.18", @@ -3162,9 +3154,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.81" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" +checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44" dependencies = [ "indexmap", "itoa 1.0.2", @@ -3669,22 +3661,6 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" -[[package]] -name = "ureq" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9399fa2f927a3d327187cbd201480cee55bee6ac5d3c77dd27f0c6814cff16d5" -dependencies = [ - "base64", - "chunked_transfer", - "log", - "once_cell", - "rustls", - "url", - "webpki", - "webpki-roots", -] - [[package]] name = "url" version = "2.2.2" diff --git a/meilisearch-auth/Cargo.toml b/meilisearch-auth/Cargo.toml index c87bf8e30..4504180b4 100644 --- a/meilisearch-auth/Cargo.toml +++ b/meilisearch-auth/Cargo.toml @@ -7,10 +7,10 @@ edition = "2021" enum-iterator = "0.7.0" hmac = "0.12.1" meilisearch-types = { path = "../meilisearch-types" } -milli = { git = "https://github.com/meilisearch/milli.git", tag = "v0.32.0" } +milli = { git = "https://github.com/meilisearch/milli.git", tag = "v0.33.0" } rand = "0.8.4" serde = { version = "1.0.136", features = ["derive"] } -serde_json = { version = "1.0.79", features = ["preserve_order"] } +serde_json = { version = "1.0.85", features = ["preserve_order"] } sha2 = "0.10.2" thiserror = "1.0.30" time = { version = "0.3.7", features = ["serde-well-known", "formatting", "parsing", "macros"] } diff --git a/meilisearch-http/Cargo.toml b/meilisearch-http/Cargo.toml index 4eee232e3..a8f4e0f2a 100644 --- a/meilisearch-http/Cargo.toml +++ b/meilisearch-http/Cargo.toml @@ -11,7 +11,7 @@ name = "meilisearch" path = "src/main.rs" [build-dependencies] -anyhow = { version = "1.0.56", optional = true } +anyhow = { version = "1.0.62", optional = true } cargo_toml = { version = "0.11.4", optional = true } hex = { version = "0.4.3", optional = true } reqwest = { version = "0.11.9", features = ["blocking", "rustls-tls"], default-features = false, optional = true } @@ -25,7 +25,7 @@ zip = { version = "0.5.13", optional = true } actix-cors = "0.6.1" actix-web = { version = "4.0.1", default-features = false, features = ["macros", "compress-brotli", "compress-gzip", "cookies", "rustls"] } actix-web-static-files = { git = "https://github.com/kilork/actix-web-static-files.git", rev = "2d3b6160", optional = true } -anyhow = { version = "1.0.56", features = ["backtrace"] } +anyhow = { version = "1.0.62", features = ["backtrace"] } async-stream = "0.3.3" async-trait = "0.1.52" bstr = "0.2.17" @@ -64,7 +64,7 @@ rustls-pemfile = "0.3.0" segment = { version = "0.2.0", optional = true } serde = { version = "1.0.136", features = ["derive"] } serde-cs = "0.2.3" -serde_json = { version = "1.0.79", features = ["preserve_order"] } +serde_json = { version = "1.0.85", features = ["preserve_order"] } sha2 = "0.10.2" siphasher = "0.3.10" slice-group-by = "0.3.0" diff --git a/meilisearch-lib/Cargo.toml b/meilisearch-lib/Cargo.toml index e44a674a6..74c46979e 100644 --- a/meilisearch-lib/Cargo.toml +++ b/meilisearch-lib/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" [dependencies] actix-web = { version = "4.0.1", default-features = false } -anyhow = { version = "1.0.56", features = ["backtrace"] } +anyhow = { version = "1.0.62", features = ["backtrace"] } async-stream = "0.3.3" async-trait = "0.1.52" atomic_refcell = "0.1.8" @@ -28,7 +28,7 @@ lazy_static = "1.4.0" log = "0.4.14" meilisearch-auth = { path = "../meilisearch-auth" } meilisearch-types = { path = "../meilisearch-types" } -milli = { git = "https://github.com/meilisearch/milli.git", tag = "v0.32.0" } +milli = { git = "https://github.com/meilisearch/milli.git", tag = "v0.33.0" } mime = "0.3.16" num_cpus = "1.13.1" obkv = "0.2.0" @@ -43,7 +43,7 @@ reqwest = { version = "0.11.9", features = ["json", "rustls-tls"], default-featu roaring = "0.9.0" rustls = "0.20.4" serde = { version = "1.0.136", features = ["derive"] } -serde_json = { version = "1.0.79", features = ["preserve_order"] } +serde_json = { version = "1.0.85", features = ["preserve_order"] } siphasher = "0.3.10" slice-group-by = "0.3.0" sysinfo = "0.23.5" From 5e206ee84bf329b6084adcf3b5ac81bfca30de56 Mon Sep 17 00:00:00 2001 From: ManyTheFish Date: Tue, 23 Aug 2022 15:07:54 +0200 Subject: [PATCH 2/5] Classify InvalidLmdbOpenOptions as an Internal error --- meilisearch-lib/src/error.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/meilisearch-lib/src/error.rs b/meilisearch-lib/src/error.rs index 168f2f88b..16111a191 100644 --- a/meilisearch-lib/src/error.rs +++ b/meilisearch-lib/src/error.rs @@ -24,6 +24,7 @@ impl ErrorCode for MilliError<'_> { match error { // TODO: wait for spec for new error codes. UserError::SerdeJson(_) + | UserError::InvalidLmdbOpenOptions | UserError::DocumentLimitReached | UserError::AccessingSoftDeletedDocument { .. } | UserError::UnknownInternalDocumentId { .. } => Code::Internal, From e2af8dccb850c9359c28d64365cb415a2b910eae Mon Sep 17 00:00:00 2001 From: ManyTheFish Date: Tue, 23 Aug 2022 16:38:39 +0200 Subject: [PATCH 3/5] Fix filter tests --- meilisearch-http/tests/search/errors.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meilisearch-http/tests/search/errors.rs b/meilisearch-http/tests/search/errors.rs index 98da0495a..6b5569b58 100644 --- a/meilisearch-http/tests/search/errors.rs +++ b/meilisearch-http/tests/search/errors.rs @@ -74,7 +74,7 @@ async fn filter_invalid_syntax_object() { index.wait_task(1).await; let expected_response = json!({ - "message": "Was expecting an operation `=`, `!=`, `>=`, `>`, `<=`, `<`, `TO` or `_geoRadius` at `title & Glass`.\n1:14 title & Glass", + "message": "Was expecting an operation `=`, `!=`, `>=`, `>`, `<=`, `<`, `TO`, `EXISTS`, `NOT EXISTS`, or `_geoRadius` at `title & Glass`.\n1:14 title & Glass", "code": "invalid_filter", "type": "invalid_request", "link": "https://docs.meilisearch.com/errors#invalid_filter" @@ -101,7 +101,7 @@ async fn filter_invalid_syntax_array() { index.wait_task(1).await; let expected_response = json!({ - "message": "Was expecting an operation `=`, `!=`, `>=`, `>`, `<=`, `<`, `TO` or `_geoRadius` at `title & Glass`.\n1:14 title & Glass", + "message": "Was expecting an operation `=`, `!=`, `>=`, `>`, `<=`, `<`, `TO`, `EXISTS`, `NOT EXISTS`, or `_geoRadius` at `title & Glass`.\n1:14 title & Glass", "code": "invalid_filter", "type": "invalid_request", "link": "https://docs.meilisearch.com/errors#invalid_filter" From c9bb111ef381f33c3dd2f5df9aa5900f7c64cd23 Mon Sep 17 00:00:00 2001 From: ManyTheFish Date: Tue, 23 Aug 2022 16:30:56 +0200 Subject: [PATCH 4/5] Implement all and last matching strategy --- .../src/analytics/segment_analytics.rs | 12 ++++++++ meilisearch-http/src/routes/indexes/search.rs | 7 +++-- meilisearch-lib/src/index/mod.rs | 2 +- meilisearch-lib/src/index/search.rs | 30 ++++++++++++++++++- meilisearch-lib/src/index_controller/mod.rs | 1 + 5 files changed, 48 insertions(+), 4 deletions(-) diff --git a/meilisearch-http/src/analytics/segment_analytics.rs b/meilisearch-http/src/analytics/segment_analytics.rs index b04d814aa..f0dfd0fab 100644 --- a/meilisearch-http/src/analytics/segment_analytics.rs +++ b/meilisearch-http/src/analytics/segment_analytics.rs @@ -366,6 +366,9 @@ pub struct SearchAggregator { // The maximum number of terms in a q request max_terms_number: usize, + // everytime a search is done, we increment the counter linked to the used settings + matching_strategy: HashMap, + // pagination max_limit: usize, max_offset: usize, @@ -423,6 +426,9 @@ impl SearchAggregator { ret.max_terms_number = q.split_whitespace().count(); } + ret.matching_strategy + .insert(format!("{:?}", query.matching_strategy), 1); + ret.max_limit = query.limit; ret.max_offset = query.offset.unwrap_or_default(); @@ -476,6 +482,11 @@ impl SearchAggregator { } // q self.max_terms_number = self.max_terms_number.max(other.max_terms_number); + + for (key, value) in other.matching_strategy.into_iter() { + let matching_strategy = self.matching_strategy.entry(key).or_insert(0); + *matching_strategy = matching_strategy.saturating_add(value); + } // pagination self.max_limit = self.max_limit.max(other.max_limit); self.max_offset = self.max_offset.max(other.max_offset); @@ -517,6 +528,7 @@ impl SearchAggregator { }, "q": { "max_terms_number": self.max_terms_number, + "most_used_matching_strategy": self.matching_strategy.iter().max_by_key(|(_, v)| *v).map(|(k, _)| json!(k)).unwrap_or_else(|| json!(null)), }, "pagination": { "max_limit": self.max_limit, diff --git a/meilisearch-http/src/routes/indexes/search.rs b/meilisearch-http/src/routes/indexes/search.rs index 62bd65e14..973d5eb6e 100644 --- a/meilisearch-http/src/routes/indexes/search.rs +++ b/meilisearch-http/src/routes/indexes/search.rs @@ -2,8 +2,8 @@ use actix_web::{web, HttpRequest, HttpResponse}; use log::debug; use meilisearch_auth::IndexSearchRules; use meilisearch_lib::index::{ - SearchQuery, DEFAULT_CROP_LENGTH, DEFAULT_CROP_MARKER, DEFAULT_HIGHLIGHT_POST_TAG, - DEFAULT_HIGHLIGHT_PRE_TAG, DEFAULT_SEARCH_LIMIT, + MatchingStrategy, SearchQuery, DEFAULT_CROP_LENGTH, DEFAULT_CROP_MARKER, + DEFAULT_HIGHLIGHT_POST_TAG, DEFAULT_HIGHLIGHT_PRE_TAG, DEFAULT_SEARCH_LIMIT, }; use meilisearch_lib::MeiliSearch; use meilisearch_types::error::ResponseError; @@ -45,6 +45,8 @@ pub struct SearchQueryGet { highlight_post_tag: String, #[serde(default = "DEFAULT_CROP_MARKER")] crop_marker: String, + #[serde(default)] + matching_strategy: MatchingStrategy, } impl From for SearchQuery { @@ -76,6 +78,7 @@ impl From for SearchQuery { highlight_pre_tag: other.highlight_pre_tag, highlight_post_tag: other.highlight_post_tag, crop_marker: other.crop_marker, + matching_strategy: other.matching_strategy, } } } diff --git a/meilisearch-lib/src/index/mod.rs b/meilisearch-lib/src/index/mod.rs index 28d6e0222..98c25366d 100644 --- a/meilisearch-lib/src/index/mod.rs +++ b/meilisearch-lib/src/index/mod.rs @@ -1,5 +1,5 @@ pub use search::{ - SearchQuery, SearchResult, DEFAULT_CROP_LENGTH, DEFAULT_CROP_MARKER, + MatchingStrategy, SearchQuery, SearchResult, DEFAULT_CROP_LENGTH, DEFAULT_CROP_MARKER, DEFAULT_HIGHLIGHT_POST_TAG, DEFAULT_HIGHLIGHT_PRE_TAG, DEFAULT_SEARCH_LIMIT, }; pub use updates::{apply_settings_to_builder, Checked, Facets, Settings, Unchecked}; diff --git a/meilisearch-lib/src/index/search.rs b/meilisearch-lib/src/index/search.rs index 97f68b524..5c2882f21 100644 --- a/meilisearch-lib/src/index/search.rs +++ b/meilisearch-lib/src/index/search.rs @@ -7,7 +7,7 @@ use either::Either; use milli::tokenizer::TokenizerBuilder; use milli::{ AscDesc, FieldId, FieldsIdsMap, Filter, FormatOptions, MatchBounds, MatcherBuilder, SortError, - DEFAULT_VALUES_PER_FACET, + TermsMatchingStrategy, DEFAULT_VALUES_PER_FACET, }; use regex::Regex; use serde::{Deserialize, Serialize}; @@ -55,6 +55,32 @@ pub struct SearchQuery { pub highlight_post_tag: String, #[serde(default = "DEFAULT_CROP_MARKER")] pub crop_marker: String, + #[serde(default)] + pub matching_strategy: MatchingStrategy, +} + +#[derive(Deserialize, Debug, Clone, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub enum MatchingStrategy { + // remove last word first + Last, + // all words are mandatory + All, +} + +impl Default for MatchingStrategy { + fn default() -> Self { + Self::Last + } +} + +impl From for TermsMatchingStrategy { + fn from(other: MatchingStrategy) -> Self { + match other { + MatchingStrategy::Last => Self::Last, + MatchingStrategy::All => Self::All, + } + } } #[derive(Debug, Clone, Serialize, PartialEq)] @@ -91,6 +117,8 @@ impl Index { search.query(query); } + search.terms_matching_strategy(query.matching_strategy.into()); + let max_total_hits = self .pagination_max_total_hits(&rtxn)? .unwrap_or(DEFAULT_PAGINATION_MAX_TOTAL_HITS); diff --git a/meilisearch-lib/src/index_controller/mod.rs b/meilisearch-lib/src/index_controller/mod.rs index 3002bfbdd..be855300b 100644 --- a/meilisearch-lib/src/index_controller/mod.rs +++ b/meilisearch-lib/src/index_controller/mod.rs @@ -704,6 +704,7 @@ mod test { highlight_pre_tag: DEFAULT_HIGHLIGHT_PRE_TAG(), highlight_post_tag: DEFAULT_HIGHLIGHT_POST_TAG(), crop_marker: DEFAULT_CROP_MARKER(), + matching_strategy: Default::default(), }; let result = SearchResult { From 651a22b1ed0baca7ae9427abbe69bfc6ce718ced Mon Sep 17 00:00:00 2001 From: Many the fish Date: Tue, 23 Aug 2022 18:11:20 +0200 Subject: [PATCH 5/5] Enhance enum documentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Clément Renault --- meilisearch-lib/src/index/search.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meilisearch-lib/src/index/search.rs b/meilisearch-lib/src/index/search.rs index 5c2882f21..57171d529 100644 --- a/meilisearch-lib/src/index/search.rs +++ b/meilisearch-lib/src/index/search.rs @@ -62,9 +62,9 @@ pub struct SearchQuery { #[derive(Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub enum MatchingStrategy { - // remove last word first + /// Remove query words from last to first Last, - // all words are mandatory + /// All query words are mandatory All, }