diff --git a/src/storage/v2/indices/text_index.cpp b/src/storage/v2/indices/text_index.cpp
index 353fea803..e12159121 100644
--- a/src/storage/v2/indices/text_index.cpp
+++ b/src/storage/v2/indices/text_index.cpp
@@ -36,7 +36,12 @@ void TextIndex::AddNode(Vertex *vertex_after_update, Storage *storage,
   document["metadata"]["is_node"] = true;
 
   for (auto *index_context : applicable_text_indices) {
-    mgcxx::text_search::add_document(*index_context, mgcxx::text_search::DocumentInput{.data = document.dump()}, false);
+    try {
+      mgcxx::text_search::add_document(*index_context, mgcxx::text_search::DocumentInput{.data = document.dump()},
+                                       false);
+    } catch (const std::exception &e) {
+      throw query::QueryException(fmt::format("Tantivy error: {}", e.what()));
+    }
   }
 }
 
@@ -69,7 +74,11 @@ void TextIndex::RemoveNode(Vertex *vertex_after_update,
       mgcxx::text_search::SearchInput{.search_query = fmt::format("metadata.gid:{}", vertex_after_update->gid.AsInt())};
 
   for (auto *index_context : applicable_text_indices) {
-    mgcxx::text_search::delete_document(*index_context, search_node_to_be_deleted, false);
+    try {
+      mgcxx::text_search::delete_document(*index_context, search_node_to_be_deleted, false);
+    } catch (const std::exception &e) {
+      throw query::QueryException(fmt::format("Tantivy error: {}", e.what()));
+    }
   }
 }
 
@@ -124,8 +133,12 @@ bool TextIndex::CreateIndex(std::string index_name, LabelId label, memgraph::que
   mappings["properties"]["metadata"] = {{"type", "json"}, {"fast", true}, {"stored", true}, {"text", true}};
   mappings["properties"]["data"] = {{"type", "json"}, {"fast", true}, {"stored", true}, {"text", true}};
 
-  index_.emplace(index_name, mgcxx::text_search::create_index(
-                                 index_name, mgcxx::text_search::IndexConfig{.mappings = mappings.dump()}));
+  try {
+    index_.emplace(index_name, mgcxx::text_search::create_index(
+                                   index_name, mgcxx::text_search::IndexConfig{.mappings = mappings.dump()}));
+  } catch (const std::exception &e) {
+    throw query::QueryException(fmt::format("Tantivy error: {}", e.what()));
+  }
   label_to_index_.emplace(label, index_name);
 
   bool has_schema = false;
@@ -157,14 +170,22 @@ bool TextIndex::CreateIndex(std::string index_name, LabelId label, memgraph::que
     document["metadata"]["deleted"] = false;
     document["metadata"]["is_node"] = true;
 
-    mgcxx::text_search::add_document(index_.at(index_name), mgcxx::text_search::DocumentInput{.data = document.dump()},
-                                     false);
+    try {
+      mgcxx::text_search::add_document(index_.at(index_name),
+                                       mgcxx::text_search::DocumentInput{.data = document.dump()}, false);
+    } catch (const std::exception &e) {
+      throw query::QueryException(fmt::format("Tantivy error: {}", e.what()));
+    }
   }
   return true;
 }
 
 bool TextIndex::DropIndex(std::string index_name) {
-  mgcxx::text_search::drop_index(index_name);
+  try {
+    mgcxx::text_search::drop_index(index_name);
+  } catch (const std::exception &e) {
+    throw query::QueryException(fmt::format("Tantivy error: {}", e.what()));
+  }
   index_.erase(index_name);
   std::erase_if(label_to_index_, [index_name](const auto &item) { return item.second == index_name; });
   return true;
@@ -180,7 +201,13 @@ std::vector<Gid> TextIndex::Search(std::string index_name, std::string search_qu
   }
 
   std::vector<Gid> found_nodes;
-  auto search_results = mgcxx::text_search::search(index_.at(index_name), input);
+
+  mgcxx::text_search::SearchOutput search_results;
+  try {
+    search_results = mgcxx::text_search::search(index_.at(index_name), input);
+  } catch (const std::exception &e) {
+    throw query::QueryException(fmt::format("Tantivy error: {}", e.what()));
+  }
   auto docs = search_results.docs;
   for (const auto &doc : docs) {
     auto doc_data = doc.data;