From 4b6ec974173980cc5b87cddfd86d63b43ac6e093 Mon Sep 17 00:00:00 2001 From: Kishore Nallan Date: Wed, 23 Aug 2023 12:52:36 +0530 Subject: [PATCH] Use fields index directly during looping. --- src/field.cpp | 2 +- test/collection_vector_search_test.cpp | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/field.cpp b/src/field.cpp index 7d5e399c..3c4d2e1c 100644 --- a/src/field.cpp +++ b/src/field.cpp @@ -1094,7 +1094,7 @@ Option field::json_fields_to_fields(bool enable_nested_fields, nlohmann::j } if(!the_fields.empty() && !the_fields.back().embed.empty()) { - embed_json_field_indices.emplace_back(i, i); + embed_json_field_indices.emplace_back(i, the_fields.size()-1); } } diff --git a/test/collection_vector_search_test.cpp b/test/collection_vector_search_test.cpp index 02bef6ff..694e501f 100644 --- a/test/collection_vector_search_test.cpp +++ b/test/collection_vector_search_test.cpp @@ -1161,6 +1161,27 @@ TEST_F(CollectionVectorTest, FreshEmplaceWithOptionalEmbeddingReferencedField) { "or make the embedding field optional.", add_op.error()); } +TEST_F(CollectionVectorTest, EmbeddingFieldWithIdFieldPrecedingInSchema) { + auto schema = R"({ + "name": "objects", + "fields": [ + {"name": "id", "type": "string"}, + {"name": "name", "type": "string"}, + {"name": "embedding", "type":"float[]", "embed":{"from": ["name"], "model_config": {"model_name": "ts/e5-small"}}} + ] + })"_json; + + TextEmbedderManager::set_model_dir("/tmp/typesense_test/models"); + + auto op = collectionManager.create_collection(schema); + ASSERT_TRUE(op.ok()); + Collection* coll = op.get(); + + auto fs = coll->get_fields(); + ASSERT_EQ(2, fs.size()); + ASSERT_EQ(384, fs[1].num_dim); +} + TEST_F(CollectionVectorTest, SkipEmbeddingOpWhenValueExists) { nlohmann::json schema = R"({ "name": "objects",