Skip to content

Commit 2128eb3

Browse files
authored
fix: HNSW schema deleting document crash (#4987)
fixed: #4979
1 parent 5ea3070 commit 2128eb3

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

src/core/search/indices.cc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,10 @@ struct HnswlibAdapter {
281281
}
282282

283283
void Remove(DocId id) {
284-
world_.markDelete(id);
284+
try {
285+
world_.markDelete(id);
286+
} catch (const std::exception& e) {
287+
}
285288
}
286289

287290
vector<pair<float, DocId>> Knn(float* target, size_t k, std::optional<size_t> ef) {

src/server/search/search_family_test.cc

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2722,6 +2722,18 @@ TEST_F(SearchFamilyTest, JsonWithNullFields) {
27222722
AreDocIds("doc:1", "doc:2"));
27232723
}
27242724

2725+
TEST_F(SearchFamilyTest, TestHsetDeleteDocumentHnswSchemaCrash) {
2726+
EXPECT_EQ(Run({"FT.CREATE", "idx", "SCHEMA", "n", "NUMERIC", "v", "VECTOR", "HNSW", "8", "TYPE",
2727+
"FLOAT16", "DIM", "4", "DISTANCE_METRIC", "L2", "M", "65536"}),
2728+
"OK");
2729+
2730+
auto res = Run({"HSET", "doc", "n", "0"});
2731+
EXPECT_EQ(res, 1);
2732+
2733+
res = Run({"DEL", "doc"});
2734+
EXPECT_EQ(res, 1);
2735+
}
2736+
27252737
TEST_F(SearchFamilyTest, RenameDocumentBetweenIndices) {
27262738
absl::FlagSaver fs;
27272739

0 commit comments

Comments
 (0)