mirror of
https://github.com/meilisearch/meilisearch.git
synced 2024-11-23 02:27:40 +08:00
Fix error checking
This commit is contained in:
parent
93dcbf598d
commit
f3f3944469
@ -463,7 +463,7 @@ impl fmt::Display for deserr_codes::InvalidSearchSemanticRatio {
|
|||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
write!(
|
write!(
|
||||||
f,
|
f,
|
||||||
"the value of `semanticRatio` is invalid, expected a value between `0.0` and `1.0`."
|
"the value of `semanticRatio` is invalid, expected a float between `0.0` and `1.0`."
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -78,7 +78,28 @@ pub struct SearchQueryGet {
|
|||||||
#[deserr(default, error = DeserrQueryParamError<InvalidEmbedder>)]
|
#[deserr(default, error = DeserrQueryParamError<InvalidEmbedder>)]
|
||||||
pub hybrid_embedder: Option<String>,
|
pub hybrid_embedder: Option<String>,
|
||||||
#[deserr(default, error = DeserrQueryParamError<InvalidSearchSemanticRatio>)]
|
#[deserr(default, error = DeserrQueryParamError<InvalidSearchSemanticRatio>)]
|
||||||
pub hybrid_semantic_ratio: Option<SemanticRatio>,
|
pub hybrid_semantic_ratio: Option<SemanticRatioGet>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Copy, Default, PartialEq, deserr::Deserr)]
|
||||||
|
#[deserr(try_from(String) = TryFrom::try_from -> InvalidSearchSemanticRatio)]
|
||||||
|
pub struct SemanticRatioGet(SemanticRatio);
|
||||||
|
|
||||||
|
impl std::convert::TryFrom<String> for SemanticRatioGet {
|
||||||
|
type Error = InvalidSearchSemanticRatio;
|
||||||
|
|
||||||
|
fn try_from(s: String) -> Result<Self, Self::Error> {
|
||||||
|
let f: f32 = s.parse().map_err(|_| InvalidSearchSemanticRatio)?;
|
||||||
|
Ok(SemanticRatioGet(SemanticRatio::try_from(f)?))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl std::ops::Deref for SemanticRatioGet {
|
||||||
|
type Target = SemanticRatio;
|
||||||
|
|
||||||
|
fn deref(&self) -> &Self::Target {
|
||||||
|
&self.0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<SearchQueryGet> for SearchQuery {
|
impl From<SearchQueryGet> for SearchQuery {
|
||||||
@ -93,13 +114,15 @@ impl From<SearchQueryGet> for SearchQuery {
|
|||||||
|
|
||||||
let hybrid = match (other.hybrid_embedder, other.hybrid_semantic_ratio) {
|
let hybrid = match (other.hybrid_embedder, other.hybrid_semantic_ratio) {
|
||||||
(None, None) => None,
|
(None, None) => None,
|
||||||
(None, Some(semantic_ratio)) => Some(HybridQuery { semantic_ratio, embedder: None }),
|
(None, Some(semantic_ratio)) => {
|
||||||
|
Some(HybridQuery { semantic_ratio: *semantic_ratio, embedder: None })
|
||||||
|
}
|
||||||
(Some(embedder), None) => Some(HybridQuery {
|
(Some(embedder), None) => Some(HybridQuery {
|
||||||
semantic_ratio: DEFAULT_SEMANTIC_RATIO(),
|
semantic_ratio: DEFAULT_SEMANTIC_RATIO(),
|
||||||
embedder: Some(embedder),
|
embedder: Some(embedder),
|
||||||
}),
|
}),
|
||||||
(Some(embedder), Some(semantic_ratio)) => {
|
(Some(embedder), Some(semantic_ratio)) => {
|
||||||
Some(HybridQuery { semantic_ratio, embedder: Some(embedder) })
|
Some(HybridQuery { semantic_ratio: *semantic_ratio, embedder: Some(embedder) })
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -100,6 +100,7 @@ pub struct HybridQuery {
|
|||||||
#[derive(Debug, Clone, Copy, Default, PartialEq, Deserr)]
|
#[derive(Debug, Clone, Copy, Default, PartialEq, Deserr)]
|
||||||
#[deserr(try_from(f32) = TryFrom::try_from -> InvalidSearchSemanticRatio)]
|
#[deserr(try_from(f32) = TryFrom::try_from -> InvalidSearchSemanticRatio)]
|
||||||
pub struct SemanticRatio(f32);
|
pub struct SemanticRatio(f32);
|
||||||
|
|
||||||
impl std::convert::TryFrom<f32> for SemanticRatio {
|
impl std::convert::TryFrom<f32> for SemanticRatio {
|
||||||
type Error = InvalidSearchSemanticRatio;
|
type Error = InvalidSearchSemanticRatio;
|
||||||
|
|
||||||
@ -383,7 +384,9 @@ fn prepare_search<'t>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Some(ref query) = query.q {
|
if let Some(ref query) = query.q {
|
||||||
|
// if !matches!(query.hybrid, query.) {
|
||||||
search.query(query);
|
search.query(query);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(ref searchable) = query.attributes_to_search_on {
|
if let Some(ref searchable) = query.attributes_to_search_on {
|
||||||
|
@ -68,7 +68,7 @@ async fn simple_search() {
|
|||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
snapshot!(code, @"200 OK");
|
snapshot!(code, @"200 OK");
|
||||||
snapshot!(response["hits"], @r###"[{"title":"Captain Marvel","desc":"a Shazam ersatz","id":"3","_vectors":{"default":[2.0,3.0]},"_semanticScore":0.99029034},{"title":"Captain Planet","desc":"He's not part of the Marvel Cinematic Universe","id":"2","_vectors":{"default":[1.0,2.0]},"_semanticScore":0.97434163},{"title":"Shazam!","desc":"a Captain Marvel ersatz","id":"1","_vectors":{"default":[1.0,3.0]},"_semanticScore":0.9472136}]"###);
|
snapshot!(response["hits"], @r###"[{"title":"Captain Planet","desc":"He's not part of the Marvel Cinematic Universe","id":"2","_vectors":{"default":[1.0,2.0]},"_semanticScore":0.97434163},{"title":"Captain Marvel","desc":"a Shazam ersatz","id":"3","_vectors":{"default":[2.0,3.0]},"_semanticScore":0.99029034},{"title":"Shazam!","desc":"a Captain Marvel ersatz","id":"1","_vectors":{"default":[1.0,3.0]},"_semanticScore":0.9472136}]"###);
|
||||||
|
|
||||||
let (response, code) = index
|
let (response, code) = index
|
||||||
.search_post(
|
.search_post(
|
||||||
@ -92,7 +92,7 @@ async fn invalid_semantic_ratio() {
|
|||||||
snapshot!(code, @"400 Bad Request");
|
snapshot!(code, @"400 Bad Request");
|
||||||
snapshot!(response, @r###"
|
snapshot!(response, @r###"
|
||||||
{
|
{
|
||||||
"message": "Invalid value at `.hybrid.semanticRatio`: the value of `semanticRatio` is invalid, expected a value between `0.0` and `1.0`.",
|
"message": "Invalid value at `.hybrid.semanticRatio`: the value of `semanticRatio` is invalid, expected a float between `0.0` and `1.0`.",
|
||||||
"code": "invalid_search_semantic_ratio",
|
"code": "invalid_search_semantic_ratio",
|
||||||
"type": "invalid_request",
|
"type": "invalid_request",
|
||||||
"link": "https://docs.meilisearch.com/errors#invalid_search_semantic_ratio"
|
"link": "https://docs.meilisearch.com/errors#invalid_search_semantic_ratio"
|
||||||
@ -107,7 +107,7 @@ async fn invalid_semantic_ratio() {
|
|||||||
snapshot!(code, @"400 Bad Request");
|
snapshot!(code, @"400 Bad Request");
|
||||||
snapshot!(response, @r###"
|
snapshot!(response, @r###"
|
||||||
{
|
{
|
||||||
"message": "Invalid value at `.hybrid.semanticRatio`: the value of `semanticRatio` is invalid, expected a value between `0.0` and `1.0`.",
|
"message": "Invalid value at `.hybrid.semanticRatio`: the value of `semanticRatio` is invalid, expected a float between `0.0` and `1.0`.",
|
||||||
"code": "invalid_search_semantic_ratio",
|
"code": "invalid_search_semantic_ratio",
|
||||||
"type": "invalid_request",
|
"type": "invalid_request",
|
||||||
"link": "https://docs.meilisearch.com/errors#invalid_search_semantic_ratio"
|
"link": "https://docs.meilisearch.com/errors#invalid_search_semantic_ratio"
|
||||||
@ -125,7 +125,7 @@ async fn invalid_semantic_ratio() {
|
|||||||
snapshot!(code, @"400 Bad Request");
|
snapshot!(code, @"400 Bad Request");
|
||||||
snapshot!(response, @r###"
|
snapshot!(response, @r###"
|
||||||
{
|
{
|
||||||
"message": "Invalid value type for parameter `hybridSemanticRatio`: expected a string, but found a string: `1.2`",
|
"message": "Invalid value in parameter `hybridSemanticRatio`: the value of `semanticRatio` is invalid, expected a float between `0.0` and `1.0`.",
|
||||||
"code": "invalid_search_semantic_ratio",
|
"code": "invalid_search_semantic_ratio",
|
||||||
"type": "invalid_request",
|
"type": "invalid_request",
|
||||||
"link": "https://docs.meilisearch.com/errors#invalid_search_semantic_ratio"
|
"link": "https://docs.meilisearch.com/errors#invalid_search_semantic_ratio"
|
||||||
@ -143,7 +143,7 @@ async fn invalid_semantic_ratio() {
|
|||||||
snapshot!(code, @"400 Bad Request");
|
snapshot!(code, @"400 Bad Request");
|
||||||
snapshot!(response, @r###"
|
snapshot!(response, @r###"
|
||||||
{
|
{
|
||||||
"message": "Invalid value type for parameter `hybridSemanticRatio`: expected a string, but found a string: `-0.2`",
|
"message": "Invalid value in parameter `hybridSemanticRatio`: the value of `semanticRatio` is invalid, expected a float between `0.0` and `1.0`.",
|
||||||
"code": "invalid_search_semantic_ratio",
|
"code": "invalid_search_semantic_ratio",
|
||||||
"type": "invalid_request",
|
"type": "invalid_request",
|
||||||
"link": "https://docs.meilisearch.com/errors#invalid_search_semantic_ratio"
|
"link": "https://docs.meilisearch.com/errors#invalid_search_semantic_ratio"
|
||||||
|
Loading…
Reference in New Issue
Block a user