Skip to content

Quotation marks in primary silently fails entire index.add_document call. #511

Open
workbackai/meilisearch-rust
#1
@gibbz00

Description

@gibbz00

Source

// lib.rs
#![allow(dead_code)]

use meilisearch_sdk::{indexes::Index, Client};
use serde::Serialize;

#[derive(Serialize)]
struct SimpleStruct<'a> {
    id: &'a str,
    value: usize,
}

const NO_QUOTE: SimpleStruct = SimpleStruct {
    id: "test",
    value: 1,
};
const WITH_QUOTE: SimpleStruct = SimpleStruct {
    id: "te'st",
    value: 2,
};

#[tokio::test]
async fn independently() {
    let index = index("test_1");
    add_documents(&index, &[NO_QUOTE]).await;
    assert_eq!(1, get_document_count(&index).await); // passed

    add_documents(&index, &[WITH_QUOTE]).await;
    assert_eq!(2, get_document_count(&index).await); // failed
}

#[tokio::test]
async fn together() {
    let index = index("test_2");
    add_documents(&index, &[NO_QUOTE, WITH_QUOTE]).await;
    assert!(get_document_count(&index).await > 0) // failed
}

fn index(namespace: &str) -> Index {
    Client::new(
        "http://127.0.0.1:7700",
        Some("xxx"),
    )
    .index(namespace)
}

async fn add_documents(index: &Index, simple_struct: &[SimpleStruct<'_>]) {
    index
        .add_documents(simple_struct, None)
        .await
        .unwrap()
        .wait_for_completion(&index.client, None, None)
        .await
        .unwrap();
}

async fn get_document_count(index: &Index) -> usize {
    index.get_stats().await.unwrap().number_of_documents
}
# Cargo.toml
[package]
name = "meilisearch_pk"
version = "0.1.0"
edition = "2021"

[dependencies]
tokio = { version = "1", features = ["full"] }
serde = { version = "1.0", features = ["derive"] }
meilisearch-sdk = "0.24"

Cargo test

[~/tests/meilisearch_pk] $ cargo test
   Compiling meilisearch_pk v0.1.0 (/home/gibbz/tests/meilisearch_pk)
    Finished test [unoptimized + debuginfo] target(s) in 2.03s
     Running unittests src/lib.rs (target/debug/deps/meilisearch_pk-5f2bfef2460e87ff)

running 2 tests
test together ... FAILED
test independently ... FAILED

failures:

---- together stdout ----
thread 'together' panicked at 'assertion failed: get_document_count(&index).await > 0', src/lib.rs:35:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

---- independently stdout ----
thread 'independently' panicked at 'assertion failed: `(left == right)`
  left: `2`,
 right: `1`', src/lib.rs:28:5


failures:
    independently
    together

test result: FAILED. 0 passed; 2 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.12s

Log

[2023-08-17T14:56:41Z INFO  actix_web::middleware::logger] 127.0.0.1 "POST /indexes/test_2/documents HTTP/1.1" 202 136 "-" "Meilisearch Rust (v0.24.1)" 0.000683
[2023-08-17T14:56:41Z INFO  actix_web::middleware::logger] 127.0.0.1 "POST /indexes/test_1/documents HTTP/1.1" 202 136 "-" "Meilisearch Rust (v0.24.1)" 0.000921
[2023-08-17T14:56:41Z INFO  milli::update::index_documents::enrich] Primary key was not specified in index. Inferred to 'id'
[2023-08-17T14:56:41Z INFO  index_scheduler] A batch of tasks was successfully completed.
[2023-08-17T14:56:41Z INFO  actix_web::middleware::logger] 127.0.0.1 "GET /tasks/1112 HTTP/1.1" 200 302 "-" "Meilisearch Rust (v0.24.1)" 0.000268
[2023-08-17T14:56:41Z INFO  actix_web::middleware::logger] 127.0.0.1 "GET /tasks/1113 HTTP/1.1" 200 302 "-" "Meilisearch Rust (v0.24.1)" 0.000114
[2023-08-17T14:56:41Z INFO  index_scheduler::batch] document addition done: DocumentAdditionResult { indexed_documents: 1, number_of_documents: 1 }
[2023-08-17T14:56:41Z INFO  index_scheduler] A batch of tasks was successfully completed.
[2023-08-17T14:56:42Z INFO  actix_web::middleware::logger] 127.0.0.1 "GET /tasks/1112 HTTP/1.1" 200 652 "-" "Meilisearch Rust (v0.24.1)" 0.000232
[2023-08-17T14:56:42Z INFO  actix_web::middleware::logger] 127.0.0.1 "GET /tasks/1113 HTTP/1.1" 200 338 "-" "Meilisearch Rust (v0.24.1)" 0.000134
[2023-08-17T14:56:42Z INFO  actix_web::middleware::logger] 127.0.0.1 "GET /tasks/1112 HTTP/1.1" 200 652 "-" "Meilisearch Rust (v0.24.1)" 0.000207
[2023-08-17T14:56:42Z INFO  actix_web::middleware::logger] 127.0.0.1 "GET /tasks/1113 HTTP/1.1" 200 338 "-" "Meilisearch Rust (v0.24.1)" 0.000434
[2023-08-17T14:56:42Z INFO  actix_web::middleware::logger] 127.0.0.1 "GET /indexes/test_2/stats HTTP/1.1" 200 65 "-" "Meilisearch Rust (v0.24.1)" 0.000091
[2023-08-17T14:56:42Z INFO  actix_web::middleware::logger] 127.0.0.1 "GET /indexes/test_1/stats HTTP/1.1" 200 81 "-" "Meilisearch Rust (v0.24.1)" 0.000280
[2023-08-17T14:56:42Z INFO  actix_web::middleware::logger] 127.0.0.1 "POST /indexes/test_1/documents HTTP/1.1" 202 136 "-" "Meilisearch Rust (v0.24.1)" 0.002155
[2023-08-17T14:56:42Z INFO  index_scheduler] A batch of tasks was successfully completed.
[2023-08-17T14:56:42Z INFO  actix_web::middleware::logger] 127.0.0.1 "GET /tasks/1114 HTTP/1.1" 200 650 "-" "Meilisearch Rust (v0.24.1)" 0.000207
[2023-08-17T14:56:42Z INFO  actix_web::middleware::logger] 127.0.0.1 "GET /tasks/1114 HTTP/1.1" 200 650 "-" "Meilisearch Rust (v0.24.1)" 0.000151
[2023-08-17T14:56:42Z INFO  actix_web::middleware::logger] 127.0.0.1 "GET /indexes/test_1/stats HTTP/1.1" 200 81 "-" "Meilisearch Rust (v0.24.1)" 0.000094

Notice how A batch of tasks was successfully completed. is not preceded by document addition done when the batch contained a document with a single quote in the primary key.

Expected behavior

Call to index.add_document should return and invalid_document_id error, preferably explaining that the single quote is an invalid error.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions