diff --git a/src/core/search/indices.cc b/src/core/search/indices.cc index 9d77f1a1b5f9..9f739b05cf65 100644 --- a/src/core/search/indices.cc +++ b/src/core/search/indices.cc @@ -281,7 +281,10 @@ struct HnswlibAdapter { } void Remove(DocId id) { - world_.markDelete(id); + try { + world_.markDelete(id); + } catch (const std::exception& e) { + } } vector> Knn(float* target, size_t k, std::optional ef) { diff --git a/src/server/search/search_family_test.cc b/src/server/search/search_family_test.cc index 00287c3c11d8..38dc0a9bdefb 100644 --- a/src/server/search/search_family_test.cc +++ b/src/server/search/search_family_test.cc @@ -2722,6 +2722,18 @@ TEST_F(SearchFamilyTest, JsonWithNullFields) { AreDocIds("doc:1", "doc:2")); } +TEST_F(SearchFamilyTest, TestHsetDeleteDocumentHnswSchemaCrash) { + EXPECT_EQ(Run({"FT.CREATE", "idx", "SCHEMA", "n", "NUMERIC", "v", "VECTOR", "HNSW", "8", "TYPE", + "FLOAT16", "DIM", "4", "DISTANCE_METRIC", "L2", "M", "65536"}), + "OK"); + + auto res = Run({"HSET", "doc", "n", "0"}); + EXPECT_EQ(res, 1); + + res = Run({"DEL", "doc"}); + EXPECT_EQ(res, 1); +} + TEST_F(SearchFamilyTest, RenameDocumentBetweenIndices) { absl::FlagSaver fs;