Flush()
此操作会刷新流式数据并封存 Segment。建议在将所有数据插入 Collection 后调用此操作。
c++
Status Flush(const FlushRequest& request)
请求语法
c++
auto request = FlushRequest()
.WithDatabaseName(db_name)
.WithCollectionNames(names)
.WithWaitFlushedMs(ms);
请求方法:
-
WithDatabaseName(const std::string& db_name)设置目标 Database 名称。若未指定,则使用默认 Database。
-
WithCollectionNames(std::set<std::string>&& names)设置 Collection 名称。
-
AddCollectionName(const std::string& name)添加需要执行 Flush 操作的 Collection 名称。
-
WithWaitFlushedMs(int64_t ms)设置等待 Flush 操作完成的超时时间(毫秒)。默认值为 0。当
WaitFlushedMs为 0 时,该操作会反复调用GetFlushState()检查相关 Segment 的状态,直到所有 Segment 均完成刷新,以确保缓冲区数据成功持久化。若WaitFlushedMs大于 0,则该操作会在指定时间后终止轮询并返回超时状态。
返回值:
Status
请检查 status.IsOk() 以确认操作是否成功。
异常:
-
StatusCode
请检查
status.Code()和status.Message()以获取错误详情。
示例
c++
#include "milvus/MilvusClientV2.h"
auto client = milvus::MilvusClientV2::Create();
milvus::ConnectParam connect_param{"YOUR_CLUSTER_ENDPOINT", "YOUR_CLUSTER_TOKEN"};
auto status = client->Connect(connect_param);
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
// call flush() here just to persist the data so that indexnode can build index on a new segment
// Note: in practice, no need to call flush() manually since milvus automatically trigger flush actions
status = client->Flush(milvus::FlushRequest().AddCollectionName(collection_name));
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}