From 3408a6dea36ebf56b8a6fa1306cdae7f33c6676a Mon Sep 17 00:00:00 2001 From: Wang Zhiyong Date: Tue, 24 Sep 2024 06:12:50 +0000 Subject: [PATCH] add vector range search --- docs/zh-CN/source/8.query/3.vector_index.md | 15 +++- src/core/vector_index.h | 5 +- src/core/vsag_hnsw.cpp | 27 +++++- src/core/vsag_hnsw.h | 7 +- src/cypher/procedure/procedure.cpp | 90 +++++++++++++++++-- src/cypher/procedure/procedure.h | 19 +++- .../procedure/cypher/procedure.result | 8 +- .../vector_index/cypher/vector_index.result | 37 ++++++-- .../vector_index/cypher/vector_index.test | 26 ++++-- test/test_vsag_index.cpp | 18 ++-- 10 files changed, 204 insertions(+), 48 deletions(-) diff --git a/docs/zh-CN/source/8.query/3.vector_index.md b/docs/zh-CN/source/8.query/3.vector_index.md index f9f87aa78..9b4c79764 100644 --- a/docs/zh-CN/source/8.query/3.vector_index.md +++ b/docs/zh-CN/source/8.query/3.vector_index.md @@ -59,20 +59,27 @@ CREATE (n1)-[r:like]->(n2), (n3)-[r:like]->(n1); ``` ## 向量查询 - +### KnnSearch 根据向量搜索出点,第四个参数是个map,里面可以指定一些向量搜索的参数。 ``` -CALL db.vertexVectorIndexQuery('person','embedding', [1.0,2.0,3.0,4.0], {top_k:2, hnsw_ef_search:10}) +CALL db.vertexVectorKnnSearch('person','embedding', [1.0,2.0,3.0,4.0], {top_k:2, hnsw_ef_search:10}) yield node return node ``` 根据向量搜索出点,返回`age`小于30的 ``` -CALL db.vertexVectorIndexQuery('person','embedding',[1.0,2.0,3.0,4.0], {top_k:2, hnsw_ef_search:10}) +CALL db.vertexVectorKnnSearch('person','embedding',[1.0,2.0,3.0,4.0], {top_k:2, hnsw_ef_search:10}) yield node where node.age < 30 return node ``` 根据向量搜索出点,返回age小于30的点,然后再查这些点的一度邻居是谁。 ``` -CALL db.vertexVectorIndexQuery('person','embedding',[1.0,2.0,3.0,4.0], {top_k:2, hnsw_ef_search:10}) +CALL db.vertexVectorKnnSearch('person','embedding',[1.0,2.0,3.0,4.0], {top_k:2, hnsw_ef_search:10}) +yield node where node.age < 30 with node as p +match(p)-[r]->(m) return m +``` +### RangeSearch +根据向量搜索出距离小于10的、age小于30的点,然后再查这些点的一度邻居是谁。 +``` +CALL db.vertexVectorRangeSearch('person','embedding',[1.0,2.0,3.0,4.0], {radius:10.0, hnsw_ef_search:10}) yield node where node.age < 30 with node as p match(p)-[r]->(m) return m ``` \ No newline at end of file diff --git a/src/core/vector_index.h b/src/core/vector_index.h index f9b956b52..320d8eea1 100644 --- a/src/core/vector_index.h +++ b/src/core/vector_index.h @@ -79,6 +79,9 @@ class VectorIndex { // search vector in index virtual std::vector> - Search(const std::vector& query, int64_t num_results, int ef_search) = 0; + KnnSearch(const std::vector& query, int64_t top_k, int ef_search) = 0; + + virtual std::vector> + RangeSearch(const std::vector& query, float radius, int ef_search, int limit) = 0; }; } // namespace lgraph diff --git a/src/core/vsag_hnsw.cpp b/src/core/vsag_hnsw.cpp index e1dd4b1b7..03eec8909 100644 --- a/src/core/vsag_hnsw.cpp +++ b/src/core/vsag_hnsw.cpp @@ -174,7 +174,7 @@ void HNSW::Load(std::vector& idx_bytes) { // search vector in index std::vector> -HNSW::Search(const std::vector& query, int64_t num_results, int ef_search) { +HNSW::KnnSearch(const std::vector& query, int64_t top_k, int ef_search) { auto* query_copy = new float[query.size()]; std::copy(query.begin(), query.end(), query_copy); auto dataset = vsag::Dataset::Make(); @@ -185,7 +185,30 @@ HNSW::Search(const std::vector& query, int64_t num_results, int ef_search {"hnsw", {{"ef_search", ef_search}}}, }; std::vector> ret; - auto result = index_->KnnSearch(dataset, num_results, parameters.dump()); + auto result = index_->KnnSearch(dataset, top_k, parameters.dump()); + if (result.has_value()) { + for (int64_t i = 0; i < result.value()->GetDim(); ++i) { + ret.emplace_back(result.value()->GetIds()[i], result.value()->GetDistances()[i]); + } + } else { + THROW_CODE(VectorIndexException, result.error().message); + } + return ret; +} + +std::vector> +HNSW::RangeSearch(const std::vector& query, float radius, int ef_search, int limit) { + auto* query_copy = new float[query.size()]; + std::copy(query.begin(), query.end(), query_copy); + auto dataset = vsag::Dataset::Make(); + dataset->Dim(vec_dimension_) + ->NumElements(1) + ->Float32Vectors(query_copy); + nlohmann::json parameters{ + {"hnsw", {{"ef_search", ef_search}}}, + }; + std::vector> ret; + auto result = index_->RangeSearch(dataset, radius, parameters.dump(), limit); if (result.has_value()) { for (int64_t i = 0; i < result.value()->GetDim(); ++i) { ret.emplace_back(result.value()->GetIds()[i], result.value()->GetDistances()[i]); diff --git a/src/core/vsag_hnsw.h b/src/core/vsag_hnsw.h index daef893b9..d520a8a40 100644 --- a/src/core/vsag_hnsw.h +++ b/src/core/vsag_hnsw.h @@ -63,8 +63,11 @@ class HNSW : public VectorIndex { void Load(std::vector& idx_bytes) override; // search vector in index - std::vector> Search( - const std::vector& query, int64_t num_results, int ef_search) override; + std::vector> KnnSearch( + const std::vector& query, int64_t top_k, int ef_search) override; + + std::vector> RangeSearch( + const std::vector& query, float radius, int ef_search, int limit) override; template static void writeBinaryPOD(std::ostream& out, const T& podRef) { diff --git a/src/cypher/procedure/procedure.cpp b/src/cypher/procedure/procedure.cpp index 78b2b42ae..2d37b468f 100644 --- a/src/cypher/procedure/procedure.cpp +++ b/src/cypher/procedure/procedure.cpp @@ -4258,13 +4258,13 @@ void VectorFunc::ShowVertexVectorIndex(RTContext *ctx, const cypher::Record *rec FillProcedureYieldItem("db.showVertexVectorIndex", yield_items, records); } -void VectorFunc::VertexVectorIndexQuery(RTContext *ctx, const cypher::Record *record, +void VectorFunc::VertexVectorKnnSearch(RTContext *ctx, const cypher::Record *record, const cypher::VEC_EXPR &args, const cypher::VEC_STR &yield_items, struct std::vector *records) { CYPHER_DB_PROCEDURE_GRAPH_CHECK(); CYPHER_ARG_CHECK(args.size() == 4, - "e.g. db.vertexVectorIndexQuery(label_name, field_name," + "e.g. db.vertexVectorKnnSearch(label_name, field_name," " vec, parameter);") CYPHER_ARG_CHECK(args[0].IsString(), "label_name type should be string") @@ -4272,7 +4272,7 @@ void VectorFunc::VertexVectorIndexQuery(RTContext *ctx, const cypher::Record *re "field_name type should be string") CYPHER_ARG_CHECK(args[2].IsArray(), "Please check the vector you entered, e.g. [1, 2, 3]") CYPHER_ARG_CHECK(args[3].IsMap(), "parameter type should be map") - CheckProcedureYieldItem("db.vertexVectorIndexQuery", yield_items); + CheckProcedureYieldItem("db.vertexVectorKnnSearch", yield_items); std::vector query_vector; for (size_t i = 0; i < args[2].constant.AsConstantArray().size(); i++) { float fltValue; @@ -4296,8 +4296,9 @@ void VectorFunc::VertexVectorIndexQuery(RTContext *ctx, const cypher::Record *re auto label = args[0].constant.AsString(); auto field = args[1].constant.AsString(); auto index = ctx->txn_->GetTxn()->GetVertexVectorIndex(label, field); + int top_k = 10; - auto parameter = *args[3].constant.map; + auto parameter = *args[3].constant.map; if (parameter.count("top_k")) { top_k = parameter.at("top_k").AsInt64(); } @@ -4308,7 +4309,83 @@ void VectorFunc::VertexVectorIndexQuery(RTContext *ctx, const cypher::Record *re } CYPHER_ARG_CHECK((ef_search <= 1000 && ef_search >= 1), "hnsw.ef_search should be an integer in the range [1, 1000]"); - auto res = index->Search(query_vector, top_k, ef_search); + auto res = index->KnnSearch(query_vector, top_k, ef_search); + for (auto& item : res) { + Record r; + cypher::Node n; + n.SetVid(item.first); + r.AddNode(&n); + r.AddConstant(lgraph::FieldData(item.second)); + records->emplace_back(r.Snapshot()); + } + FillProcedureYieldItem("db.vertexVectorKnnSearch", yield_items, records); +} + +void VectorFunc::VertexVectorRangeSearch(RTContext *ctx, const cypher::Record *record, + const cypher::VEC_EXPR &args, + const cypher::VEC_STR &yield_items, + struct std::vector *records) { + CYPHER_DB_PROCEDURE_GRAPH_CHECK(); + CYPHER_ARG_CHECK(args.size() == 4, + "e.g. db.vertexVectorRangeSearch(label_name, field_name," + " vec, parameter);") + CYPHER_ARG_CHECK(args[0].IsString(), + "label_name type should be string") + CYPHER_ARG_CHECK(args[1].IsString(), + "field_name type should be string") + CYPHER_ARG_CHECK(args[2].IsArray(), "Please check the vector you entered, e.g. [1, 2, 3]") + CYPHER_ARG_CHECK(args[3].IsMap(), "parameter type should be map") + CheckProcedureYieldItem("db.vertexVectorRangeSearch", yield_items); + std::vector query_vector; + for (size_t i = 0; i < args[2].constant.AsConstantArray().size(); i++) { + float fltValue; + if (args[2].constant.AsConstantArray().at(i).IsFloat()) { + float dblValue = + args[2].constant.AsConstantArray().at(i).AsFloat(); + fltValue = static_cast(dblValue); + } else if (args[2].constant.AsConstantArray().at(i).IsInteger()) { + int64_t dblValue = + args[2].constant.AsConstantArray().at(i).AsInt64(); + fltValue = static_cast(dblValue); + } else if (args[2].constant.AsConstantArray().at(i).IsDouble()) { + double dblValue = + args[2].constant.AsConstantArray().at(i).AsDouble(); + fltValue = static_cast(dblValue); + } else { + throw lgraph::ReminderException("Please check the vector"); + } + query_vector.push_back(fltValue); + } + auto label = args[0].constant.AsString(); + auto field = args[1].constant.AsString(); + auto index = ctx->txn_->GetTxn()->GetVertexVectorIndex(label, field); + + float radius = 0.1; + auto parameter = *args[3].constant.map; + if (parameter.count("radius")) { + if (parameter.at("radius").scalar.IsDouble()) { + radius = (float)parameter.at("radius").AsDouble(); + } else if (parameter.at("radius").scalar.IsInteger()) { + radius = (float)parameter.at("radius").AsInt64(); + } else { + throw lgraph::ReminderException("radius type error"); + } + } else { + throw lgraph::ReminderException("radius is required for vector range search"); + } + CYPHER_ARG_CHECK((radius > 0), "radius must be greater than 0"); + int ef_search = 200; + if (parameter.count("hnsw_ef_search")) { + ef_search = parameter.at("hnsw_ef_search").AsInt64(); + } + CYPHER_ARG_CHECK((ef_search <= 1000 && ef_search >= 1), + "hnsw.ef_search should be an integer in the range [1, 1000]"); + int limit = -1; + if (parameter.count("limit")) { + limit = parameter.at("limit").AsInt64(); + } + CYPHER_ARG_CHECK((limit != 0), "limit must not be 0"); + auto res = index->RangeSearch(query_vector, radius, ef_search, limit); for (auto& item : res) { Record r; cypher::Node n; @@ -4317,6 +4394,7 @@ void VectorFunc::VertexVectorIndexQuery(RTContext *ctx, const cypher::Record *re r.AddConstant(lgraph::FieldData(item.second)); records->emplace_back(r.Snapshot()); } - FillProcedureYieldItem("db.vertexVectorIndexQuery", yield_items, records); + FillProcedureYieldItem("db.vertexVectorRangeSearch", yield_items, records); } + } // namespace cypher diff --git a/src/cypher/procedure/procedure.h b/src/cypher/procedure/procedure.h index 8f9e22e3d..3373c5e86 100644 --- a/src/cypher/procedure/procedure.h +++ b/src/cypher/procedure/procedure.h @@ -424,8 +424,10 @@ class VectorFunc { static void ShowVertexVectorIndex(RTContext *ctx, const Record *record, const VEC_EXPR &args, const VEC_STR &yield_items, std::vector *records); - static void VertexVectorIndexQuery(RTContext *ctx, const Record *record, const VEC_EXPR &args, + static void VertexVectorKnnSearch(RTContext *ctx, const Record *record, const VEC_EXPR &args, const VEC_STR &yield_items, std::vector *records); + static void VertexVectorRangeSearch(RTContext *ctx, const Record *record, const VEC_EXPR &args, + const VEC_STR &yield_items, std::vector *records); }; struct Procedure { @@ -950,7 +952,18 @@ static std::vector global_procedures = { {"hnsm.ef_construction", {6, lgraph_api::LGraphType::INTEGER}}, }), - Procedure("db.vertexVectorIndexQuery", VectorFunc::VertexVectorIndexQuery, + Procedure("db.vertexVectorKnnSearch", VectorFunc::VertexVectorKnnSearch, + Procedure::SIG_SPEC{ + {"label_name", {0, lgraph_api::LGraphType::STRING}}, + {"field_name", {1, lgraph_api::LGraphType::STRING}}, + {"vec", {2, lgraph_api::LGraphType::LIST}}, + {"parameter", {3, lgraph_api::LGraphType::MAP}}, + }, + Procedure::SIG_SPEC{ + {"node", {0, lgraph_api::LGraphType::NODE}}, + {"distance", {1, lgraph_api::LGraphType::FLOAT}}, + }), + Procedure("db.vertexVectorRangeSearch", VectorFunc::VertexVectorRangeSearch, Procedure::SIG_SPEC{ {"label_name", {0, lgraph_api::LGraphType::STRING}}, {"field_name", {1, lgraph_api::LGraphType::STRING}}, @@ -959,7 +972,7 @@ static std::vector global_procedures = { }, Procedure::SIG_SPEC{ {"node", {0, lgraph_api::LGraphType::NODE}}, - {"score", {1, lgraph_api::LGraphType::FLOAT}}, + {"distance", {1, lgraph_api::LGraphType::FLOAT}}, }), Procedure("dbms.security.listRoles", BuiltinProcedure::DbmsSecurityListRoles, diff --git a/test/resource/unit_test/procedure/cypher/procedure.result b/test/resource/unit_test/procedure/cypher/procedure.result index fcd259b80..6a00dd0eb 100644 --- a/test/resource/unit_test/procedure/cypher/procedure.result +++ b/test/resource/unit_test/procedure/cypher/procedure.result @@ -22,11 +22,11 @@ CALL db.edgeLabels; CALL db.indexes; [{"field":"birthyear","label":"Person","label_type":"vertex","pair_unique":false,"unique":false},{"field":"name","label":"Person","label_type":"vertex","pair_unique":false,"unique":true},{"field":"name","label":"City","label_type":"vertex","pair_unique":false,"unique":true},{"field":"title","label":"Film","label_type":"vertex","pair_unique":false,"unique":true},{"field":"name","label":"Director","label_type":"vertex","pair_unique":false,"unique":true},{"field":"flag1","label":"P2","label_type":"vertex","pair_unique":false,"unique":true}] CALL dbms.procedures; -[{"name":"db.subgraph","read_only":true,"signature":"db.subgraph(vids::LIST) :: (subgraph::STRING)"},{"name":"db.vertexLabels","read_only":true,"signature":"db.vertexLabels() :: (label::STRING)"},{"name":"db.edgeLabels","read_only":true,"signature":"db.edgeLabels() :: (label::STRING)"},{"name":"db.indexes","read_only":true,"signature":"db.indexes() :: (label::STRING,field::STRING,label_type::STRING,unique::BOOLEAN,pair_unique::BOOLEAN)"},{"name":"db.listLabelIndexes","read_only":true,"signature":"db.listLabelIndexes(label_name::STRING,label_type::STRING) :: (label::STRING,field::STRING,unique::BOOLEAN,pair_unique::BOOLEAN)"},{"name":"db.propertyKeys","read_only":true,"signature":"db.propertyKeys() :: (propertyKey::STRING)"},{"name":"db.warmup","read_only":true,"signature":"db.warmup() :: (time_used::STRING)"},{"name":"db.createVertexLabelByJson","read_only":false,"signature":"db.createVertexLabelByJson(json_data::STRING) :: (::NUL)"},{"name":"db.createEdgeLabelByJson","read_only":false,"signature":"db.createEdgeLabelByJson(json_data::STRING) :: (::NUL)"},{"name":"db.createVertexLabel","read_only":false,"signature":"db.createVertexLabel(label_name::STRING,field_specs::LIST) :: (::NUL)"},{"name":"db.createLabel","read_only":false,"signature":"db.createLabel(label_type::STRING,label_name::STRING,extra::STRING,field_specs::LIST) :: ()"},{"name":"db.getLabelSchema","read_only":true,"signature":"db.getLabelSchema(label_type::STRING,label_name::STRING) :: (name::STRING,type::STRING,optional::BOOLEAN)"},{"name":"db.getVertexSchema","read_only":true,"signature":"db.getVertexSchema(label::STRING) :: (schema::MAP)"},{"name":"db.getEdgeSchema","read_only":true,"signature":"db.getEdgeSchema(label::STRING) :: (schema::MAP)"},{"name":"db.deleteLabel","read_only":false,"signature":"db.deleteLabel(label_type::STRING,label_name::STRING) :: (::NUL)"},{"name":"db.alterLabelDelFields","read_only":false,"signature":"db.alterLabelDelFields(label_type::STRING,label_name::STRING,del_fields::LIST) :: (record_affected::INTEGER)"},{"name":"db.alterLabelAddFields","read_only":false,"signature":"db.alterLabelAddFields(label_type::STRING,label_name::STRING,add_field_spec_values::LIST) :: (record_affected::INTEGER)"},{"name":"db.upsertVertex","read_only":false,"signature":"db.upsertVertex(label_name::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"name":"db.upsertVertexByJson","read_only":false,"signature":"db.upsertVertexByJson(label_name::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"name":"db.upsertEdge","read_only":false,"signature":"db.upsertEdge(label_name::STRING,start_spec::STRING,end_spec::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"name":"db.upsertEdgeByJson","read_only":false,"signature":"db.upsertEdgeByJson(label_name::STRING,start_spec::STRING,end_spec::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"name":"db.alterLabelModFields","read_only":false,"signature":"db.alterLabelModFields(label_type::STRING,label_name::STRING,mod_field_specs::LIST) :: (record_affected::INTEGER)"},{"name":"db.createEdgeLabel","read_only":false,"signature":"db.createEdgeLabel(type_name::STRING,field_specs::LIST) :: (::NUL)"},{"name":"db.addIndex","read_only":false,"signature":"db.addIndex(label_name::STRING,field_name::STRING,unique::BOOLEAN) :: (::NUL)"},{"name":"db.addVertexCompositeIndex","read_only":false,"signature":"db.addVertexCompositeIndex(label_name::STRING,field_names::LIST,unique::BOOLEAN) :: (::NUL)"},{"name":"db.addEdgeIndex","read_only":false,"signature":"db.addEdgeIndex(label_name::STRING,field_name::STRING,unique::BOOLEAN,) :: (::NUL)"},{"name":"db.addFullTextIndex","read_only":false,"signature":"db.addFullTextIndex(is_vertex::BOOLEAN,label_name::STRING,field_name::STRING) :: (::NUL)"},{"name":"db.deleteFullTextIndex","read_only":false,"signature":"db.deleteFullTextIndex(is_vertex::BOOLEAN,label_name::STRING,field_name::STRING) :: (::NUL)"},{"name":"db.rebuildFullTextIndex","read_only":false,"signature":"db.rebuildFullTextIndex(vertex_labels::STRING,edge_labels::STRING) :: (::NUL)"},{"name":"db.fullTextIndexes","read_only":true,"signature":"db.fullTextIndexes() :: (is_vertex::BOOLEAN,label::STRING,field::STRING)"},{"name":"db.addEdgeConstraints","read_only":false,"signature":"db.addEdgeConstraints(label_name::STRING,constraints::STRING) :: (::NUL)"},{"name":"db.clearEdgeConstraints","read_only":false,"signature":"db.clearEdgeConstraints(label_name::STRING) :: (::NUL)"},{"name":"dbms.procedures","read_only":true,"signature":"dbms.procedures() :: (name::STRING,signature::STRING,read_only::BOOLEAN)"},{"name":"dbms.meta.countDetail","read_only":true,"signature":"dbms.meta.countDetail() :: (is_vertex::BOOLEAN,label::STRING,count::INTEGER)"},{"name":"dbms.meta.count","read_only":true,"signature":"dbms.meta.count() :: (type::STRING,number::INTEGER)"},{"name":"dbms.meta.refreshCount","read_only":false,"signature":"dbms.meta.refreshCount() :: (::NUL)"},{"name":"dbms.security.isDefaultUserPassword","read_only":true,"signature":"dbms.security.isDefaultUserPassword() :: (isDefaultUserPassword::BOOLEAN)"},{"name":"dbms.security.changePassword","read_only":false,"signature":"dbms.security.changePassword(current_password::STRING,new_password::STRING) :: (::NUL)"},{"name":"dbms.security.changeUserPassword","read_only":false,"signature":"dbms.security.changeUserPassword(user_name::STRING,new_password::STRING) :: (::NUL)"},{"name":"dbms.security.createUser","read_only":false,"signature":"dbms.security.createUser(user_name::STRING,password::STRING) :: (::NUL)"},{"name":"dbms.security.deleteUser","read_only":false,"signature":"dbms.security.deleteUser(user_name::STRING) :: (::NUL)"},{"name":"dbms.security.setUserMemoryLimit","read_only":false,"signature":"dbms.security.setUserMemoryLimit(user_name::STRING,MemoryLimit::INTEGER) :: (::NUL)"},{"name":"dbms.security.listUsers","read_only":true,"signature":"dbms.security.listUsers() :: (user_name::STRING,user_info::MAP)"},{"name":"dbms.security.showCurrentUser","read_only":true,"signature":"dbms.security.showCurrentUser() :: (current_user::STRING)"},{"name":"dbms.security.listAllowedHosts","read_only":true,"signature":"dbms.security.listAllowedHosts() :: (host::STRING)"},{"name":"dbms.security.deleteAllowedHosts","read_only":false,"signature":"dbms.security.deleteAllowedHosts(hosts::LIST) :: (record_affected::INTEGER)"},{"name":"dbms.security.addAllowedHosts","read_only":false,"signature":"dbms.security.addAllowedHosts(hosts::LIST) :: (num_added::INTEGER)"},{"name":"dbms.graph.createGraph","read_only":false,"signature":"dbms.graph.createGraph(graph_name::STRING,description::STRING,max_size_GB::INTEGER) :: (::NUL)"},{"name":"dbms.graph.deleteGraph","read_only":false,"signature":"dbms.graph.deleteGraph(graph_name::STRING) :: (::NUL)"},{"name":"dbms.graph.modGraph","read_only":false,"signature":"dbms.graph.modGraph(graph_name::STRING,config::MAP) :: (::NUL)"},{"name":"dbms.graph.listGraphs","read_only":true,"signature":"dbms.graph.listGraphs() :: (graph_name::STRING,configuration::MAP)"},{"name":"dbms.graph.listUserGraphs","read_only":true,"signature":"dbms.graph.listUserGraphs(user_name::STRING) :: (graph_name::STRING,configuration::MAP)"},{"name":"dbms.graph.getGraphInfo","read_only":true,"signature":"dbms.graph.getGraphInfo() :: (graph_name::STRING,configuration::MAP)"},{"name":"dbms.graph.getGraphSchema","read_only":true,"signature":"dbms.graph.getGraphSchema() :: (schema::STRING)"},{"name":"dbms.system.info","read_only":true,"signature":"dbms.system.info() :: (name::STRING,value::ANY)"},{"name":"dbms.config.list","read_only":true,"signature":"dbms.config.list() :: (name::STRING,value::ANY)"},{"name":"dbms.config.update","read_only":false,"signature":"dbms.config.update(updates::MAP) :: (::NUL)"},{"name":"dbms.takeSnapshot","read_only":false,"signature":"dbms.takeSnapshot() :: (path::STRING)"},{"name":"dbms.listBackupFiles","read_only":true,"signature":"dbms.listBackupFiles() :: (file::STRING)"},{"name":"algo.shortestPath","read_only":true,"signature":"algo.shortestPath(startNode::NODE,endNode::NODE,config::MAP) :: (nodeCount::INTEGER,totalCost::FLOAT,path::STRING)"},{"name":"algo.allShortestPaths","read_only":true,"signature":"algo.allShortestPaths(startNode::NODE,endNode::NODE,config::MAP) :: (nodeIds::LIST,relationshipIds::LIST,cost::LIST)"},{"name":"algo.native.extract","read_only":true,"signature":"algo.native.extract(id::ANY,config::MAP) :: (value::ANY)"},{"name":"algo.pagerank","read_only":true,"signature":"algo.pagerank(num_iterations::INTEGER) :: (node::NODE,pr::FLOAT)"},{"name":"algo.jaccard","read_only":true,"signature":"algo.jaccard(lhs::ANY,) :: (similarity::FLOAT)"},{"name":"spatial.distance","read_only":true,"signature":"spatial.distance(Spatial1::STRING,Spatial2::STRING) :: (distance::DOUBLE)"},{"name":"db.addVertexVectorIndex","read_only":false,"signature":"db.addVertexVectorIndex(label_name::STRING,field_name::STRING,parameter::MAP) :: (::NUL)"},{"name":"db.deleteVertexVectorIndex","read_only":false,"signature":"db.deleteVertexVectorIndex(label_name::STRING,field_name::STRING) :: (::NUL)"},{"name":"db.showVertexVectorIndex","read_only":true,"signature":"db.showVertexVectorIndex() :: (label_name::STRING,field_name::STRING,index_type::STRING,dimension::INTEGER,distance_type::STRING,hnsm.m::INTEGER,hnsm.ef_construction::INTEGER)"},{"name":"db.vertexVectorIndexQuery","read_only":true,"signature":"db.vertexVectorIndexQuery(label_name::STRING,field_name::STRING,vec::LIST,parameter::MAP) :: (node::NODE,score::FLOAT)"},{"name":"dbms.security.listRoles","read_only":true,"signature":"dbms.security.listRoles() :: (role_name::STRING,role_info::MAP)"},{"name":"dbms.security.createRole","read_only":false,"signature":"dbms.security.createRole(role_name::STRING,desc::STRING) :: (::NUL)"},{"name":"dbms.security.deleteRole","read_only":false,"signature":"dbms.security.deleteRole(role_name::STRING) :: (::NUL)"},{"name":"dbms.security.getUserInfo","read_only":true,"signature":"dbms.security.getUserInfo(user::STRING) :: (user_info::MAP)"},{"name":"dbms.security.getUserMemoryUsage","read_only":true,"signature":"dbms.security.getUserMemoryUsage(user::STRING) :: (memory_usage::INTEGER)"},{"name":"dbms.security.getUserPermissions","read_only":true,"signature":"dbms.security.getUserPermissions(user::STRING) :: (user_info::MAP)"},{"name":"dbms.security.getRoleInfo","read_only":true,"signature":"dbms.security.getRoleInfo(role::STRING) :: (role_info::MAP)"},{"name":"dbms.security.disableRole","read_only":false,"signature":"dbms.security.disableRole(role::STRING,disable::BOOLEAN) :: (::NUL)"},{"name":"dbms.security.modRoleDesc","read_only":false,"signature":"dbms.security.modRoleDesc(role::STRING,description::STRING) :: (::NUL)"},{"name":"dbms.security.rebuildRoleAccessLevel","read_only":false,"signature":"dbms.security.rebuildRoleAccessLevel(role::STRING,access_level::MAP) :: (::NUL)"},{"name":"dbms.security.modRoleAccessLevel","read_only":false,"signature":"dbms.security.modRoleAccessLevel(role::STRING,access_level::MAP) :: (::NUL)"},{"name":"dbms.security.modRoleFieldAccessLevel","read_only":false,"signature":"dbms.security.modRoleFieldAccessLevel(role::STRING,) :: (::NUL)"},{"name":"dbms.security.disableUser","read_only":false,"signature":"dbms.security.disableUser(user::STRING,disable::BOOLEAN) :: (::NUL)"},{"name":"dbms.security.setCurrentDesc","read_only":false,"signature":"dbms.security.setCurrentDesc(description::STRING) :: (::NUL)"},{"name":"dbms.security.setUserDesc","read_only":false,"signature":"dbms.security.setUserDesc(user::STRING,description::STRING) :: (::NUL)"},{"name":"dbms.security.deleteUserRoles","read_only":false,"signature":"dbms.security.deleteUserRoles(user::STRING,roles::LIST) :: (::NUL)"},{"name":"dbms.security.rebuildUserRoles","read_only":false,"signature":"dbms.security.rebuildUserRoles(user::STRING,roles::LIST) :: (::NUL)"},{"name":"dbms.security.addUserRoles","read_only":false,"signature":"dbms.security.addUserRoles(user::STRING,roles::LIST) :: (::NUL)"},{"name":"db.plugin.loadPlugin","read_only":false,"signature":"db.plugin.loadPlugin(plugin_type::STRING,plugin_name::STRING,plugin_content::ANY,code_type::STRING,plugin_description::STRING,read_only::BOOLEAN,version::STRING) :: (::NUL)"},{"name":"db.plugin.deletePlugin","read_only":false,"signature":"db.plugin.deletePlugin(plugin_type::STRING,plugin_name::STRING) :: (::NUL)"},{"name":"db.plugin.getPluginInfo","read_only":true,"signature":"db.plugin.getPluginInfo(plugin_type::STRING,plugin_name::STRING) :: (plugin_description::MAP)"},{"name":"db.plugin.listPlugin","read_only":false,"signature":"db.plugin.listPlugin(plugin_type::STRING,plugin_version::STRING) :: (plugin_description::MAP)"},{"name":"db.plugin.listUserPlugins","read_only":true,"signature":"db.plugin.listUserPlugins() :: (graph::STRING,plugins::MAP)"},{"name":"db.plugin.callPlugin","read_only":false,"signature":"db.plugin.callPlugin(plugin_type::STRING,plugin_name::STRING,param::STRING,timeout::DOUBLE,in_process::BOOLEAN) :: (result::STRING)"},{"name":"db.importor.dataImportor","read_only":false,"signature":"db.importor.dataImportor(description::STRING,content::STRING,continue_on_error::BOOLEAN,thread_nums::INTEGER,delimiter::STRING) :: (::NUL)"},{"name":"db.importor.fullImportor","read_only":false,"signature":"db.importor.fullImportor(conf::MAP) :: (result::STRING)"},{"name":"db.importor.fullFileImportor","read_only":false,"signature":"db.importor.fullFileImportor(graph_name::STRING,path::STRING) :: (::NUL)"},{"name":"db.importor.schemaImportor","read_only":false,"signature":"db.importor.schemaImportor(description::STRING) :: (::NUL)"},{"name":"db.deleteIndex","read_only":false,"signature":"db.deleteIndex(label_name::STRING,field_name::STRING) :: (::NUL)"},{"name":"db.deleteEdgeIndex","read_only":false,"signature":"db.deleteEdgeIndex(label_name::STRING,field_name::STRING) :: (::NUL)"},{"name":"db.deleteCompositeIndex","read_only":false,"signature":"db.deleteCompositeIndex(label_name::STRING,field_name::LIST) :: (::NUL)"},{"name":"db.flushDB","read_only":false,"signature":"db.flushDB() :: (::NUL)"},{"name":"db.dropDB","read_only":false,"signature":"db.dropDB() :: (::NUL)"},{"name":"db.dropAllVertex","read_only":false,"signature":"db.dropAllVertex() :: (::NUL)"},{"name":"dbms.task.listTasks","read_only":true,"signature":"dbms.task.listTasks() :: (tasks_info::MAP)"},{"name":"dbms.task.terminateTask","read_only":false,"signature":"dbms.task.terminateTask(task_id::STRING) :: (::NUL)"},{"name":"db.monitor.tuGraphInfo","read_only":false,"signature":"db.monitor.tuGraphInfo() :: (request::STRING)"},{"name":"db.monitor.serverInfo","read_only":false,"signature":"db.monitor.serverInfo() :: (cpu::STRING,memory::STRING,disk_rate::STRING,disk_storage::STRING)"},{"name":"dbms.ha.clusterInfo","read_only":true,"signature":"dbms.ha.clusterInfo() :: (cluster_info::LIST,is_master::BOOLEAN)"}] +[{"name":"db.subgraph","read_only":true,"signature":"db.subgraph(vids::LIST) :: (subgraph::STRING)"},{"name":"db.vertexLabels","read_only":true,"signature":"db.vertexLabels() :: (label::STRING)"},{"name":"db.edgeLabels","read_only":true,"signature":"db.edgeLabels() :: (label::STRING)"},{"name":"db.indexes","read_only":true,"signature":"db.indexes() :: (label::STRING,field::STRING,label_type::STRING,unique::BOOLEAN,pair_unique::BOOLEAN)"},{"name":"db.listLabelIndexes","read_only":true,"signature":"db.listLabelIndexes(label_name::STRING,label_type::STRING) :: (label::STRING,field::STRING,unique::BOOLEAN,pair_unique::BOOLEAN)"},{"name":"db.propertyKeys","read_only":true,"signature":"db.propertyKeys() :: (propertyKey::STRING)"},{"name":"db.warmup","read_only":true,"signature":"db.warmup() :: (time_used::STRING)"},{"name":"db.createVertexLabelByJson","read_only":false,"signature":"db.createVertexLabelByJson(json_data::STRING) :: (::NUL)"},{"name":"db.createEdgeLabelByJson","read_only":false,"signature":"db.createEdgeLabelByJson(json_data::STRING) :: (::NUL)"},{"name":"db.createVertexLabel","read_only":false,"signature":"db.createVertexLabel(label_name::STRING,field_specs::LIST) :: (::NUL)"},{"name":"db.createLabel","read_only":false,"signature":"db.createLabel(label_type::STRING,label_name::STRING,extra::STRING,field_specs::LIST) :: ()"},{"name":"db.getLabelSchema","read_only":true,"signature":"db.getLabelSchema(label_type::STRING,label_name::STRING) :: (name::STRING,type::STRING,optional::BOOLEAN)"},{"name":"db.getVertexSchema","read_only":true,"signature":"db.getVertexSchema(label::STRING) :: (schema::MAP)"},{"name":"db.getEdgeSchema","read_only":true,"signature":"db.getEdgeSchema(label::STRING) :: (schema::MAP)"},{"name":"db.deleteLabel","read_only":false,"signature":"db.deleteLabel(label_type::STRING,label_name::STRING) :: (::NUL)"},{"name":"db.alterLabelDelFields","read_only":false,"signature":"db.alterLabelDelFields(label_type::STRING,label_name::STRING,del_fields::LIST) :: (record_affected::INTEGER)"},{"name":"db.alterLabelAddFields","read_only":false,"signature":"db.alterLabelAddFields(label_type::STRING,label_name::STRING,add_field_spec_values::LIST) :: (record_affected::INTEGER)"},{"name":"db.upsertVertex","read_only":false,"signature":"db.upsertVertex(label_name::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"name":"db.upsertVertexByJson","read_only":false,"signature":"db.upsertVertexByJson(label_name::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"name":"db.upsertEdge","read_only":false,"signature":"db.upsertEdge(label_name::STRING,start_spec::STRING,end_spec::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"name":"db.upsertEdgeByJson","read_only":false,"signature":"db.upsertEdgeByJson(label_name::STRING,start_spec::STRING,end_spec::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"name":"db.alterLabelModFields","read_only":false,"signature":"db.alterLabelModFields(label_type::STRING,label_name::STRING,mod_field_specs::LIST) :: (record_affected::INTEGER)"},{"name":"db.createEdgeLabel","read_only":false,"signature":"db.createEdgeLabel(type_name::STRING,field_specs::LIST) :: (::NUL)"},{"name":"db.addIndex","read_only":false,"signature":"db.addIndex(label_name::STRING,field_name::STRING,unique::BOOLEAN) :: (::NUL)"},{"name":"db.addVertexCompositeIndex","read_only":false,"signature":"db.addVertexCompositeIndex(label_name::STRING,field_names::LIST,unique::BOOLEAN) :: (::NUL)"},{"name":"db.addEdgeIndex","read_only":false,"signature":"db.addEdgeIndex(label_name::STRING,field_name::STRING,unique::BOOLEAN,) :: (::NUL)"},{"name":"db.addFullTextIndex","read_only":false,"signature":"db.addFullTextIndex(is_vertex::BOOLEAN,label_name::STRING,field_name::STRING) :: (::NUL)"},{"name":"db.deleteFullTextIndex","read_only":false,"signature":"db.deleteFullTextIndex(is_vertex::BOOLEAN,label_name::STRING,field_name::STRING) :: (::NUL)"},{"name":"db.rebuildFullTextIndex","read_only":false,"signature":"db.rebuildFullTextIndex(vertex_labels::STRING,edge_labels::STRING) :: (::NUL)"},{"name":"db.fullTextIndexes","read_only":true,"signature":"db.fullTextIndexes() :: (is_vertex::BOOLEAN,label::STRING,field::STRING)"},{"name":"db.addEdgeConstraints","read_only":false,"signature":"db.addEdgeConstraints(label_name::STRING,constraints::STRING) :: (::NUL)"},{"name":"db.clearEdgeConstraints","read_only":false,"signature":"db.clearEdgeConstraints(label_name::STRING) :: (::NUL)"},{"name":"dbms.procedures","read_only":true,"signature":"dbms.procedures() :: (name::STRING,signature::STRING,read_only::BOOLEAN)"},{"name":"dbms.meta.countDetail","read_only":true,"signature":"dbms.meta.countDetail() :: (is_vertex::BOOLEAN,label::STRING,count::INTEGER)"},{"name":"dbms.meta.count","read_only":true,"signature":"dbms.meta.count() :: (type::STRING,number::INTEGER)"},{"name":"dbms.meta.refreshCount","read_only":false,"signature":"dbms.meta.refreshCount() :: (::NUL)"},{"name":"dbms.security.isDefaultUserPassword","read_only":true,"signature":"dbms.security.isDefaultUserPassword() :: (isDefaultUserPassword::BOOLEAN)"},{"name":"dbms.security.changePassword","read_only":false,"signature":"dbms.security.changePassword(current_password::STRING,new_password::STRING) :: (::NUL)"},{"name":"dbms.security.changeUserPassword","read_only":false,"signature":"dbms.security.changeUserPassword(user_name::STRING,new_password::STRING) :: (::NUL)"},{"name":"dbms.security.createUser","read_only":false,"signature":"dbms.security.createUser(user_name::STRING,password::STRING) :: (::NUL)"},{"name":"dbms.security.deleteUser","read_only":false,"signature":"dbms.security.deleteUser(user_name::STRING) :: (::NUL)"},{"name":"dbms.security.setUserMemoryLimit","read_only":false,"signature":"dbms.security.setUserMemoryLimit(user_name::STRING,MemoryLimit::INTEGER) :: (::NUL)"},{"name":"dbms.security.listUsers","read_only":true,"signature":"dbms.security.listUsers() :: (user_name::STRING,user_info::MAP)"},{"name":"dbms.security.showCurrentUser","read_only":true,"signature":"dbms.security.showCurrentUser() :: (current_user::STRING)"},{"name":"dbms.security.listAllowedHosts","read_only":true,"signature":"dbms.security.listAllowedHosts() :: (host::STRING)"},{"name":"dbms.security.deleteAllowedHosts","read_only":false,"signature":"dbms.security.deleteAllowedHosts(hosts::LIST) :: (record_affected::INTEGER)"},{"name":"dbms.security.addAllowedHosts","read_only":false,"signature":"dbms.security.addAllowedHosts(hosts::LIST) :: (num_added::INTEGER)"},{"name":"dbms.graph.createGraph","read_only":false,"signature":"dbms.graph.createGraph(graph_name::STRING,description::STRING,max_size_GB::INTEGER) :: (::NUL)"},{"name":"dbms.graph.deleteGraph","read_only":false,"signature":"dbms.graph.deleteGraph(graph_name::STRING) :: (::NUL)"},{"name":"dbms.graph.modGraph","read_only":false,"signature":"dbms.graph.modGraph(graph_name::STRING,config::MAP) :: (::NUL)"},{"name":"dbms.graph.listGraphs","read_only":true,"signature":"dbms.graph.listGraphs() :: (graph_name::STRING,configuration::MAP)"},{"name":"dbms.graph.listUserGraphs","read_only":true,"signature":"dbms.graph.listUserGraphs(user_name::STRING) :: (graph_name::STRING,configuration::MAP)"},{"name":"dbms.graph.getGraphInfo","read_only":true,"signature":"dbms.graph.getGraphInfo() :: (graph_name::STRING,configuration::MAP)"},{"name":"dbms.graph.getGraphSchema","read_only":true,"signature":"dbms.graph.getGraphSchema() :: (schema::STRING)"},{"name":"dbms.system.info","read_only":true,"signature":"dbms.system.info() :: (name::STRING,value::ANY)"},{"name":"dbms.config.list","read_only":true,"signature":"dbms.config.list() :: (name::STRING,value::ANY)"},{"name":"dbms.config.update","read_only":false,"signature":"dbms.config.update(updates::MAP) :: (::NUL)"},{"name":"dbms.takeSnapshot","read_only":false,"signature":"dbms.takeSnapshot() :: (path::STRING)"},{"name":"dbms.listBackupFiles","read_only":true,"signature":"dbms.listBackupFiles() :: (file::STRING)"},{"name":"algo.shortestPath","read_only":true,"signature":"algo.shortestPath(startNode::NODE,endNode::NODE,config::MAP) :: (nodeCount::INTEGER,totalCost::FLOAT,path::STRING)"},{"name":"algo.allShortestPaths","read_only":true,"signature":"algo.allShortestPaths(startNode::NODE,endNode::NODE,config::MAP) :: (nodeIds::LIST,relationshipIds::LIST,cost::LIST)"},{"name":"algo.native.extract","read_only":true,"signature":"algo.native.extract(id::ANY,config::MAP) :: (value::ANY)"},{"name":"algo.pagerank","read_only":true,"signature":"algo.pagerank(num_iterations::INTEGER) :: (node::NODE,pr::FLOAT)"},{"name":"algo.jaccard","read_only":true,"signature":"algo.jaccard(lhs::ANY,) :: (similarity::FLOAT)"},{"name":"spatial.distance","read_only":true,"signature":"spatial.distance(Spatial1::STRING,Spatial2::STRING) :: (distance::DOUBLE)"},{"name":"db.addVertexVectorIndex","read_only":false,"signature":"db.addVertexVectorIndex(label_name::STRING,field_name::STRING,parameter::MAP) :: (::NUL)"},{"name":"db.deleteVertexVectorIndex","read_only":false,"signature":"db.deleteVertexVectorIndex(label_name::STRING,field_name::STRING) :: (::NUL)"},{"name":"db.showVertexVectorIndex","read_only":true,"signature":"db.showVertexVectorIndex() :: (label_name::STRING,field_name::STRING,index_type::STRING,dimension::INTEGER,distance_type::STRING,hnsm.m::INTEGER,hnsm.ef_construction::INTEGER)"},{"name":"db.vertexVectorKnnSearch","read_only":true,"signature":"db.vertexVectorKnnSearch(label_name::STRING,field_name::STRING,vec::LIST,parameter::MAP) :: (node::NODE,distance::FLOAT)"},{"name":"dbms.security.listRoles","read_only":true,"signature":"dbms.security.listRoles() :: (role_name::STRING,role_info::MAP)"},{"name":"dbms.security.createRole","read_only":false,"signature":"dbms.security.createRole(role_name::STRING,desc::STRING) :: (::NUL)"},{"name":"dbms.security.deleteRole","read_only":false,"signature":"dbms.security.deleteRole(role_name::STRING) :: (::NUL)"},{"name":"dbms.security.getUserInfo","read_only":true,"signature":"dbms.security.getUserInfo(user::STRING) :: (user_info::MAP)"},{"name":"dbms.security.getUserMemoryUsage","read_only":true,"signature":"dbms.security.getUserMemoryUsage(user::STRING) :: (memory_usage::INTEGER)"},{"name":"dbms.security.getUserPermissions","read_only":true,"signature":"dbms.security.getUserPermissions(user::STRING) :: (user_info::MAP)"},{"name":"dbms.security.getRoleInfo","read_only":true,"signature":"dbms.security.getRoleInfo(role::STRING) :: (role_info::MAP)"},{"name":"dbms.security.disableRole","read_only":false,"signature":"dbms.security.disableRole(role::STRING,disable::BOOLEAN) :: (::NUL)"},{"name":"dbms.security.modRoleDesc","read_only":false,"signature":"dbms.security.modRoleDesc(role::STRING,description::STRING) :: (::NUL)"},{"name":"dbms.security.rebuildRoleAccessLevel","read_only":false,"signature":"dbms.security.rebuildRoleAccessLevel(role::STRING,access_level::MAP) :: (::NUL)"},{"name":"dbms.security.modRoleAccessLevel","read_only":false,"signature":"dbms.security.modRoleAccessLevel(role::STRING,access_level::MAP) :: (::NUL)"},{"name":"dbms.security.modRoleFieldAccessLevel","read_only":false,"signature":"dbms.security.modRoleFieldAccessLevel(role::STRING,) :: (::NUL)"},{"name":"dbms.security.disableUser","read_only":false,"signature":"dbms.security.disableUser(user::STRING,disable::BOOLEAN) :: (::NUL)"},{"name":"dbms.security.setCurrentDesc","read_only":false,"signature":"dbms.security.setCurrentDesc(description::STRING) :: (::NUL)"},{"name":"dbms.security.setUserDesc","read_only":false,"signature":"dbms.security.setUserDesc(user::STRING,description::STRING) :: (::NUL)"},{"name":"dbms.security.deleteUserRoles","read_only":false,"signature":"dbms.security.deleteUserRoles(user::STRING,roles::LIST) :: (::NUL)"},{"name":"dbms.security.rebuildUserRoles","read_only":false,"signature":"dbms.security.rebuildUserRoles(user::STRING,roles::LIST) :: (::NUL)"},{"name":"dbms.security.addUserRoles","read_only":false,"signature":"dbms.security.addUserRoles(user::STRING,roles::LIST) :: (::NUL)"},{"name":"db.plugin.loadPlugin","read_only":false,"signature":"db.plugin.loadPlugin(plugin_type::STRING,plugin_name::STRING,plugin_content::ANY,code_type::STRING,plugin_description::STRING,read_only::BOOLEAN,version::STRING) :: (::NUL)"},{"name":"db.plugin.deletePlugin","read_only":false,"signature":"db.plugin.deletePlugin(plugin_type::STRING,plugin_name::STRING) :: (::NUL)"},{"name":"db.plugin.getPluginInfo","read_only":true,"signature":"db.plugin.getPluginInfo(plugin_type::STRING,plugin_name::STRING) :: (plugin_description::MAP)"},{"name":"db.plugin.listPlugin","read_only":false,"signature":"db.plugin.listPlugin(plugin_type::STRING,plugin_version::STRING) :: (plugin_description::MAP)"},{"name":"db.plugin.listUserPlugins","read_only":true,"signature":"db.plugin.listUserPlugins() :: (graph::STRING,plugins::MAP)"},{"name":"db.plugin.callPlugin","read_only":false,"signature":"db.plugin.callPlugin(plugin_type::STRING,plugin_name::STRING,param::STRING,timeout::DOUBLE,in_process::BOOLEAN) :: (result::STRING)"},{"name":"db.importor.dataImportor","read_only":false,"signature":"db.importor.dataImportor(description::STRING,content::STRING,continue_on_error::BOOLEAN,thread_nums::INTEGER,delimiter::STRING) :: (::NUL)"},{"name":"db.importor.fullImportor","read_only":false,"signature":"db.importor.fullImportor(conf::MAP) :: (result::STRING)"},{"name":"db.importor.fullFileImportor","read_only":false,"signature":"db.importor.fullFileImportor(graph_name::STRING,path::STRING) :: (::NUL)"},{"name":"db.importor.schemaImportor","read_only":false,"signature":"db.importor.schemaImportor(description::STRING) :: (::NUL)"},{"name":"db.deleteIndex","read_only":false,"signature":"db.deleteIndex(label_name::STRING,field_name::STRING) :: (::NUL)"},{"name":"db.deleteEdgeIndex","read_only":false,"signature":"db.deleteEdgeIndex(label_name::STRING,field_name::STRING) :: (::NUL)"},{"name":"db.deleteCompositeIndex","read_only":false,"signature":"db.deleteCompositeIndex(label_name::STRING,field_name::LIST) :: (::NUL)"},{"name":"db.flushDB","read_only":false,"signature":"db.flushDB() :: (::NUL)"},{"name":"db.dropDB","read_only":false,"signature":"db.dropDB() :: (::NUL)"},{"name":"db.dropAllVertex","read_only":false,"signature":"db.dropAllVertex() :: (::NUL)"},{"name":"dbms.task.listTasks","read_only":true,"signature":"dbms.task.listTasks() :: (tasks_info::MAP)"},{"name":"dbms.task.terminateTask","read_only":false,"signature":"dbms.task.terminateTask(task_id::STRING) :: (::NUL)"},{"name":"db.monitor.tuGraphInfo","read_only":false,"signature":"db.monitor.tuGraphInfo() :: (request::STRING)"},{"name":"db.monitor.serverInfo","read_only":false,"signature":"db.monitor.serverInfo() :: (cpu::STRING,memory::STRING,disk_rate::STRING,disk_storage::STRING)"},{"name":"dbms.ha.clusterInfo","read_only":true,"signature":"dbms.ha.clusterInfo() :: (cluster_info::LIST,is_master::BOOLEAN)"}] CALL dbms.procedures YIELD signature; -[{"signature":"db.subgraph(vids::LIST) :: (subgraph::STRING)"},{"signature":"db.vertexLabels() :: (label::STRING)"},{"signature":"db.edgeLabels() :: (label::STRING)"},{"signature":"db.indexes() :: (label::STRING,field::STRING,label_type::STRING,unique::BOOLEAN,pair_unique::BOOLEAN)"},{"signature":"db.listLabelIndexes(label_name::STRING,label_type::STRING) :: (label::STRING,field::STRING,unique::BOOLEAN,pair_unique::BOOLEAN)"},{"signature":"db.propertyKeys() :: (propertyKey::STRING)"},{"signature":"db.warmup() :: (time_used::STRING)"},{"signature":"db.createVertexLabelByJson(json_data::STRING) :: (::NUL)"},{"signature":"db.createEdgeLabelByJson(json_data::STRING) :: (::NUL)"},{"signature":"db.createVertexLabel(label_name::STRING,field_specs::LIST) :: (::NUL)"},{"signature":"db.createLabel(label_type::STRING,label_name::STRING,extra::STRING,field_specs::LIST) :: ()"},{"signature":"db.getLabelSchema(label_type::STRING,label_name::STRING) :: (name::STRING,type::STRING,optional::BOOLEAN)"},{"signature":"db.getVertexSchema(label::STRING) :: (schema::MAP)"},{"signature":"db.getEdgeSchema(label::STRING) :: (schema::MAP)"},{"signature":"db.deleteLabel(label_type::STRING,label_name::STRING) :: (::NUL)"},{"signature":"db.alterLabelDelFields(label_type::STRING,label_name::STRING,del_fields::LIST) :: (record_affected::INTEGER)"},{"signature":"db.alterLabelAddFields(label_type::STRING,label_name::STRING,add_field_spec_values::LIST) :: (record_affected::INTEGER)"},{"signature":"db.upsertVertex(label_name::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"signature":"db.upsertVertexByJson(label_name::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"signature":"db.upsertEdge(label_name::STRING,start_spec::STRING,end_spec::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"signature":"db.upsertEdgeByJson(label_name::STRING,start_spec::STRING,end_spec::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"signature":"db.alterLabelModFields(label_type::STRING,label_name::STRING,mod_field_specs::LIST) :: (record_affected::INTEGER)"},{"signature":"db.createEdgeLabel(type_name::STRING,field_specs::LIST) :: (::NUL)"},{"signature":"db.addIndex(label_name::STRING,field_name::STRING,unique::BOOLEAN) :: (::NUL)"},{"signature":"db.addVertexCompositeIndex(label_name::STRING,field_names::LIST,unique::BOOLEAN) :: (::NUL)"},{"signature":"db.addEdgeIndex(label_name::STRING,field_name::STRING,unique::BOOLEAN,) :: (::NUL)"},{"signature":"db.addFullTextIndex(is_vertex::BOOLEAN,label_name::STRING,field_name::STRING) :: (::NUL)"},{"signature":"db.deleteFullTextIndex(is_vertex::BOOLEAN,label_name::STRING,field_name::STRING) :: (::NUL)"},{"signature":"db.rebuildFullTextIndex(vertex_labels::STRING,edge_labels::STRING) :: (::NUL)"},{"signature":"db.fullTextIndexes() :: (is_vertex::BOOLEAN,label::STRING,field::STRING)"},{"signature":"db.addEdgeConstraints(label_name::STRING,constraints::STRING) :: (::NUL)"},{"signature":"db.clearEdgeConstraints(label_name::STRING) :: (::NUL)"},{"signature":"dbms.procedures() :: (name::STRING,signature::STRING,read_only::BOOLEAN)"},{"signature":"dbms.meta.countDetail() :: (is_vertex::BOOLEAN,label::STRING,count::INTEGER)"},{"signature":"dbms.meta.count() :: (type::STRING,number::INTEGER)"},{"signature":"dbms.meta.refreshCount() :: (::NUL)"},{"signature":"dbms.security.isDefaultUserPassword() :: (isDefaultUserPassword::BOOLEAN)"},{"signature":"dbms.security.changePassword(current_password::STRING,new_password::STRING) :: (::NUL)"},{"signature":"dbms.security.changeUserPassword(user_name::STRING,new_password::STRING) :: (::NUL)"},{"signature":"dbms.security.createUser(user_name::STRING,password::STRING) :: (::NUL)"},{"signature":"dbms.security.deleteUser(user_name::STRING) :: (::NUL)"},{"signature":"dbms.security.setUserMemoryLimit(user_name::STRING,MemoryLimit::INTEGER) :: (::NUL)"},{"signature":"dbms.security.listUsers() :: (user_name::STRING,user_info::MAP)"},{"signature":"dbms.security.showCurrentUser() :: (current_user::STRING)"},{"signature":"dbms.security.listAllowedHosts() :: (host::STRING)"},{"signature":"dbms.security.deleteAllowedHosts(hosts::LIST) :: (record_affected::INTEGER)"},{"signature":"dbms.security.addAllowedHosts(hosts::LIST) :: (num_added::INTEGER)"},{"signature":"dbms.graph.createGraph(graph_name::STRING,description::STRING,max_size_GB::INTEGER) :: (::NUL)"},{"signature":"dbms.graph.deleteGraph(graph_name::STRING) :: (::NUL)"},{"signature":"dbms.graph.modGraph(graph_name::STRING,config::MAP) :: (::NUL)"},{"signature":"dbms.graph.listGraphs() :: (graph_name::STRING,configuration::MAP)"},{"signature":"dbms.graph.listUserGraphs(user_name::STRING) :: (graph_name::STRING,configuration::MAP)"},{"signature":"dbms.graph.getGraphInfo() :: (graph_name::STRING,configuration::MAP)"},{"signature":"dbms.graph.getGraphSchema() :: (schema::STRING)"},{"signature":"dbms.system.info() :: (name::STRING,value::ANY)"},{"signature":"dbms.config.list() :: (name::STRING,value::ANY)"},{"signature":"dbms.config.update(updates::MAP) :: (::NUL)"},{"signature":"dbms.takeSnapshot() :: (path::STRING)"},{"signature":"dbms.listBackupFiles() :: (file::STRING)"},{"signature":"algo.shortestPath(startNode::NODE,endNode::NODE,config::MAP) :: (nodeCount::INTEGER,totalCost::FLOAT,path::STRING)"},{"signature":"algo.allShortestPaths(startNode::NODE,endNode::NODE,config::MAP) :: (nodeIds::LIST,relationshipIds::LIST,cost::LIST)"},{"signature":"algo.native.extract(id::ANY,config::MAP) :: (value::ANY)"},{"signature":"algo.pagerank(num_iterations::INTEGER) :: (node::NODE,pr::FLOAT)"},{"signature":"algo.jaccard(lhs::ANY,) :: (similarity::FLOAT)"},{"signature":"spatial.distance(Spatial1::STRING,Spatial2::STRING) :: (distance::DOUBLE)"},{"signature":"db.addVertexVectorIndex(label_name::STRING,field_name::STRING,parameter::MAP) :: (::NUL)"},{"signature":"db.deleteVertexVectorIndex(label_name::STRING,field_name::STRING) :: (::NUL)"},{"signature":"db.showVertexVectorIndex() :: (label_name::STRING,field_name::STRING,index_type::STRING,dimension::INTEGER,distance_type::STRING,hnsm.m::INTEGER,hnsm.ef_construction::INTEGER)"},{"signature":"db.vertexVectorIndexQuery(label_name::STRING,field_name::STRING,vec::LIST,parameter::MAP) :: (node::NODE,score::FLOAT)"},{"signature":"dbms.security.listRoles() :: (role_name::STRING,role_info::MAP)"},{"signature":"dbms.security.createRole(role_name::STRING,desc::STRING) :: (::NUL)"},{"signature":"dbms.security.deleteRole(role_name::STRING) :: (::NUL)"},{"signature":"dbms.security.getUserInfo(user::STRING) :: (user_info::MAP)"},{"signature":"dbms.security.getUserMemoryUsage(user::STRING) :: (memory_usage::INTEGER)"},{"signature":"dbms.security.getUserPermissions(user::STRING) :: (user_info::MAP)"},{"signature":"dbms.security.getRoleInfo(role::STRING) :: (role_info::MAP)"},{"signature":"dbms.security.disableRole(role::STRING,disable::BOOLEAN) :: (::NUL)"},{"signature":"dbms.security.modRoleDesc(role::STRING,description::STRING) :: (::NUL)"},{"signature":"dbms.security.rebuildRoleAccessLevel(role::STRING,access_level::MAP) :: (::NUL)"},{"signature":"dbms.security.modRoleAccessLevel(role::STRING,access_level::MAP) :: (::NUL)"},{"signature":"dbms.security.modRoleFieldAccessLevel(role::STRING,) :: (::NUL)"},{"signature":"dbms.security.disableUser(user::STRING,disable::BOOLEAN) :: (::NUL)"},{"signature":"dbms.security.setCurrentDesc(description::STRING) :: (::NUL)"},{"signature":"dbms.security.setUserDesc(user::STRING,description::STRING) :: (::NUL)"},{"signature":"dbms.security.deleteUserRoles(user::STRING,roles::LIST) :: (::NUL)"},{"signature":"dbms.security.rebuildUserRoles(user::STRING,roles::LIST) :: (::NUL)"},{"signature":"dbms.security.addUserRoles(user::STRING,roles::LIST) :: (::NUL)"},{"signature":"db.plugin.loadPlugin(plugin_type::STRING,plugin_name::STRING,plugin_content::ANY,code_type::STRING,plugin_description::STRING,read_only::BOOLEAN,version::STRING) :: (::NUL)"},{"signature":"db.plugin.deletePlugin(plugin_type::STRING,plugin_name::STRING) :: (::NUL)"},{"signature":"db.plugin.getPluginInfo(plugin_type::STRING,plugin_name::STRING) :: (plugin_description::MAP)"},{"signature":"db.plugin.listPlugin(plugin_type::STRING,plugin_version::STRING) :: (plugin_description::MAP)"},{"signature":"db.plugin.listUserPlugins() :: (graph::STRING,plugins::MAP)"},{"signature":"db.plugin.callPlugin(plugin_type::STRING,plugin_name::STRING,param::STRING,timeout::DOUBLE,in_process::BOOLEAN) :: (result::STRING)"},{"signature":"db.importor.dataImportor(description::STRING,content::STRING,continue_on_error::BOOLEAN,thread_nums::INTEGER,delimiter::STRING) :: (::NUL)"},{"signature":"db.importor.fullImportor(conf::MAP) :: (result::STRING)"},{"signature":"db.importor.fullFileImportor(graph_name::STRING,path::STRING) :: (::NUL)"},{"signature":"db.importor.schemaImportor(description::STRING) :: (::NUL)"},{"signature":"db.deleteIndex(label_name::STRING,field_name::STRING) :: (::NUL)"},{"signature":"db.deleteEdgeIndex(label_name::STRING,field_name::STRING) :: (::NUL)"},{"signature":"db.deleteCompositeIndex(label_name::STRING,field_name::LIST) :: (::NUL)"},{"signature":"db.flushDB() :: (::NUL)"},{"signature":"db.dropDB() :: (::NUL)"},{"signature":"db.dropAllVertex() :: (::NUL)"},{"signature":"dbms.task.listTasks() :: (tasks_info::MAP)"},{"signature":"dbms.task.terminateTask(task_id::STRING) :: (::NUL)"},{"signature":"db.monitor.tuGraphInfo() :: (request::STRING)"},{"signature":"db.monitor.serverInfo() :: (cpu::STRING,memory::STRING,disk_rate::STRING,disk_storage::STRING)"},{"signature":"dbms.ha.clusterInfo() :: (cluster_info::LIST,is_master::BOOLEAN)"}] +[{"signature":"db.subgraph(vids::LIST) :: (subgraph::STRING)"},{"signature":"db.vertexLabels() :: (label::STRING)"},{"signature":"db.edgeLabels() :: (label::STRING)"},{"signature":"db.indexes() :: (label::STRING,field::STRING,label_type::STRING,unique::BOOLEAN,pair_unique::BOOLEAN)"},{"signature":"db.listLabelIndexes(label_name::STRING,label_type::STRING) :: (label::STRING,field::STRING,unique::BOOLEAN,pair_unique::BOOLEAN)"},{"signature":"db.propertyKeys() :: (propertyKey::STRING)"},{"signature":"db.warmup() :: (time_used::STRING)"},{"signature":"db.createVertexLabelByJson(json_data::STRING) :: (::NUL)"},{"signature":"db.createEdgeLabelByJson(json_data::STRING) :: (::NUL)"},{"signature":"db.createVertexLabel(label_name::STRING,field_specs::LIST) :: (::NUL)"},{"signature":"db.createLabel(label_type::STRING,label_name::STRING,extra::STRING,field_specs::LIST) :: ()"},{"signature":"db.getLabelSchema(label_type::STRING,label_name::STRING) :: (name::STRING,type::STRING,optional::BOOLEAN)"},{"signature":"db.getVertexSchema(label::STRING) :: (schema::MAP)"},{"signature":"db.getEdgeSchema(label::STRING) :: (schema::MAP)"},{"signature":"db.deleteLabel(label_type::STRING,label_name::STRING) :: (::NUL)"},{"signature":"db.alterLabelDelFields(label_type::STRING,label_name::STRING,del_fields::LIST) :: (record_affected::INTEGER)"},{"signature":"db.alterLabelAddFields(label_type::STRING,label_name::STRING,add_field_spec_values::LIST) :: (record_affected::INTEGER)"},{"signature":"db.upsertVertex(label_name::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"signature":"db.upsertVertexByJson(label_name::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"signature":"db.upsertEdge(label_name::STRING,start_spec::STRING,end_spec::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"signature":"db.upsertEdgeByJson(label_name::STRING,start_spec::STRING,end_spec::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"signature":"db.alterLabelModFields(label_type::STRING,label_name::STRING,mod_field_specs::LIST) :: (record_affected::INTEGER)"},{"signature":"db.createEdgeLabel(type_name::STRING,field_specs::LIST) :: (::NUL)"},{"signature":"db.addIndex(label_name::STRING,field_name::STRING,unique::BOOLEAN) :: (::NUL)"},{"signature":"db.addVertexCompositeIndex(label_name::STRING,field_names::LIST,unique::BOOLEAN) :: (::NUL)"},{"signature":"db.addEdgeIndex(label_name::STRING,field_name::STRING,unique::BOOLEAN,) :: (::NUL)"},{"signature":"db.addFullTextIndex(is_vertex::BOOLEAN,label_name::STRING,field_name::STRING) :: (::NUL)"},{"signature":"db.deleteFullTextIndex(is_vertex::BOOLEAN,label_name::STRING,field_name::STRING) :: (::NUL)"},{"signature":"db.rebuildFullTextIndex(vertex_labels::STRING,edge_labels::STRING) :: (::NUL)"},{"signature":"db.fullTextIndexes() :: (is_vertex::BOOLEAN,label::STRING,field::STRING)"},{"signature":"db.addEdgeConstraints(label_name::STRING,constraints::STRING) :: (::NUL)"},{"signature":"db.clearEdgeConstraints(label_name::STRING) :: (::NUL)"},{"signature":"dbms.procedures() :: (name::STRING,signature::STRING,read_only::BOOLEAN)"},{"signature":"dbms.meta.countDetail() :: (is_vertex::BOOLEAN,label::STRING,count::INTEGER)"},{"signature":"dbms.meta.count() :: (type::STRING,number::INTEGER)"},{"signature":"dbms.meta.refreshCount() :: (::NUL)"},{"signature":"dbms.security.isDefaultUserPassword() :: (isDefaultUserPassword::BOOLEAN)"},{"signature":"dbms.security.changePassword(current_password::STRING,new_password::STRING) :: (::NUL)"},{"signature":"dbms.security.changeUserPassword(user_name::STRING,new_password::STRING) :: (::NUL)"},{"signature":"dbms.security.createUser(user_name::STRING,password::STRING) :: (::NUL)"},{"signature":"dbms.security.deleteUser(user_name::STRING) :: (::NUL)"},{"signature":"dbms.security.setUserMemoryLimit(user_name::STRING,MemoryLimit::INTEGER) :: (::NUL)"},{"signature":"dbms.security.listUsers() :: (user_name::STRING,user_info::MAP)"},{"signature":"dbms.security.showCurrentUser() :: (current_user::STRING)"},{"signature":"dbms.security.listAllowedHosts() :: (host::STRING)"},{"signature":"dbms.security.deleteAllowedHosts(hosts::LIST) :: (record_affected::INTEGER)"},{"signature":"dbms.security.addAllowedHosts(hosts::LIST) :: (num_added::INTEGER)"},{"signature":"dbms.graph.createGraph(graph_name::STRING,description::STRING,max_size_GB::INTEGER) :: (::NUL)"},{"signature":"dbms.graph.deleteGraph(graph_name::STRING) :: (::NUL)"},{"signature":"dbms.graph.modGraph(graph_name::STRING,config::MAP) :: (::NUL)"},{"signature":"dbms.graph.listGraphs() :: (graph_name::STRING,configuration::MAP)"},{"signature":"dbms.graph.listUserGraphs(user_name::STRING) :: (graph_name::STRING,configuration::MAP)"},{"signature":"dbms.graph.getGraphInfo() :: (graph_name::STRING,configuration::MAP)"},{"signature":"dbms.graph.getGraphSchema() :: (schema::STRING)"},{"signature":"dbms.system.info() :: (name::STRING,value::ANY)"},{"signature":"dbms.config.list() :: (name::STRING,value::ANY)"},{"signature":"dbms.config.update(updates::MAP) :: (::NUL)"},{"signature":"dbms.takeSnapshot() :: (path::STRING)"},{"signature":"dbms.listBackupFiles() :: (file::STRING)"},{"signature":"algo.shortestPath(startNode::NODE,endNode::NODE,config::MAP) :: (nodeCount::INTEGER,totalCost::FLOAT,path::STRING)"},{"signature":"algo.allShortestPaths(startNode::NODE,endNode::NODE,config::MAP) :: (nodeIds::LIST,relationshipIds::LIST,cost::LIST)"},{"signature":"algo.native.extract(id::ANY,config::MAP) :: (value::ANY)"},{"signature":"algo.pagerank(num_iterations::INTEGER) :: (node::NODE,pr::FLOAT)"},{"signature":"algo.jaccard(lhs::ANY,) :: (similarity::FLOAT)"},{"signature":"spatial.distance(Spatial1::STRING,Spatial2::STRING) :: (distance::DOUBLE)"},{"signature":"db.addVertexVectorIndex(label_name::STRING,field_name::STRING,parameter::MAP) :: (::NUL)"},{"signature":"db.deleteVertexVectorIndex(label_name::STRING,field_name::STRING) :: (::NUL)"},{"signature":"db.showVertexVectorIndex() :: (label_name::STRING,field_name::STRING,index_type::STRING,dimension::INTEGER,distance_type::STRING,hnsm.m::INTEGER,hnsm.ef_construction::INTEGER)"},{"signature":"db.vertexVectorKnnSearch(label_name::STRING,field_name::STRING,vec::LIST,parameter::MAP) :: (node::NODE,distance::FLOAT)"},{"signature":"dbms.security.listRoles() :: (role_name::STRING,role_info::MAP)"},{"signature":"dbms.security.createRole(role_name::STRING,desc::STRING) :: (::NUL)"},{"signature":"dbms.security.deleteRole(role_name::STRING) :: (::NUL)"},{"signature":"dbms.security.getUserInfo(user::STRING) :: (user_info::MAP)"},{"signature":"dbms.security.getUserMemoryUsage(user::STRING) :: (memory_usage::INTEGER)"},{"signature":"dbms.security.getUserPermissions(user::STRING) :: (user_info::MAP)"},{"signature":"dbms.security.getRoleInfo(role::STRING) :: (role_info::MAP)"},{"signature":"dbms.security.disableRole(role::STRING,disable::BOOLEAN) :: (::NUL)"},{"signature":"dbms.security.modRoleDesc(role::STRING,description::STRING) :: (::NUL)"},{"signature":"dbms.security.rebuildRoleAccessLevel(role::STRING,access_level::MAP) :: (::NUL)"},{"signature":"dbms.security.modRoleAccessLevel(role::STRING,access_level::MAP) :: (::NUL)"},{"signature":"dbms.security.modRoleFieldAccessLevel(role::STRING,) :: (::NUL)"},{"signature":"dbms.security.disableUser(user::STRING,disable::BOOLEAN) :: (::NUL)"},{"signature":"dbms.security.setCurrentDesc(description::STRING) :: (::NUL)"},{"signature":"dbms.security.setUserDesc(user::STRING,description::STRING) :: (::NUL)"},{"signature":"dbms.security.deleteUserRoles(user::STRING,roles::LIST) :: (::NUL)"},{"signature":"dbms.security.rebuildUserRoles(user::STRING,roles::LIST) :: (::NUL)"},{"signature":"dbms.security.addUserRoles(user::STRING,roles::LIST) :: (::NUL)"},{"signature":"db.plugin.loadPlugin(plugin_type::STRING,plugin_name::STRING,plugin_content::ANY,code_type::STRING,plugin_description::STRING,read_only::BOOLEAN,version::STRING) :: (::NUL)"},{"signature":"db.plugin.deletePlugin(plugin_type::STRING,plugin_name::STRING) :: (::NUL)"},{"signature":"db.plugin.getPluginInfo(plugin_type::STRING,plugin_name::STRING) :: (plugin_description::MAP)"},{"signature":"db.plugin.listPlugin(plugin_type::STRING,plugin_version::STRING) :: (plugin_description::MAP)"},{"signature":"db.plugin.listUserPlugins() :: (graph::STRING,plugins::MAP)"},{"signature":"db.plugin.callPlugin(plugin_type::STRING,plugin_name::STRING,param::STRING,timeout::DOUBLE,in_process::BOOLEAN) :: (result::STRING)"},{"signature":"db.importor.dataImportor(description::STRING,content::STRING,continue_on_error::BOOLEAN,thread_nums::INTEGER,delimiter::STRING) :: (::NUL)"},{"signature":"db.importor.fullImportor(conf::MAP) :: (result::STRING)"},{"signature":"db.importor.fullFileImportor(graph_name::STRING,path::STRING) :: (::NUL)"},{"signature":"db.importor.schemaImportor(description::STRING) :: (::NUL)"},{"signature":"db.deleteIndex(label_name::STRING,field_name::STRING) :: (::NUL)"},{"signature":"db.deleteEdgeIndex(label_name::STRING,field_name::STRING) :: (::NUL)"},{"signature":"db.deleteCompositeIndex(label_name::STRING,field_name::LIST) :: (::NUL)"},{"signature":"db.flushDB() :: (::NUL)"},{"signature":"db.dropDB() :: (::NUL)"},{"signature":"db.dropAllVertex() :: (::NUL)"},{"signature":"dbms.task.listTasks() :: (tasks_info::MAP)"},{"signature":"dbms.task.terminateTask(task_id::STRING) :: (::NUL)"},{"signature":"db.monitor.tuGraphInfo() :: (request::STRING)"},{"signature":"db.monitor.serverInfo() :: (cpu::STRING,memory::STRING,disk_rate::STRING,disk_storage::STRING)"},{"signature":"dbms.ha.clusterInfo() :: (cluster_info::LIST,is_master::BOOLEAN)"}] CALL dbms.procedures YIELD signature, name; -[{"name":"db.subgraph","signature":"db.subgraph(vids::LIST) :: (subgraph::STRING)"},{"name":"db.vertexLabels","signature":"db.vertexLabels() :: (label::STRING)"},{"name":"db.edgeLabels","signature":"db.edgeLabels() :: (label::STRING)"},{"name":"db.indexes","signature":"db.indexes() :: (label::STRING,field::STRING,label_type::STRING,unique::BOOLEAN,pair_unique::BOOLEAN)"},{"name":"db.listLabelIndexes","signature":"db.listLabelIndexes(label_name::STRING,label_type::STRING) :: (label::STRING,field::STRING,unique::BOOLEAN,pair_unique::BOOLEAN)"},{"name":"db.propertyKeys","signature":"db.propertyKeys() :: (propertyKey::STRING)"},{"name":"db.warmup","signature":"db.warmup() :: (time_used::STRING)"},{"name":"db.createVertexLabelByJson","signature":"db.createVertexLabelByJson(json_data::STRING) :: (::NUL)"},{"name":"db.createEdgeLabelByJson","signature":"db.createEdgeLabelByJson(json_data::STRING) :: (::NUL)"},{"name":"db.createVertexLabel","signature":"db.createVertexLabel(label_name::STRING,field_specs::LIST) :: (::NUL)"},{"name":"db.createLabel","signature":"db.createLabel(label_type::STRING,label_name::STRING,extra::STRING,field_specs::LIST) :: ()"},{"name":"db.getLabelSchema","signature":"db.getLabelSchema(label_type::STRING,label_name::STRING) :: (name::STRING,type::STRING,optional::BOOLEAN)"},{"name":"db.getVertexSchema","signature":"db.getVertexSchema(label::STRING) :: (schema::MAP)"},{"name":"db.getEdgeSchema","signature":"db.getEdgeSchema(label::STRING) :: (schema::MAP)"},{"name":"db.deleteLabel","signature":"db.deleteLabel(label_type::STRING,label_name::STRING) :: (::NUL)"},{"name":"db.alterLabelDelFields","signature":"db.alterLabelDelFields(label_type::STRING,label_name::STRING,del_fields::LIST) :: (record_affected::INTEGER)"},{"name":"db.alterLabelAddFields","signature":"db.alterLabelAddFields(label_type::STRING,label_name::STRING,add_field_spec_values::LIST) :: (record_affected::INTEGER)"},{"name":"db.upsertVertex","signature":"db.upsertVertex(label_name::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"name":"db.upsertVertexByJson","signature":"db.upsertVertexByJson(label_name::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"name":"db.upsertEdge","signature":"db.upsertEdge(label_name::STRING,start_spec::STRING,end_spec::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"name":"db.upsertEdgeByJson","signature":"db.upsertEdgeByJson(label_name::STRING,start_spec::STRING,end_spec::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"name":"db.alterLabelModFields","signature":"db.alterLabelModFields(label_type::STRING,label_name::STRING,mod_field_specs::LIST) :: (record_affected::INTEGER)"},{"name":"db.createEdgeLabel","signature":"db.createEdgeLabel(type_name::STRING,field_specs::LIST) :: (::NUL)"},{"name":"db.addIndex","signature":"db.addIndex(label_name::STRING,field_name::STRING,unique::BOOLEAN) :: (::NUL)"},{"name":"db.addVertexCompositeIndex","signature":"db.addVertexCompositeIndex(label_name::STRING,field_names::LIST,unique::BOOLEAN) :: (::NUL)"},{"name":"db.addEdgeIndex","signature":"db.addEdgeIndex(label_name::STRING,field_name::STRING,unique::BOOLEAN,) :: (::NUL)"},{"name":"db.addFullTextIndex","signature":"db.addFullTextIndex(is_vertex::BOOLEAN,label_name::STRING,field_name::STRING) :: (::NUL)"},{"name":"db.deleteFullTextIndex","signature":"db.deleteFullTextIndex(is_vertex::BOOLEAN,label_name::STRING,field_name::STRING) :: (::NUL)"},{"name":"db.rebuildFullTextIndex","signature":"db.rebuildFullTextIndex(vertex_labels::STRING,edge_labels::STRING) :: (::NUL)"},{"name":"db.fullTextIndexes","signature":"db.fullTextIndexes() :: (is_vertex::BOOLEAN,label::STRING,field::STRING)"},{"name":"db.addEdgeConstraints","signature":"db.addEdgeConstraints(label_name::STRING,constraints::STRING) :: (::NUL)"},{"name":"db.clearEdgeConstraints","signature":"db.clearEdgeConstraints(label_name::STRING) :: (::NUL)"},{"name":"dbms.procedures","signature":"dbms.procedures() :: (name::STRING,signature::STRING,read_only::BOOLEAN)"},{"name":"dbms.meta.countDetail","signature":"dbms.meta.countDetail() :: (is_vertex::BOOLEAN,label::STRING,count::INTEGER)"},{"name":"dbms.meta.count","signature":"dbms.meta.count() :: (type::STRING,number::INTEGER)"},{"name":"dbms.meta.refreshCount","signature":"dbms.meta.refreshCount() :: (::NUL)"},{"name":"dbms.security.isDefaultUserPassword","signature":"dbms.security.isDefaultUserPassword() :: (isDefaultUserPassword::BOOLEAN)"},{"name":"dbms.security.changePassword","signature":"dbms.security.changePassword(current_password::STRING,new_password::STRING) :: (::NUL)"},{"name":"dbms.security.changeUserPassword","signature":"dbms.security.changeUserPassword(user_name::STRING,new_password::STRING) :: (::NUL)"},{"name":"dbms.security.createUser","signature":"dbms.security.createUser(user_name::STRING,password::STRING) :: (::NUL)"},{"name":"dbms.security.deleteUser","signature":"dbms.security.deleteUser(user_name::STRING) :: (::NUL)"},{"name":"dbms.security.setUserMemoryLimit","signature":"dbms.security.setUserMemoryLimit(user_name::STRING,MemoryLimit::INTEGER) :: (::NUL)"},{"name":"dbms.security.listUsers","signature":"dbms.security.listUsers() :: (user_name::STRING,user_info::MAP)"},{"name":"dbms.security.showCurrentUser","signature":"dbms.security.showCurrentUser() :: (current_user::STRING)"},{"name":"dbms.security.listAllowedHosts","signature":"dbms.security.listAllowedHosts() :: (host::STRING)"},{"name":"dbms.security.deleteAllowedHosts","signature":"dbms.security.deleteAllowedHosts(hosts::LIST) :: (record_affected::INTEGER)"},{"name":"dbms.security.addAllowedHosts","signature":"dbms.security.addAllowedHosts(hosts::LIST) :: (num_added::INTEGER)"},{"name":"dbms.graph.createGraph","signature":"dbms.graph.createGraph(graph_name::STRING,description::STRING,max_size_GB::INTEGER) :: (::NUL)"},{"name":"dbms.graph.deleteGraph","signature":"dbms.graph.deleteGraph(graph_name::STRING) :: (::NUL)"},{"name":"dbms.graph.modGraph","signature":"dbms.graph.modGraph(graph_name::STRING,config::MAP) :: (::NUL)"},{"name":"dbms.graph.listGraphs","signature":"dbms.graph.listGraphs() :: (graph_name::STRING,configuration::MAP)"},{"name":"dbms.graph.listUserGraphs","signature":"dbms.graph.listUserGraphs(user_name::STRING) :: (graph_name::STRING,configuration::MAP)"},{"name":"dbms.graph.getGraphInfo","signature":"dbms.graph.getGraphInfo() :: (graph_name::STRING,configuration::MAP)"},{"name":"dbms.graph.getGraphSchema","signature":"dbms.graph.getGraphSchema() :: (schema::STRING)"},{"name":"dbms.system.info","signature":"dbms.system.info() :: (name::STRING,value::ANY)"},{"name":"dbms.config.list","signature":"dbms.config.list() :: (name::STRING,value::ANY)"},{"name":"dbms.config.update","signature":"dbms.config.update(updates::MAP) :: (::NUL)"},{"name":"dbms.takeSnapshot","signature":"dbms.takeSnapshot() :: (path::STRING)"},{"name":"dbms.listBackupFiles","signature":"dbms.listBackupFiles() :: (file::STRING)"},{"name":"algo.shortestPath","signature":"algo.shortestPath(startNode::NODE,endNode::NODE,config::MAP) :: (nodeCount::INTEGER,totalCost::FLOAT,path::STRING)"},{"name":"algo.allShortestPaths","signature":"algo.allShortestPaths(startNode::NODE,endNode::NODE,config::MAP) :: (nodeIds::LIST,relationshipIds::LIST,cost::LIST)"},{"name":"algo.native.extract","signature":"algo.native.extract(id::ANY,config::MAP) :: (value::ANY)"},{"name":"algo.pagerank","signature":"algo.pagerank(num_iterations::INTEGER) :: (node::NODE,pr::FLOAT)"},{"name":"algo.jaccard","signature":"algo.jaccard(lhs::ANY,) :: (similarity::FLOAT)"},{"name":"spatial.distance","signature":"spatial.distance(Spatial1::STRING,Spatial2::STRING) :: (distance::DOUBLE)"},{"name":"db.addVertexVectorIndex","signature":"db.addVertexVectorIndex(label_name::STRING,field_name::STRING,parameter::MAP) :: (::NUL)"},{"name":"db.deleteVertexVectorIndex","signature":"db.deleteVertexVectorIndex(label_name::STRING,field_name::STRING) :: (::NUL)"},{"name":"db.showVertexVectorIndex","signature":"db.showVertexVectorIndex() :: (label_name::STRING,field_name::STRING,index_type::STRING,dimension::INTEGER,distance_type::STRING,hnsm.m::INTEGER,hnsm.ef_construction::INTEGER)"},{"name":"db.vertexVectorIndexQuery","signature":"db.vertexVectorIndexQuery(label_name::STRING,field_name::STRING,vec::LIST,parameter::MAP) :: (node::NODE,score::FLOAT)"},{"name":"dbms.security.listRoles","signature":"dbms.security.listRoles() :: (role_name::STRING,role_info::MAP)"},{"name":"dbms.security.createRole","signature":"dbms.security.createRole(role_name::STRING,desc::STRING) :: (::NUL)"},{"name":"dbms.security.deleteRole","signature":"dbms.security.deleteRole(role_name::STRING) :: (::NUL)"},{"name":"dbms.security.getUserInfo","signature":"dbms.security.getUserInfo(user::STRING) :: (user_info::MAP)"},{"name":"dbms.security.getUserMemoryUsage","signature":"dbms.security.getUserMemoryUsage(user::STRING) :: (memory_usage::INTEGER)"},{"name":"dbms.security.getUserPermissions","signature":"dbms.security.getUserPermissions(user::STRING) :: (user_info::MAP)"},{"name":"dbms.security.getRoleInfo","signature":"dbms.security.getRoleInfo(role::STRING) :: (role_info::MAP)"},{"name":"dbms.security.disableRole","signature":"dbms.security.disableRole(role::STRING,disable::BOOLEAN) :: (::NUL)"},{"name":"dbms.security.modRoleDesc","signature":"dbms.security.modRoleDesc(role::STRING,description::STRING) :: (::NUL)"},{"name":"dbms.security.rebuildRoleAccessLevel","signature":"dbms.security.rebuildRoleAccessLevel(role::STRING,access_level::MAP) :: (::NUL)"},{"name":"dbms.security.modRoleAccessLevel","signature":"dbms.security.modRoleAccessLevel(role::STRING,access_level::MAP) :: (::NUL)"},{"name":"dbms.security.modRoleFieldAccessLevel","signature":"dbms.security.modRoleFieldAccessLevel(role::STRING,) :: (::NUL)"},{"name":"dbms.security.disableUser","signature":"dbms.security.disableUser(user::STRING,disable::BOOLEAN) :: (::NUL)"},{"name":"dbms.security.setCurrentDesc","signature":"dbms.security.setCurrentDesc(description::STRING) :: (::NUL)"},{"name":"dbms.security.setUserDesc","signature":"dbms.security.setUserDesc(user::STRING,description::STRING) :: (::NUL)"},{"name":"dbms.security.deleteUserRoles","signature":"dbms.security.deleteUserRoles(user::STRING,roles::LIST) :: (::NUL)"},{"name":"dbms.security.rebuildUserRoles","signature":"dbms.security.rebuildUserRoles(user::STRING,roles::LIST) :: (::NUL)"},{"name":"dbms.security.addUserRoles","signature":"dbms.security.addUserRoles(user::STRING,roles::LIST) :: (::NUL)"},{"name":"db.plugin.loadPlugin","signature":"db.plugin.loadPlugin(plugin_type::STRING,plugin_name::STRING,plugin_content::ANY,code_type::STRING,plugin_description::STRING,read_only::BOOLEAN,version::STRING) :: (::NUL)"},{"name":"db.plugin.deletePlugin","signature":"db.plugin.deletePlugin(plugin_type::STRING,plugin_name::STRING) :: (::NUL)"},{"name":"db.plugin.getPluginInfo","signature":"db.plugin.getPluginInfo(plugin_type::STRING,plugin_name::STRING) :: (plugin_description::MAP)"},{"name":"db.plugin.listPlugin","signature":"db.plugin.listPlugin(plugin_type::STRING,plugin_version::STRING) :: (plugin_description::MAP)"},{"name":"db.plugin.listUserPlugins","signature":"db.plugin.listUserPlugins() :: (graph::STRING,plugins::MAP)"},{"name":"db.plugin.callPlugin","signature":"db.plugin.callPlugin(plugin_type::STRING,plugin_name::STRING,param::STRING,timeout::DOUBLE,in_process::BOOLEAN) :: (result::STRING)"},{"name":"db.importor.dataImportor","signature":"db.importor.dataImportor(description::STRING,content::STRING,continue_on_error::BOOLEAN,thread_nums::INTEGER,delimiter::STRING) :: (::NUL)"},{"name":"db.importor.fullImportor","signature":"db.importor.fullImportor(conf::MAP) :: (result::STRING)"},{"name":"db.importor.fullFileImportor","signature":"db.importor.fullFileImportor(graph_name::STRING,path::STRING) :: (::NUL)"},{"name":"db.importor.schemaImportor","signature":"db.importor.schemaImportor(description::STRING) :: (::NUL)"},{"name":"db.deleteIndex","signature":"db.deleteIndex(label_name::STRING,field_name::STRING) :: (::NUL)"},{"name":"db.deleteEdgeIndex","signature":"db.deleteEdgeIndex(label_name::STRING,field_name::STRING) :: (::NUL)"},{"name":"db.deleteCompositeIndex","signature":"db.deleteCompositeIndex(label_name::STRING,field_name::LIST) :: (::NUL)"},{"name":"db.flushDB","signature":"db.flushDB() :: (::NUL)"},{"name":"db.dropDB","signature":"db.dropDB() :: (::NUL)"},{"name":"db.dropAllVertex","signature":"db.dropAllVertex() :: (::NUL)"},{"name":"dbms.task.listTasks","signature":"dbms.task.listTasks() :: (tasks_info::MAP)"},{"name":"dbms.task.terminateTask","signature":"dbms.task.terminateTask(task_id::STRING) :: (::NUL)"},{"name":"db.monitor.tuGraphInfo","signature":"db.monitor.tuGraphInfo() :: (request::STRING)"},{"name":"db.monitor.serverInfo","signature":"db.monitor.serverInfo() :: (cpu::STRING,memory::STRING,disk_rate::STRING,disk_storage::STRING)"},{"name":"dbms.ha.clusterInfo","signature":"dbms.ha.clusterInfo() :: (cluster_info::LIST,is_master::BOOLEAN)"}] +[{"name":"db.subgraph","signature":"db.subgraph(vids::LIST) :: (subgraph::STRING)"},{"name":"db.vertexLabels","signature":"db.vertexLabels() :: (label::STRING)"},{"name":"db.edgeLabels","signature":"db.edgeLabels() :: (label::STRING)"},{"name":"db.indexes","signature":"db.indexes() :: (label::STRING,field::STRING,label_type::STRING,unique::BOOLEAN,pair_unique::BOOLEAN)"},{"name":"db.listLabelIndexes","signature":"db.listLabelIndexes(label_name::STRING,label_type::STRING) :: (label::STRING,field::STRING,unique::BOOLEAN,pair_unique::BOOLEAN)"},{"name":"db.propertyKeys","signature":"db.propertyKeys() :: (propertyKey::STRING)"},{"name":"db.warmup","signature":"db.warmup() :: (time_used::STRING)"},{"name":"db.createVertexLabelByJson","signature":"db.createVertexLabelByJson(json_data::STRING) :: (::NUL)"},{"name":"db.createEdgeLabelByJson","signature":"db.createEdgeLabelByJson(json_data::STRING) :: (::NUL)"},{"name":"db.createVertexLabel","signature":"db.createVertexLabel(label_name::STRING,field_specs::LIST) :: (::NUL)"},{"name":"db.createLabel","signature":"db.createLabel(label_type::STRING,label_name::STRING,extra::STRING,field_specs::LIST) :: ()"},{"name":"db.getLabelSchema","signature":"db.getLabelSchema(label_type::STRING,label_name::STRING) :: (name::STRING,type::STRING,optional::BOOLEAN)"},{"name":"db.getVertexSchema","signature":"db.getVertexSchema(label::STRING) :: (schema::MAP)"},{"name":"db.getEdgeSchema","signature":"db.getEdgeSchema(label::STRING) :: (schema::MAP)"},{"name":"db.deleteLabel","signature":"db.deleteLabel(label_type::STRING,label_name::STRING) :: (::NUL)"},{"name":"db.alterLabelDelFields","signature":"db.alterLabelDelFields(label_type::STRING,label_name::STRING,del_fields::LIST) :: (record_affected::INTEGER)"},{"name":"db.alterLabelAddFields","signature":"db.alterLabelAddFields(label_type::STRING,label_name::STRING,add_field_spec_values::LIST) :: (record_affected::INTEGER)"},{"name":"db.upsertVertex","signature":"db.upsertVertex(label_name::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"name":"db.upsertVertexByJson","signature":"db.upsertVertexByJson(label_name::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"name":"db.upsertEdge","signature":"db.upsertEdge(label_name::STRING,start_spec::STRING,end_spec::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"name":"db.upsertEdgeByJson","signature":"db.upsertEdgeByJson(label_name::STRING,start_spec::STRING,end_spec::STRING,list_data::STRING) :: (total::INTEGER,data_error::INTEGER,index_conflict::INTEGER,insert::INTEGER,update::INTEGER)"},{"name":"db.alterLabelModFields","signature":"db.alterLabelModFields(label_type::STRING,label_name::STRING,mod_field_specs::LIST) :: (record_affected::INTEGER)"},{"name":"db.createEdgeLabel","signature":"db.createEdgeLabel(type_name::STRING,field_specs::LIST) :: (::NUL)"},{"name":"db.addIndex","signature":"db.addIndex(label_name::STRING,field_name::STRING,unique::BOOLEAN) :: (::NUL)"},{"name":"db.addVertexCompositeIndex","signature":"db.addVertexCompositeIndex(label_name::STRING,field_names::LIST,unique::BOOLEAN) :: (::NUL)"},{"name":"db.addEdgeIndex","signature":"db.addEdgeIndex(label_name::STRING,field_name::STRING,unique::BOOLEAN,) :: (::NUL)"},{"name":"db.addFullTextIndex","signature":"db.addFullTextIndex(is_vertex::BOOLEAN,label_name::STRING,field_name::STRING) :: (::NUL)"},{"name":"db.deleteFullTextIndex","signature":"db.deleteFullTextIndex(is_vertex::BOOLEAN,label_name::STRING,field_name::STRING) :: (::NUL)"},{"name":"db.rebuildFullTextIndex","signature":"db.rebuildFullTextIndex(vertex_labels::STRING,edge_labels::STRING) :: (::NUL)"},{"name":"db.fullTextIndexes","signature":"db.fullTextIndexes() :: (is_vertex::BOOLEAN,label::STRING,field::STRING)"},{"name":"db.addEdgeConstraints","signature":"db.addEdgeConstraints(label_name::STRING,constraints::STRING) :: (::NUL)"},{"name":"db.clearEdgeConstraints","signature":"db.clearEdgeConstraints(label_name::STRING) :: (::NUL)"},{"name":"dbms.procedures","signature":"dbms.procedures() :: (name::STRING,signature::STRING,read_only::BOOLEAN)"},{"name":"dbms.meta.countDetail","signature":"dbms.meta.countDetail() :: (is_vertex::BOOLEAN,label::STRING,count::INTEGER)"},{"name":"dbms.meta.count","signature":"dbms.meta.count() :: (type::STRING,number::INTEGER)"},{"name":"dbms.meta.refreshCount","signature":"dbms.meta.refreshCount() :: (::NUL)"},{"name":"dbms.security.isDefaultUserPassword","signature":"dbms.security.isDefaultUserPassword() :: (isDefaultUserPassword::BOOLEAN)"},{"name":"dbms.security.changePassword","signature":"dbms.security.changePassword(current_password::STRING,new_password::STRING) :: (::NUL)"},{"name":"dbms.security.changeUserPassword","signature":"dbms.security.changeUserPassword(user_name::STRING,new_password::STRING) :: (::NUL)"},{"name":"dbms.security.createUser","signature":"dbms.security.createUser(user_name::STRING,password::STRING) :: (::NUL)"},{"name":"dbms.security.deleteUser","signature":"dbms.security.deleteUser(user_name::STRING) :: (::NUL)"},{"name":"dbms.security.setUserMemoryLimit","signature":"dbms.security.setUserMemoryLimit(user_name::STRING,MemoryLimit::INTEGER) :: (::NUL)"},{"name":"dbms.security.listUsers","signature":"dbms.security.listUsers() :: (user_name::STRING,user_info::MAP)"},{"name":"dbms.security.showCurrentUser","signature":"dbms.security.showCurrentUser() :: (current_user::STRING)"},{"name":"dbms.security.listAllowedHosts","signature":"dbms.security.listAllowedHosts() :: (host::STRING)"},{"name":"dbms.security.deleteAllowedHosts","signature":"dbms.security.deleteAllowedHosts(hosts::LIST) :: (record_affected::INTEGER)"},{"name":"dbms.security.addAllowedHosts","signature":"dbms.security.addAllowedHosts(hosts::LIST) :: (num_added::INTEGER)"},{"name":"dbms.graph.createGraph","signature":"dbms.graph.createGraph(graph_name::STRING,description::STRING,max_size_GB::INTEGER) :: (::NUL)"},{"name":"dbms.graph.deleteGraph","signature":"dbms.graph.deleteGraph(graph_name::STRING) :: (::NUL)"},{"name":"dbms.graph.modGraph","signature":"dbms.graph.modGraph(graph_name::STRING,config::MAP) :: (::NUL)"},{"name":"dbms.graph.listGraphs","signature":"dbms.graph.listGraphs() :: (graph_name::STRING,configuration::MAP)"},{"name":"dbms.graph.listUserGraphs","signature":"dbms.graph.listUserGraphs(user_name::STRING) :: (graph_name::STRING,configuration::MAP)"},{"name":"dbms.graph.getGraphInfo","signature":"dbms.graph.getGraphInfo() :: (graph_name::STRING,configuration::MAP)"},{"name":"dbms.graph.getGraphSchema","signature":"dbms.graph.getGraphSchema() :: (schema::STRING)"},{"name":"dbms.system.info","signature":"dbms.system.info() :: (name::STRING,value::ANY)"},{"name":"dbms.config.list","signature":"dbms.config.list() :: (name::STRING,value::ANY)"},{"name":"dbms.config.update","signature":"dbms.config.update(updates::MAP) :: (::NUL)"},{"name":"dbms.takeSnapshot","signature":"dbms.takeSnapshot() :: (path::STRING)"},{"name":"dbms.listBackupFiles","signature":"dbms.listBackupFiles() :: (file::STRING)"},{"name":"algo.shortestPath","signature":"algo.shortestPath(startNode::NODE,endNode::NODE,config::MAP) :: (nodeCount::INTEGER,totalCost::FLOAT,path::STRING)"},{"name":"algo.allShortestPaths","signature":"algo.allShortestPaths(startNode::NODE,endNode::NODE,config::MAP) :: (nodeIds::LIST,relationshipIds::LIST,cost::LIST)"},{"name":"algo.native.extract","signature":"algo.native.extract(id::ANY,config::MAP) :: (value::ANY)"},{"name":"algo.pagerank","signature":"algo.pagerank(num_iterations::INTEGER) :: (node::NODE,pr::FLOAT)"},{"name":"algo.jaccard","signature":"algo.jaccard(lhs::ANY,) :: (similarity::FLOAT)"},{"name":"spatial.distance","signature":"spatial.distance(Spatial1::STRING,Spatial2::STRING) :: (distance::DOUBLE)"},{"name":"db.addVertexVectorIndex","signature":"db.addVertexVectorIndex(label_name::STRING,field_name::STRING,parameter::MAP) :: (::NUL)"},{"name":"db.deleteVertexVectorIndex","signature":"db.deleteVertexVectorIndex(label_name::STRING,field_name::STRING) :: (::NUL)"},{"name":"db.showVertexVectorIndex","signature":"db.showVertexVectorIndex() :: (label_name::STRING,field_name::STRING,index_type::STRING,dimension::INTEGER,distance_type::STRING,hnsm.m::INTEGER,hnsm.ef_construction::INTEGER)"},{"name":"db.vertexVectorKnnSearch","signature":"db.vertexVectorKnnSearch(label_name::STRING,field_name::STRING,vec::LIST,parameter::MAP) :: (node::NODE,distance::FLOAT)"},{"name":"dbms.security.listRoles","signature":"dbms.security.listRoles() :: (role_name::STRING,role_info::MAP)"},{"name":"dbms.security.createRole","signature":"dbms.security.createRole(role_name::STRING,desc::STRING) :: (::NUL)"},{"name":"dbms.security.deleteRole","signature":"dbms.security.deleteRole(role_name::STRING) :: (::NUL)"},{"name":"dbms.security.getUserInfo","signature":"dbms.security.getUserInfo(user::STRING) :: (user_info::MAP)"},{"name":"dbms.security.getUserMemoryUsage","signature":"dbms.security.getUserMemoryUsage(user::STRING) :: (memory_usage::INTEGER)"},{"name":"dbms.security.getUserPermissions","signature":"dbms.security.getUserPermissions(user::STRING) :: (user_info::MAP)"},{"name":"dbms.security.getRoleInfo","signature":"dbms.security.getRoleInfo(role::STRING) :: (role_info::MAP)"},{"name":"dbms.security.disableRole","signature":"dbms.security.disableRole(role::STRING,disable::BOOLEAN) :: (::NUL)"},{"name":"dbms.security.modRoleDesc","signature":"dbms.security.modRoleDesc(role::STRING,description::STRING) :: (::NUL)"},{"name":"dbms.security.rebuildRoleAccessLevel","signature":"dbms.security.rebuildRoleAccessLevel(role::STRING,access_level::MAP) :: (::NUL)"},{"name":"dbms.security.modRoleAccessLevel","signature":"dbms.security.modRoleAccessLevel(role::STRING,access_level::MAP) :: (::NUL)"},{"name":"dbms.security.modRoleFieldAccessLevel","signature":"dbms.security.modRoleFieldAccessLevel(role::STRING,) :: (::NUL)"},{"name":"dbms.security.disableUser","signature":"dbms.security.disableUser(user::STRING,disable::BOOLEAN) :: (::NUL)"},{"name":"dbms.security.setCurrentDesc","signature":"dbms.security.setCurrentDesc(description::STRING) :: (::NUL)"},{"name":"dbms.security.setUserDesc","signature":"dbms.security.setUserDesc(user::STRING,description::STRING) :: (::NUL)"},{"name":"dbms.security.deleteUserRoles","signature":"dbms.security.deleteUserRoles(user::STRING,roles::LIST) :: (::NUL)"},{"name":"dbms.security.rebuildUserRoles","signature":"dbms.security.rebuildUserRoles(user::STRING,roles::LIST) :: (::NUL)"},{"name":"dbms.security.addUserRoles","signature":"dbms.security.addUserRoles(user::STRING,roles::LIST) :: (::NUL)"},{"name":"db.plugin.loadPlugin","signature":"db.plugin.loadPlugin(plugin_type::STRING,plugin_name::STRING,plugin_content::ANY,code_type::STRING,plugin_description::STRING,read_only::BOOLEAN,version::STRING) :: (::NUL)"},{"name":"db.plugin.deletePlugin","signature":"db.plugin.deletePlugin(plugin_type::STRING,plugin_name::STRING) :: (::NUL)"},{"name":"db.plugin.getPluginInfo","signature":"db.plugin.getPluginInfo(plugin_type::STRING,plugin_name::STRING) :: (plugin_description::MAP)"},{"name":"db.plugin.listPlugin","signature":"db.plugin.listPlugin(plugin_type::STRING,plugin_version::STRING) :: (plugin_description::MAP)"},{"name":"db.plugin.listUserPlugins","signature":"db.plugin.listUserPlugins() :: (graph::STRING,plugins::MAP)"},{"name":"db.plugin.callPlugin","signature":"db.plugin.callPlugin(plugin_type::STRING,plugin_name::STRING,param::STRING,timeout::DOUBLE,in_process::BOOLEAN) :: (result::STRING)"},{"name":"db.importor.dataImportor","signature":"db.importor.dataImportor(description::STRING,content::STRING,continue_on_error::BOOLEAN,thread_nums::INTEGER,delimiter::STRING) :: (::NUL)"},{"name":"db.importor.fullImportor","signature":"db.importor.fullImportor(conf::MAP) :: (result::STRING)"},{"name":"db.importor.fullFileImportor","signature":"db.importor.fullFileImportor(graph_name::STRING,path::STRING) :: (::NUL)"},{"name":"db.importor.schemaImportor","signature":"db.importor.schemaImportor(description::STRING) :: (::NUL)"},{"name":"db.deleteIndex","signature":"db.deleteIndex(label_name::STRING,field_name::STRING) :: (::NUL)"},{"name":"db.deleteEdgeIndex","signature":"db.deleteEdgeIndex(label_name::STRING,field_name::STRING) :: (::NUL)"},{"name":"db.deleteCompositeIndex","signature":"db.deleteCompositeIndex(label_name::STRING,field_name::LIST) :: (::NUL)"},{"name":"db.flushDB","signature":"db.flushDB() :: (::NUL)"},{"name":"db.dropDB","signature":"db.dropDB() :: (::NUL)"},{"name":"db.dropAllVertex","signature":"db.dropAllVertex() :: (::NUL)"},{"name":"dbms.task.listTasks","signature":"dbms.task.listTasks() :: (tasks_info::MAP)"},{"name":"dbms.task.terminateTask","signature":"dbms.task.terminateTask(task_id::STRING) :: (::NUL)"},{"name":"db.monitor.tuGraphInfo","signature":"db.monitor.tuGraphInfo() :: (request::STRING)"},{"name":"db.monitor.serverInfo","signature":"db.monitor.serverInfo() :: (cpu::STRING,memory::STRING,disk_rate::STRING,disk_storage::STRING)"},{"name":"dbms.ha.clusterInfo","signature":"dbms.ha.clusterInfo() :: (cluster_info::LIST,is_master::BOOLEAN)"}] CALL dbms.graph.createGraph('demo1'); [] CALL dbms.graph.listGraphs(); @@ -145,7 +145,7 @@ CALL plugin.cpp.scan_graph({scan_edges:true,times:2}); CALL plugin.cpp.standard({}); [{"bool_var":true,"double_var":123.23300170898438,"edge_num":{"in_num_edges":1,"out_num_edges":3},"edge_num_sum":4,"float_var":123.233,"in_edge":{"dst":20,"forward":true,"identity":0,"label_id":5,"properties":{"charactername":"Guenevere"},"src":2,"temporal_id":0},"list_var":["1"],"node":{"identity":0,"label":"Person","properties":{"birthyear":1910,"name":"Rachel Kempson"}},"out_edge":{"dst":14,"forward":true,"identity":0,"label_id":2,"properties":{"reg_time":"2023-05-01 12:00:00","weight":19.93},"src":12,"temporal_id":0},"path":[{"identity":0,"label":"Person","properties":{"birthyear":1910,"name":"Rachel Kempson"}},{"dst":2,"forward":true,"identity":0,"label_id":0,"src":0,"temporal_id":0},{"identity":2,"label":"Person","properties":{"birthyear":1937,"name":"Vanessa Redgrave"}}]}] CALL dbms.procedures() YIELD name RETURN name,1; -[{"1":1,"name":"db.subgraph"},{"1":1,"name":"db.vertexLabels"},{"1":1,"name":"db.edgeLabels"},{"1":1,"name":"db.indexes"},{"1":1,"name":"db.listLabelIndexes"},{"1":1,"name":"db.propertyKeys"},{"1":1,"name":"db.warmup"},{"1":1,"name":"db.createVertexLabelByJson"},{"1":1,"name":"db.createEdgeLabelByJson"},{"1":1,"name":"db.createVertexLabel"},{"1":1,"name":"db.createLabel"},{"1":1,"name":"db.getLabelSchema"},{"1":1,"name":"db.getVertexSchema"},{"1":1,"name":"db.getEdgeSchema"},{"1":1,"name":"db.deleteLabel"},{"1":1,"name":"db.alterLabelDelFields"},{"1":1,"name":"db.alterLabelAddFields"},{"1":1,"name":"db.upsertVertex"},{"1":1,"name":"db.upsertVertexByJson"},{"1":1,"name":"db.upsertEdge"},{"1":1,"name":"db.upsertEdgeByJson"},{"1":1,"name":"db.alterLabelModFields"},{"1":1,"name":"db.createEdgeLabel"},{"1":1,"name":"db.addIndex"},{"1":1,"name":"db.addVertexCompositeIndex"},{"1":1,"name":"db.addEdgeIndex"},{"1":1,"name":"db.addFullTextIndex"},{"1":1,"name":"db.deleteFullTextIndex"},{"1":1,"name":"db.rebuildFullTextIndex"},{"1":1,"name":"db.fullTextIndexes"},{"1":1,"name":"db.addEdgeConstraints"},{"1":1,"name":"db.clearEdgeConstraints"},{"1":1,"name":"dbms.procedures"},{"1":1,"name":"dbms.meta.countDetail"},{"1":1,"name":"dbms.meta.count"},{"1":1,"name":"dbms.meta.refreshCount"},{"1":1,"name":"dbms.security.isDefaultUserPassword"},{"1":1,"name":"dbms.security.changePassword"},{"1":1,"name":"dbms.security.changeUserPassword"},{"1":1,"name":"dbms.security.createUser"},{"1":1,"name":"dbms.security.deleteUser"},{"1":1,"name":"dbms.security.setUserMemoryLimit"},{"1":1,"name":"dbms.security.listUsers"},{"1":1,"name":"dbms.security.showCurrentUser"},{"1":1,"name":"dbms.security.listAllowedHosts"},{"1":1,"name":"dbms.security.deleteAllowedHosts"},{"1":1,"name":"dbms.security.addAllowedHosts"},{"1":1,"name":"dbms.graph.createGraph"},{"1":1,"name":"dbms.graph.deleteGraph"},{"1":1,"name":"dbms.graph.modGraph"},{"1":1,"name":"dbms.graph.listGraphs"},{"1":1,"name":"dbms.graph.listUserGraphs"},{"1":1,"name":"dbms.graph.getGraphInfo"},{"1":1,"name":"dbms.graph.getGraphSchema"},{"1":1,"name":"dbms.system.info"},{"1":1,"name":"dbms.config.list"},{"1":1,"name":"dbms.config.update"},{"1":1,"name":"dbms.takeSnapshot"},{"1":1,"name":"dbms.listBackupFiles"},{"1":1,"name":"algo.shortestPath"},{"1":1,"name":"algo.allShortestPaths"},{"1":1,"name":"algo.native.extract"},{"1":1,"name":"algo.pagerank"},{"1":1,"name":"algo.jaccard"},{"1":1,"name":"spatial.distance"},{"1":1,"name":"db.addVertexVectorIndex"},{"1":1,"name":"db.deleteVertexVectorIndex"},{"1":1,"name":"db.showVertexVectorIndex"},{"1":1,"name":"db.vertexVectorIndexQuery"},{"1":1,"name":"dbms.security.listRoles"},{"1":1,"name":"dbms.security.createRole"},{"1":1,"name":"dbms.security.deleteRole"},{"1":1,"name":"dbms.security.getUserInfo"},{"1":1,"name":"dbms.security.getUserMemoryUsage"},{"1":1,"name":"dbms.security.getUserPermissions"},{"1":1,"name":"dbms.security.getRoleInfo"},{"1":1,"name":"dbms.security.disableRole"},{"1":1,"name":"dbms.security.modRoleDesc"},{"1":1,"name":"dbms.security.rebuildRoleAccessLevel"},{"1":1,"name":"dbms.security.modRoleAccessLevel"},{"1":1,"name":"dbms.security.modRoleFieldAccessLevel"},{"1":1,"name":"dbms.security.disableUser"},{"1":1,"name":"dbms.security.setCurrentDesc"},{"1":1,"name":"dbms.security.setUserDesc"},{"1":1,"name":"dbms.security.deleteUserRoles"},{"1":1,"name":"dbms.security.rebuildUserRoles"},{"1":1,"name":"dbms.security.addUserRoles"},{"1":1,"name":"db.plugin.loadPlugin"},{"1":1,"name":"db.plugin.deletePlugin"},{"1":1,"name":"db.plugin.getPluginInfo"},{"1":1,"name":"db.plugin.listPlugin"},{"1":1,"name":"db.plugin.listUserPlugins"},{"1":1,"name":"db.plugin.callPlugin"},{"1":1,"name":"db.importor.dataImportor"},{"1":1,"name":"db.importor.fullImportor"},{"1":1,"name":"db.importor.fullFileImportor"},{"1":1,"name":"db.importor.schemaImportor"},{"1":1,"name":"db.deleteIndex"},{"1":1,"name":"db.deleteEdgeIndex"},{"1":1,"name":"db.deleteCompositeIndex"},{"1":1,"name":"db.flushDB"},{"1":1,"name":"db.dropDB"},{"1":1,"name":"db.dropAllVertex"},{"1":1,"name":"dbms.task.listTasks"},{"1":1,"name":"dbms.task.terminateTask"},{"1":1,"name":"db.monitor.tuGraphInfo"},{"1":1,"name":"db.monitor.serverInfo"},{"1":1,"name":"dbms.ha.clusterInfo"}] +[{"1":1,"name":"db.subgraph"},{"1":1,"name":"db.vertexLabels"},{"1":1,"name":"db.edgeLabels"},{"1":1,"name":"db.indexes"},{"1":1,"name":"db.listLabelIndexes"},{"1":1,"name":"db.propertyKeys"},{"1":1,"name":"db.warmup"},{"1":1,"name":"db.createVertexLabelByJson"},{"1":1,"name":"db.createEdgeLabelByJson"},{"1":1,"name":"db.createVertexLabel"},{"1":1,"name":"db.createLabel"},{"1":1,"name":"db.getLabelSchema"},{"1":1,"name":"db.getVertexSchema"},{"1":1,"name":"db.getEdgeSchema"},{"1":1,"name":"db.deleteLabel"},{"1":1,"name":"db.alterLabelDelFields"},{"1":1,"name":"db.alterLabelAddFields"},{"1":1,"name":"db.upsertVertex"},{"1":1,"name":"db.upsertVertexByJson"},{"1":1,"name":"db.upsertEdge"},{"1":1,"name":"db.upsertEdgeByJson"},{"1":1,"name":"db.alterLabelModFields"},{"1":1,"name":"db.createEdgeLabel"},{"1":1,"name":"db.addIndex"},{"1":1,"name":"db.addVertexCompositeIndex"},{"1":1,"name":"db.addEdgeIndex"},{"1":1,"name":"db.addFullTextIndex"},{"1":1,"name":"db.deleteFullTextIndex"},{"1":1,"name":"db.rebuildFullTextIndex"},{"1":1,"name":"db.fullTextIndexes"},{"1":1,"name":"db.addEdgeConstraints"},{"1":1,"name":"db.clearEdgeConstraints"},{"1":1,"name":"dbms.procedures"},{"1":1,"name":"dbms.meta.countDetail"},{"1":1,"name":"dbms.meta.count"},{"1":1,"name":"dbms.meta.refreshCount"},{"1":1,"name":"dbms.security.isDefaultUserPassword"},{"1":1,"name":"dbms.security.changePassword"},{"1":1,"name":"dbms.security.changeUserPassword"},{"1":1,"name":"dbms.security.createUser"},{"1":1,"name":"dbms.security.deleteUser"},{"1":1,"name":"dbms.security.setUserMemoryLimit"},{"1":1,"name":"dbms.security.listUsers"},{"1":1,"name":"dbms.security.showCurrentUser"},{"1":1,"name":"dbms.security.listAllowedHosts"},{"1":1,"name":"dbms.security.deleteAllowedHosts"},{"1":1,"name":"dbms.security.addAllowedHosts"},{"1":1,"name":"dbms.graph.createGraph"},{"1":1,"name":"dbms.graph.deleteGraph"},{"1":1,"name":"dbms.graph.modGraph"},{"1":1,"name":"dbms.graph.listGraphs"},{"1":1,"name":"dbms.graph.listUserGraphs"},{"1":1,"name":"dbms.graph.getGraphInfo"},{"1":1,"name":"dbms.graph.getGraphSchema"},{"1":1,"name":"dbms.system.info"},{"1":1,"name":"dbms.config.list"},{"1":1,"name":"dbms.config.update"},{"1":1,"name":"dbms.takeSnapshot"},{"1":1,"name":"dbms.listBackupFiles"},{"1":1,"name":"algo.shortestPath"},{"1":1,"name":"algo.allShortestPaths"},{"1":1,"name":"algo.native.extract"},{"1":1,"name":"algo.pagerank"},{"1":1,"name":"algo.jaccard"},{"1":1,"name":"spatial.distance"},{"1":1,"name":"db.addVertexVectorIndex"},{"1":1,"name":"db.deleteVertexVectorIndex"},{"1":1,"name":"db.showVertexVectorIndex"},{"1":1,"name":"db.vertexVectorKnnSearch"},{"1":1,"name":"dbms.security.listRoles"},{"1":1,"name":"dbms.security.createRole"},{"1":1,"name":"dbms.security.deleteRole"},{"1":1,"name":"dbms.security.getUserInfo"},{"1":1,"name":"dbms.security.getUserMemoryUsage"},{"1":1,"name":"dbms.security.getUserPermissions"},{"1":1,"name":"dbms.security.getRoleInfo"},{"1":1,"name":"dbms.security.disableRole"},{"1":1,"name":"dbms.security.modRoleDesc"},{"1":1,"name":"dbms.security.rebuildRoleAccessLevel"},{"1":1,"name":"dbms.security.modRoleAccessLevel"},{"1":1,"name":"dbms.security.modRoleFieldAccessLevel"},{"1":1,"name":"dbms.security.disableUser"},{"1":1,"name":"dbms.security.setCurrentDesc"},{"1":1,"name":"dbms.security.setUserDesc"},{"1":1,"name":"dbms.security.deleteUserRoles"},{"1":1,"name":"dbms.security.rebuildUserRoles"},{"1":1,"name":"dbms.security.addUserRoles"},{"1":1,"name":"db.plugin.loadPlugin"},{"1":1,"name":"db.plugin.deletePlugin"},{"1":1,"name":"db.plugin.getPluginInfo"},{"1":1,"name":"db.plugin.listPlugin"},{"1":1,"name":"db.plugin.listUserPlugins"},{"1":1,"name":"db.plugin.callPlugin"},{"1":1,"name":"db.importor.dataImportor"},{"1":1,"name":"db.importor.fullImportor"},{"1":1,"name":"db.importor.fullFileImportor"},{"1":1,"name":"db.importor.schemaImportor"},{"1":1,"name":"db.deleteIndex"},{"1":1,"name":"db.deleteEdgeIndex"},{"1":1,"name":"db.deleteCompositeIndex"},{"1":1,"name":"db.flushDB"},{"1":1,"name":"db.dropDB"},{"1":1,"name":"db.dropAllVertex"},{"1":1,"name":"dbms.task.listTasks"},{"1":1,"name":"dbms.task.terminateTask"},{"1":1,"name":"db.monitor.tuGraphInfo"},{"1":1,"name":"db.monitor.serverInfo"},{"1":1,"name":"dbms.ha.clusterInfo"}] MATCH (n1 {name:'Michael Redgrave'}),(n2 {name:'Rachel Kempson'}) CALL algo.shortestPath(n1,n2) YIELD nodeCount,totalCost RETURN nodeCount,totalCost /* 2,1.0 */; [{"nodeCount":2,"totalCost":1.0}] MATCH (n1 {name:'Michael Redgrave'}),(n2 {name:'Rachel Kempson'}) CALL algo.shortestPath(n1,n2) YIELD path RETURN path /* [V[vid0],E[vid0_vid1_type_eid],V[vid1]] */; diff --git a/test/resource/unit_test/vector_index/cypher/vector_index.result b/test/resource/unit_test/vector_index/cypher/vector_index.result index 438ddb422..4a11aa31a 100644 --- a/test/resource/unit_test/vector_index/cypher/vector_index.result +++ b/test/resource/unit_test/vector_index/cypher/vector_index.result @@ -14,27 +14,46 @@ CREATE (n:person {id:2, name:'name2', embedding1: [2.0,2.0,2.0,2.0], embedding2: [{"":"created 1 vertices, created 0 edges."}] CALL db.upsertVertex('person', [{id:3, name:'name3', embedding1: [3.0,3.0,3.0,3.0], embedding2: [13.0,13.0,13.0,13.0]}, {id:4, name:'name4', embedding1: [4.0,4.0,4.0,4.0], embedding2: [14.0,14.0,14.0,14.0]}]); [{"data_error":0,"index_conflict":0,"insert":2,"total":2,"update":0}] -CALL db.vertexVectorIndexQuery('person','embedding1',[1,2,3,4], {top_k:2, hnsw_ef_search:10}); -[{"node":{"identity":1,"label":"person","properties":{"embedding1":[2.0,2.0,2.0,2.0],"embedding2":[12.0,12.0,12.0,12.0],"id":2,"name":"name2"}},"score":6.0},{"node":{"identity":2,"label":"person","properties":{"embedding1":[3.0,3.0,3.0,3.0],"embedding2":[13.0,13.0,13.0,13.0],"id":3,"name":"name3"}},"score":6.0}] -CALL db.vertexVectorIndexQuery('person','embedding1',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; +CALL db.vertexVectorKnnSearch('person','embedding1',[1,2,3,4], {top_k:2, hnsw_ef_search:10}); +[{"distance":6.0,"node":{"identity":1,"label":"person","properties":{"embedding1":[2.0,2.0,2.0,2.0],"embedding2":[12.0,12.0,12.0,12.0],"id":2,"name":"name2"}}},{"distance":6.0,"node":{"identity":2,"label":"person","properties":{"embedding1":[3.0,3.0,3.0,3.0],"embedding2":[13.0,13.0,13.0,13.0],"id":3,"name":"name3"}}}] +CALL db.vertexVectorKnnSearch('person','embedding1',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; [{"node.id":2},{"node.id":3}] -CALL db.vertexVectorIndexQuery('person','embedding1',[1,2,3,4], {top_k:20, hnsw_ef_search:100}) yield node return node.id; +CALL db.vertexVectorKnnSearch('person','embedding1',[1,2,3,4], {top_k:20, hnsw_ef_search:100}) yield node return node.id; [{"node.id":2},{"node.id":3},{"node.id":1},{"node.id":4}] -CALL db.vertexVectorIndexQuery('person','embedding2',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; +CALL db.vertexVectorKnnSearch('person','embedding2',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; [{"node.id":1},{"node.id":2}] CALL db.upsertVertex('person', [{id:1, embedding1: [33.0,33.0,33.0,33.0]}]); [{"data_error":0,"index_conflict":0,"insert":0,"total":1,"update":1}] -CALL db.vertexVectorIndexQuery('person','embedding1',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; +CALL db.vertexVectorKnnSearch('person','embedding1',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; [{"node.id":2},{"node.id":3}] match(n:person {id:2}) delete n; [{"":"deleted 1 vertices, deleted 0 edges."}] -CALL db.vertexVectorIndexQuery('person','embedding1',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; +CALL db.vertexVectorKnnSearch('person','embedding1',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; [{"node.id":3},{"node.id":4}] +CALL db.vertexVectorRangeSearch('person','embedding1', [1.0,2.0,3.0,4.0], {radius:10.0, hnsw_ef_search:10}) yield node,distance return node.id, distance; +[VectorIndexException] failed to perofrm range_search(internalError): not support perform range search on a index that deleted some vectors CALL db.alterLabelDelFields('vertex', 'person', ['embedding1']); [{"record_affected":3}] CALL db.showVertexVectorIndex(); [{"dimension":4,"distance_type":"l2","field_name":"embedding2","hnsm.ef_construction":100,"hnsm.m":16,"index_type":"hnsw","label_name":"person"}] -CALL db.vertexVectorIndexQuery('person','embedding1',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; +CALL db.vertexVectorKnnSearch('person','embedding1',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; [FieldNotFound] Field [embedding1] does not exist. -CALL db.vertexVectorIndexQuery('person','embedding2',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; +CALL db.vertexVectorKnnSearch('person','embedding2',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; [{"node.id":1},{"node.id":3}] +CALL db.vertexVectorRangeSearch('person','embedding2', [1.0,2.0,3.0,4.0], {radius:10.0, hnsw_ef_search:10}) yield node,distance return node.id, distance; +[VectorIndexException] failed to perofrm range_search(internalError): not support perform range search on a index that deleted some vectors + +CALL db.createVertexLabelByJson('{"label":"student","primary":"id","type":"VERTEX","detach_property":true,"properties":[{"name":"id","type":"INT32","optional":false},{"name":"name","type":"STRING","optional":false,"index":false},{"name":"embedding","type":"FLOAT_VECTOR","optional":false}]}'); +[] +CALL db.addVertexVectorIndex('student','embedding', {dimension:4}); +[] +CREATE (n:student {id:1, name:'name1', embedding: [1.0,1.0,1.0,1.0]}); +[{"":"created 1 vertices, created 0 edges."}] +CREATE (n:student {id:2, name:'name2', embedding: [2.0,2.0,2.0,2.0]}); +[{"":"created 1 vertices, created 0 edges."}] +CREATE (n:student {id:3, name:'name3', embedding: [3.0,3.0,3.0,3.0]}); +[{"":"created 1 vertices, created 0 edges."}] +CALL db.vertexVectorRangeSearch('student','embedding', [1.0,2.0,3.0,4.0], {radius:10.0, hnsw_ef_search:10}) yield node,distance return node.id, distance; +[{"distance":6.0,"node.id":2},{"distance":6.0,"node.id":3}] +CALL db.vertexVectorRangeSearch('student','embedding', [1.0,2.0,3.0,4.0], {radius:10.0, hnsw_ef_search:10, limit:1}) yield node,distance return node.id, distance; +[{"distance":6.0,"node.id":2}] diff --git a/test/resource/unit_test/vector_index/cypher/vector_index.test b/test/resource/unit_test/vector_index/cypher/vector_index.test index 22c4eb12a..b360f1ec2 100644 --- a/test/resource/unit_test/vector_index/cypher/vector_index.test +++ b/test/resource/unit_test/vector_index/cypher/vector_index.test @@ -6,15 +6,25 @@ CALL db.showVertexVectorIndex(); CREATE (n:person {id:1, name:'name1', embedding1: [1.0,1.0,1.0,1.0], embedding2: [11.0,11.0,11.0,11.0]}); CREATE (n:person {id:2, name:'name2', embedding1: [2.0,2.0,2.0,2.0], embedding2: [12.0,12.0,12.0,12.0]}); CALL db.upsertVertex('person', [{id:3, name:'name3', embedding1: [3.0,3.0,3.0,3.0], embedding2: [13.0,13.0,13.0,13.0]}, {id:4, name:'name4', embedding1: [4.0,4.0,4.0,4.0], embedding2: [14.0,14.0,14.0,14.0]}]); -CALL db.vertexVectorIndexQuery('person','embedding1',[1,2,3,4], {top_k:2, hnsw_ef_search:10}); -CALL db.vertexVectorIndexQuery('person','embedding1',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; -CALL db.vertexVectorIndexQuery('person','embedding1',[1,2,3,4], {top_k:20, hnsw_ef_search:100}) yield node return node.id; -CALL db.vertexVectorIndexQuery('person','embedding2',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; +CALL db.vertexVectorKnnSearch('person','embedding1',[1,2,3,4], {top_k:2, hnsw_ef_search:10}); +CALL db.vertexVectorKnnSearch('person','embedding1',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; +CALL db.vertexVectorKnnSearch('person','embedding1',[1,2,3,4], {top_k:20, hnsw_ef_search:100}) yield node return node.id; +CALL db.vertexVectorKnnSearch('person','embedding2',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; CALL db.upsertVertex('person', [{id:1, embedding1: [33.0,33.0,33.0,33.0]}]); -CALL db.vertexVectorIndexQuery('person','embedding1',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; +CALL db.vertexVectorKnnSearch('person','embedding1',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; match(n:person {id:2}) delete n; -CALL db.vertexVectorIndexQuery('person','embedding1',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; +CALL db.vertexVectorKnnSearch('person','embedding1',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; +CALL db.vertexVectorRangeSearch('person','embedding1', [1.0,2.0,3.0,4.0], {radius:10.0, hnsw_ef_search:10}) yield node,distance return node.id, distance; CALL db.alterLabelDelFields('vertex', 'person', ['embedding1']); CALL db.showVertexVectorIndex(); -CALL db.vertexVectorIndexQuery('person','embedding1',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; -CALL db.vertexVectorIndexQuery('person','embedding2',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; \ No newline at end of file +CALL db.vertexVectorKnnSearch('person','embedding1',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; +CALL db.vertexVectorKnnSearch('person','embedding2',[1,2,3,4], {top_k:2, hnsw_ef_search:10}) yield node return node.id; +CALL db.vertexVectorRangeSearch('person','embedding2', [1.0,2.0,3.0,4.0], {radius:10.0, hnsw_ef_search:10}) yield node,distance return node.id, distance; + +CALL db.createVertexLabelByJson('{"label":"student","primary":"id","type":"VERTEX","detach_property":true,"properties":[{"name":"id","type":"INT32","optional":false},{"name":"name","type":"STRING","optional":false,"index":false},{"name":"embedding","type":"FLOAT_VECTOR","optional":false}]}'); +CALL db.addVertexVectorIndex('student','embedding', {dimension:4}); +CREATE (n:student {id:1, name:'name1', embedding: [1.0,1.0,1.0,1.0]}); +CREATE (n:student {id:2, name:'name2', embedding: [2.0,2.0,2.0,2.0]}); +CREATE (n:student {id:3, name:'name3', embedding: [3.0,3.0,3.0,3.0]}); +CALL db.vertexVectorRangeSearch('student','embedding', [1.0,2.0,3.0,4.0], {radius:10.0, hnsw_ef_search:10}) yield node,distance return node.id, distance; +CALL db.vertexVectorRangeSearch('student','embedding', [1.0,2.0,3.0,4.0], {radius:10.0, hnsw_ef_search:10, limit:1}) yield node,distance return node.id, distance; \ No newline at end of file diff --git a/test/test_vsag_index.cpp b/test/test_vsag_index.cpp index a37deafe6..fadc71b7c 100644 --- a/test/test_vsag_index.cpp +++ b/test/test_vsag_index.cpp @@ -69,7 +69,7 @@ TEST_F(TestVsag, SearchIndex) { EXPECT_NO_THROW(vector_index->Add(vectors, vids, num_vectors)); std::vector query(vectors[0].begin(), vectors[0].end()); std::vector> ret; - ret = vector_index->Search(query, 10, 10); + ret = vector_index->KnnSearch(query, 10, 10); ASSERT_TRUE(!ret.empty()); ASSERT_EQ(ret[0].first, vids[0]); } @@ -83,7 +83,7 @@ TEST_F(TestVsag, SaveAndLoadIndex) { EXPECT_NO_THROW(vector_index_loaded.Build()); vector_index_loaded.Load(serialized_index); std::vector query(vectors[0].begin(), vectors[0].end()); - auto ret = vector_index_loaded.Search(query, 10, 10); + auto ret = vector_index_loaded.KnnSearch(query, 10, 10); ASSERT_TRUE(!ret.empty()); ASSERT_EQ(ret[0].first, vids[0]); } @@ -94,7 +94,7 @@ TEST_F(TestVsag, DeleteVectors) { std::vector delete_vids = {vids[0], vids[1]}; EXPECT_NO_THROW(vector_index->Add({}, delete_vids, 0)); std::vector query(vectors[0].begin(), vectors[0].end()); - auto ret = vector_index->Search(query, 10, 10); + auto ret = vector_index->KnnSearch(query, 10, 10); for (const auto& pair : ret) { ASSERT_TRUE(std::find(delete_vids.begin(), delete_vids.end(), pair.first) == delete_vids.end()); @@ -158,7 +158,7 @@ TEST_F(TestVsag, restart) { "CALL db.upsertVertex('person', [{id:3, vector: [3.0,3.0,3.0,3.0]}," "{id:4, vector: [4.0,4.0,4.0,4.0]}])"); UT_EXPECT_TRUE(ret); - ret = client.CallCypher(str,"CALL db.vertexVectorIndexQuery" //NOLINT + ret = client.CallCypher(str,"CALL db.vertexVectorKnnSearch" //NOLINT "('person','vector',[1,2,3,4], {top_k:4, hnsw_ef_search:10}) YIELD node RETURN node.id"); UT_EXPECT_EQ(str, R"([{"node.id":2},{"node.id":3},{"node.id":1},{"node.id":4}])"); UT_EXPECT_TRUE(ret); @@ -171,7 +171,7 @@ TEST_F(TestVsag, restart) { RpcClient client(UT_FMT("{}:{}", conf.bind_host, conf.rpc_port), _detail::DEFAULT_ADMIN_NAME, _detail::DEFAULT_ADMIN_PASS); std::string str; - auto ret = client.CallCypher(str, "CALL db.vertexVectorIndexQuery" + auto ret = client.CallCypher(str, "CALL db.vertexVectorKnnSearch" "('person','vector',[1,2,3,4], {top_k:4, hnsw_ef_search:10}) " "YIELD node RETURN node.id"); UT_EXPECT_EQ(str, R"([{"node.id":2},{"node.id":3},{"node.id":1},{"node.id":4}])"); @@ -187,7 +187,7 @@ TEST_F(TestVsag, restart) { RpcClient client(UT_FMT("{}:{}", conf.bind_host, conf.rpc_port), _detail::DEFAULT_ADMIN_NAME, _detail::DEFAULT_ADMIN_PASS); std::string str; - auto ret = client.CallCypher(str, "CALL db.vertexVectorIndexQuery" + auto ret = client.CallCypher(str, "CALL db.vertexVectorKnnSearch" "('person','vector',[1,2,3,4], 4, 10) " "YIELD node RETURN node.id"); UT_EXPECT_FALSE(ret); @@ -303,20 +303,20 @@ TEST_F(TestVsag, VectorProcedure) { "{id:6, vector: [6.0,6.0,6.0,6.0]}])"); UT_EXPECT_TRUE(ret); ret = client.CallCypher( - str,"CALL db.vertexVectorIndexQuery('person','vector',[1,2,3,4], " // NOLINT + str,"CALL db.vertexVectorKnnSearch('person','vector',[1,2,3,4], " // NOLINT "{top_k:2, hnsw_ef_search:10})"); UT_EXPECT_TRUE(ret); json_val = web::json::value::parse(str); UT_EXPECT_EQ(json_val.size(), 2); ret = client.CallCypher(str, - "CALL db.vertexVectorIndexQuery('person','vector',[1,2,3,4], " + "CALL db.vertexVectorKnnSearch('person','vector',[1,2,3,4], " "{top_k:2, hnsw_ef_search:10}) YIELD node"); UT_EXPECT_TRUE(ret); json_val = web::json::value::parse(str); UT_EXPECT_EQ(json_val[0]["node"]["identity"], 1); UT_EXPECT_EQ(json_val[1]["node"]["identity"], 2); ret = client.CallCypher(str, - "CALL db.vertexVectorIndexQuery('person','vector',[1,2,3,4], " + "CALL db.vertexVectorKnnSearch('person','vector',[1,2,3,4], " "{top_k:2, hnsw_ef_search:10}) YIELD node RETURN node.id"); UT_EXPECT_TRUE(ret); json_val = web::json::value::parse(str);