mirror of
https://github.com/meilisearch/meilisearch.git
synced 2024-11-26 03:55:07 +08:00
gate the retrieveVectors parameter behind the vectors feature flag
This commit is contained in:
parent
0502b17501
commit
600e97d9dc
@ -110,14 +110,18 @@ pub async fn get_document(
|
|||||||
debug!(parameters = ?params, "Get document");
|
debug!(parameters = ?params, "Get document");
|
||||||
let index_uid = IndexUid::try_from(index_uid)?;
|
let index_uid = IndexUid::try_from(index_uid)?;
|
||||||
|
|
||||||
analytics.get_fetch_documents(
|
|
||||||
&DocumentFetchKind::PerDocumentId { retrieve_vectors: params.retrieve_vectors.0 },
|
|
||||||
&req,
|
|
||||||
);
|
|
||||||
|
|
||||||
let GetDocument { fields, retrieve_vectors } = params.into_inner();
|
let GetDocument { fields, retrieve_vectors } = params.into_inner();
|
||||||
let attributes_to_retrieve = fields.merge_star_and_none();
|
let attributes_to_retrieve = fields.merge_star_and_none();
|
||||||
|
|
||||||
|
let features = index_scheduler.features();
|
||||||
|
if retrieve_vectors.0 {
|
||||||
|
features.check_vector("Passing `retrieveVectors` as a parameter")?;
|
||||||
|
}
|
||||||
|
analytics.get_fetch_documents(
|
||||||
|
&DocumentFetchKind::PerDocumentId { retrieve_vectors: retrieve_vectors.0 },
|
||||||
|
&req,
|
||||||
|
);
|
||||||
|
|
||||||
let index = index_scheduler.index(&index_uid)?;
|
let index = index_scheduler.index(&index_uid)?;
|
||||||
let document =
|
let document =
|
||||||
retrieve_document(&index, &document_id, attributes_to_retrieve, retrieve_vectors.0)?;
|
retrieve_document(&index, &document_id, attributes_to_retrieve, retrieve_vectors.0)?;
|
||||||
@ -191,6 +195,11 @@ pub async fn documents_by_query_post(
|
|||||||
let body = body.into_inner();
|
let body = body.into_inner();
|
||||||
debug!(parameters = ?body, "Get documents POST");
|
debug!(parameters = ?body, "Get documents POST");
|
||||||
|
|
||||||
|
let features = index_scheduler.features();
|
||||||
|
if body.retrieve_vectors {
|
||||||
|
features.check_vector("Passing `retrieveVectors` as a parameter")?;
|
||||||
|
}
|
||||||
|
|
||||||
analytics.post_fetch_documents(
|
analytics.post_fetch_documents(
|
||||||
&DocumentFetchKind::Normal {
|
&DocumentFetchKind::Normal {
|
||||||
with_filter: body.filter.is_some(),
|
with_filter: body.filter.is_some(),
|
||||||
@ -215,6 +224,11 @@ pub async fn get_documents(
|
|||||||
|
|
||||||
let BrowseQueryGet { limit, offset, fields, retrieve_vectors, filter } = params.into_inner();
|
let BrowseQueryGet { limit, offset, fields, retrieve_vectors, filter } = params.into_inner();
|
||||||
|
|
||||||
|
let features = index_scheduler.features();
|
||||||
|
if retrieve_vectors.0 {
|
||||||
|
features.check_vector("Passing `retrieveVectors` as a parameter")?;
|
||||||
|
}
|
||||||
|
|
||||||
let filter = match filter {
|
let filter = match filter {
|
||||||
Some(f) => match serde_json::from_str(&f) {
|
Some(f) => match serde_json::from_str(&f) {
|
||||||
Ok(v) => Some(v),
|
Ok(v) => Some(v),
|
||||||
|
@ -290,11 +290,13 @@ pub fn search_kind(
|
|||||||
features: RoFeatures,
|
features: RoFeatures,
|
||||||
) -> Result<SearchKind, ResponseError> {
|
) -> Result<SearchKind, ResponseError> {
|
||||||
if query.vector.is_some() {
|
if query.vector.is_some() {
|
||||||
features.check_vector("Passing `vector` as a query parameter")?;
|
features.check_vector("Passing `vector` as a parameter")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
if query.hybrid.is_some() {
|
if query.hybrid.is_some() {
|
||||||
features.check_vector("Passing `hybrid` as a query parameter")?;
|
features.check_vector("Passing `hybrid` as a parameter")?;
|
||||||
|
}
|
||||||
|
if query.retrieve_vectors {
|
||||||
|
features.check_vector("Passing `retrieveVectors` as a parameter")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// regardless of anything, always do a keyword search when we don't have a vector and the query is whitespace or missing
|
// regardless of anything, always do a keyword search when we don't have a vector and the query is whitespace or missing
|
||||||
|
@ -800,6 +800,8 @@ async fn fetch_document_by_filter() {
|
|||||||
async fn retrieve_vectors() {
|
async fn retrieve_vectors() {
|
||||||
let server = Server::new().await;
|
let server = Server::new().await;
|
||||||
let index = server.index("doggo");
|
let index = server.index("doggo");
|
||||||
|
|
||||||
|
// GET ALL DOCUMENTS BY QUERY
|
||||||
let (response, _code) = index.get_all_documents_raw("?retrieveVectors=tamo").await;
|
let (response, _code) = index.get_all_documents_raw("?retrieveVectors=tamo").await;
|
||||||
snapshot!(json_string!(response), @r###"
|
snapshot!(json_string!(response), @r###"
|
||||||
{
|
{
|
||||||
@ -809,6 +811,38 @@ async fn retrieve_vectors() {
|
|||||||
"link": "https://docs.meilisearch.com/errors#invalid_document_retrieve_vectors"
|
"link": "https://docs.meilisearch.com/errors#invalid_document_retrieve_vectors"
|
||||||
}
|
}
|
||||||
"###);
|
"###);
|
||||||
|
let (response, _code) = index.get_all_documents_raw("?retrieveVectors=true").await;
|
||||||
|
snapshot!(json_string!(response), @r###"
|
||||||
|
{
|
||||||
|
"message": "Passing `retrieveVectors` as a parameter requires enabling the `vector store` experimental feature. See https://github.com/meilisearch/product/discussions/677",
|
||||||
|
"code": "feature_not_enabled",
|
||||||
|
"type": "invalid_request",
|
||||||
|
"link": "https://docs.meilisearch.com/errors#feature_not_enabled"
|
||||||
|
}
|
||||||
|
"###);
|
||||||
|
|
||||||
|
// FETCH ALL DOCUMENTS BY POST
|
||||||
|
let (response, _code) =
|
||||||
|
index.get_document_by_filter(json!({ "retrieveVectors": "tamo" })).await;
|
||||||
|
snapshot!(json_string!(response), @r###"
|
||||||
|
{
|
||||||
|
"message": "Invalid value type at `.retrieveVectors`: expected a boolean, but found a string: `\"tamo\"`",
|
||||||
|
"code": "invalid_document_retrieve_vectors",
|
||||||
|
"type": "invalid_request",
|
||||||
|
"link": "https://docs.meilisearch.com/errors#invalid_document_retrieve_vectors"
|
||||||
|
}
|
||||||
|
"###);
|
||||||
|
let (response, _code) = index.get_document_by_filter(json!({ "retrieveVectors": true })).await;
|
||||||
|
snapshot!(json_string!(response), @r###"
|
||||||
|
{
|
||||||
|
"message": "Passing `retrieveVectors` as a parameter requires enabling the `vector store` experimental feature. See https://github.com/meilisearch/product/discussions/677",
|
||||||
|
"code": "feature_not_enabled",
|
||||||
|
"type": "invalid_request",
|
||||||
|
"link": "https://docs.meilisearch.com/errors#feature_not_enabled"
|
||||||
|
}
|
||||||
|
"###);
|
||||||
|
|
||||||
|
// GET A SINGLE DOCUMENT
|
||||||
let (response, _code) = index.get_document(0, Some(json!({"retrieveVectors": "tamo"}))).await;
|
let (response, _code) = index.get_document(0, Some(json!({"retrieveVectors": "tamo"}))).await;
|
||||||
snapshot!(json_string!(response), @r###"
|
snapshot!(json_string!(response), @r###"
|
||||||
{
|
{
|
||||||
@ -818,4 +852,13 @@ async fn retrieve_vectors() {
|
|||||||
"link": "https://docs.meilisearch.com/errors#invalid_document_retrieve_vectors"
|
"link": "https://docs.meilisearch.com/errors#invalid_document_retrieve_vectors"
|
||||||
}
|
}
|
||||||
"###);
|
"###);
|
||||||
|
let (response, _code) = index.get_document(0, Some(json!({"retrieveVectors": true}))).await;
|
||||||
|
snapshot!(json_string!(response), @r###"
|
||||||
|
{
|
||||||
|
"message": "Passing `retrieveVectors` as a parameter requires enabling the `vector store` experimental feature. See https://github.com/meilisearch/product/discussions/677",
|
||||||
|
"code": "feature_not_enabled",
|
||||||
|
"type": "invalid_request",
|
||||||
|
"link": "https://docs.meilisearch.com/errors#feature_not_enabled"
|
||||||
|
}
|
||||||
|
"###);
|
||||||
}
|
}
|
||||||
|
@ -1290,21 +1290,38 @@ async fn experimental_feature_vector_store() {
|
|||||||
index.add_documents(json!(documents), None).await;
|
index.add_documents(json!(documents), None).await;
|
||||||
index.wait_task(0).await;
|
index.wait_task(0).await;
|
||||||
|
|
||||||
let (response, code) = index
|
index
|
||||||
.search_post(json!({
|
.search(json!({
|
||||||
"vector": [1.0, 2.0, 3.0],
|
"vector": [1.0, 2.0, 3.0],
|
||||||
"showRankingScore": true
|
"showRankingScore": true
|
||||||
}))
|
}), |response, code|{
|
||||||
|
meili_snap::snapshot!(code, @"400 Bad Request");
|
||||||
|
meili_snap::snapshot!(meili_snap::json_string!(response), @r###"
|
||||||
|
{
|
||||||
|
"message": "Passing `vector` as a parameter requires enabling the `vector store` experimental feature. See https://github.com/meilisearch/product/discussions/677",
|
||||||
|
"code": "feature_not_enabled",
|
||||||
|
"type": "invalid_request",
|
||||||
|
"link": "https://docs.meilisearch.com/errors#feature_not_enabled"
|
||||||
|
}
|
||||||
|
"###);
|
||||||
|
})
|
||||||
|
.await;
|
||||||
|
index
|
||||||
|
.search(json!({
|
||||||
|
"retrieveVectors": true,
|
||||||
|
"showRankingScore": true
|
||||||
|
}), |response, code|{
|
||||||
|
meili_snap::snapshot!(code, @"400 Bad Request");
|
||||||
|
meili_snap::snapshot!(meili_snap::json_string!(response), @r###"
|
||||||
|
{
|
||||||
|
"message": "Passing `retrieveVectors` as a parameter requires enabling the `vector store` experimental feature. See https://github.com/meilisearch/product/discussions/677",
|
||||||
|
"code": "feature_not_enabled",
|
||||||
|
"type": "invalid_request",
|
||||||
|
"link": "https://docs.meilisearch.com/errors#feature_not_enabled"
|
||||||
|
}
|
||||||
|
"###);
|
||||||
|
})
|
||||||
.await;
|
.await;
|
||||||
meili_snap::snapshot!(code, @"400 Bad Request");
|
|
||||||
meili_snap::snapshot!(meili_snap::json_string!(response), @r###"
|
|
||||||
{
|
|
||||||
"message": "Passing `vector` as a query parameter requires enabling the `vector store` experimental feature. See https://github.com/meilisearch/product/discussions/677",
|
|
||||||
"code": "feature_not_enabled",
|
|
||||||
"type": "invalid_request",
|
|
||||||
"link": "https://docs.meilisearch.com/errors#feature_not_enabled"
|
|
||||||
}
|
|
||||||
"###);
|
|
||||||
|
|
||||||
let (response, code) = server.set_features(json!({"vectorStore": true})).await;
|
let (response, code) = server.set_features(json!({"vectorStore": true})).await;
|
||||||
meili_snap::snapshot!(code, @"200 OK");
|
meili_snap::snapshot!(code, @"200 OK");
|
||||||
|
Loading…
Reference in New Issue
Block a user