MilvusApi.h 9.1 KB
Newer Older
J
jinhai 已提交
1 2 3 4 5 6 7 8
#pragma once

#include "Status.h"

#include <string>
#include <vector>
#include <memory>

G
groot 已提交
9
/** \brief Milvus SDK namespace
J
jinhai 已提交
10
 */
G
groot 已提交
11
namespace milvus {
J
jinhai 已提交
12 13 14 15 16 17


/**
 * @brief Index Type
 */
enum class IndexType {
G
groot 已提交
18 19 20
    invalid = 0,
    cpu_idmap,
    gpu_ivfflat,
S
starlord 已提交
21
    gpu_ivfsq8,
X
xj.lin 已提交
22
    mix_nsg,
J
jinhai 已提交
23 24
};

S
starlord 已提交
25 26 27 28 29
enum class MetricType {
    L2 = 1,
    IP = 2,
};

J
jinhai 已提交
30 31 32 33
/**
 * @brief Connect API parameter
 */
struct ConnectParam {
G
groot 已提交
34 35
    std::string ip_address;                                ///< Server IP address
    std::string port;                                      ///< Server PORT
J
jinhai 已提交
36 37 38 39 40 41
};

/**
 * @brief Table Schema
 */
struct TableSchema {
G
groot 已提交
42 43
    std::string table_name;                                ///< Table name
    int64_t dimension = 0;                                 ///< Vector dimension, must be a positive value
44
    int64_t index_file_size = 0;                           ///< Index file size, must be a positive value
S
starlord 已提交
45
    MetricType metric_type = MetricType::L2;               ///< Index metric type
J
jinhai 已提交
46 47 48 49
};

/**
 * @brief Range information
G
groot 已提交
50
 * for DATE partition, the format is like: 'year-month-day'
J
jinhai 已提交
51 52
 */
struct Range {
G
groot 已提交
53 54
    std::string start_value;                                ///< Range start
    std::string end_value;                                  ///< Range stop
J
jinhai 已提交
55 56 57 58 59 60
};

/**
 * @brief Record inserted
 */
struct RowRecord {
G
groot 已提交
61
    std::vector<float> data;                               ///< Vector raw data
J
jinhai 已提交
62 63 64 65 66 67
};

/**
 * @brief Query result
 */
struct QueryResult {
G
groot 已提交
68
    int64_t id;                                             ///< Output result
J
jinhai 已提交
69
    double distance;                                        ///< Vector similarity distance
J
jinhai 已提交
70 71 72 73 74 75
};

/**
 * @brief TopK query result
 */
struct TopKQueryResult {
G
groot 已提交
76
    std::vector<QueryResult> query_result_arrays;           ///< TopK query result
J
jinhai 已提交
77 78
};

Y
Yu Kun 已提交
79 80 81 82 83
/**
 * @brief index parameters
 */
struct IndexParam {
    std::string table_name;
84 85
    IndexType index_type;
    int32_t nlist;
Y
Yu Kun 已提交
86
};
G
groot 已提交
87

J
jinhai 已提交
88 89 90 91
/**
 * @brief SDK main class
 */
class Connection {
K
kun yu 已提交
92
 public:
J
jinhai 已提交
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115

    /**
     * @brief CreateConnection
     *
     * Create a connection instance and return it's shared pointer
     *
     * @return Connection instance pointer
     */

    static std::shared_ptr<Connection>
    Create();

    /**
     * @brief DestroyConnection
     *
     * Destroy the connection instance
     *
     * @param connection, the shared pointer to the instance to be destroyed
     *
     * @return if destroy is successful
     */

    static Status
K
kun yu 已提交
116
    Destroy(std::shared_ptr<Connection>& connection_ptr);
J
jinhai 已提交
117 118 119 120 121 122 123 124 125 126 127 128

    /**
     * @brief Connect
     *
     * Connect function should be called before any operations
     * Server will be connected after Connect return OK
     *
     * @param param, use to provide server information
     *
     * @return Indicate if connect is successful
     */

Y
Yu Kun 已提交
129 130
    virtual Status
    Connect(const ConnectParam &param) = 0;
J
jinhai 已提交
131 132 133 134 135 136 137

    /**
     * @brief Connect
     *
     * Connect function should be called before any operations
     * Server will be connected after Connect return OK
     *
G
groot 已提交
138
     * @param uri, use to provide server information, example: milvus://ipaddress:port
J
jinhai 已提交
139 140 141
     *
     * @return Indicate if connect is successful
     */
Y
Yu Kun 已提交
142 143
    virtual Status
    Connect(const std::string &uri) = 0;
J
jinhai 已提交
144 145 146 147 148 149 150 151

    /**
     * @brief connected
     *
     * Connection status.
     *
     * @return Indicate if connection status
     */
Y
Yu Kun 已提交
152 153
    virtual Status
    Connected() const = 0;
J
jinhai 已提交
154 155 156 157 158 159 160 161

    /**
     * @brief Disconnect
     *
     * Server will be disconnected after Disconnect return OK
     *
     * @return Indicate if disconnect is successful
     */
Y
Yu Kun 已提交
162 163
    virtual Status
    Disconnect() = 0;
J
jinhai 已提交
164 165 166 167 168 169 170 171 172 173 174


    /**
     * @brief Create table method
     *
     * This method is used to create table
     *
     * @param param, use to provide table information to be created.
     *
     * @return Indicate if table is created successfully
     */
Y
Yu Kun 已提交
175 176
    virtual Status
    CreateTable(const TableSchema &param) = 0;
J
jinhai 已提交
177 178


G
groot 已提交
179 180 181 182 183 184 185 186 187
    /**
     * @brief Test table existence method
     *
     * This method is used to create table
     *
     * @param table_name, table name is going to be tested.
     *
     * @return Indicate if table is cexist
     */
Y
Yu Kun 已提交
188 189
    virtual bool
    HasTable(const std::string &table_name) = 0;
G
groot 已提交
190 191


J
jinhai 已提交
192 193 194 195 196 197 198 199 200
    /**
     * @brief Delete table method
     *
     * This method is used to delete table.
     *
     * @param table_name, table name is going to be deleted.
     *
     * @return Indicate if table is delete successfully.
     */
Y
Yu Kun 已提交
201 202
    virtual Status
    DropTable(const std::string &table_name) = 0;
K
kun yu 已提交
203

204
    /**
Y
Yu Kun 已提交
205
     * @brief Create index method
206
     *
Y
Yu Kun 已提交
207
     * This method is used to create index for whole table
208
     *
Y
Yu Kun 已提交
209 210 211 212 213
     * @param IndexParam
     *  table_name, table name is going to be create index.
     *  index type,
     *  nlist,
     *  index file size
214 215 216
     *
     * @return Indicate if build index successfully.
     */
Y
Yu Kun 已提交
217
    virtual Status
Y
Yu Kun 已提交
218
    CreateIndex(const IndexParam &index_param) = 0;
219

J
jinhai 已提交
220 221 222 223 224 225 226 227 228 229 230
    /**
     * @brief Add vector to table
     *
     * This method is used to add vector array to table.
     *
     * @param table_name, table_name is inserted.
     * @param record_array, vector array is inserted.
     * @param id_array, after inserted every vector is given a id.
     *
     * @return Indicate if vector array are inserted successfully
     */
Y
Yu Kun 已提交
231
    virtual Status
Y
Yu Kun 已提交
232 233 234
    Insert(const std::string &table_name,
                 const std::vector<RowRecord> &record_array,
                 std::vector<int64_t> &id_array) = 0;
J
jinhai 已提交
235 236 237 238 239 240 241 242

    /**
     * @brief Search vector
     *
     * This method is used to query vector in table.
     *
     * @param table_name, table_name is queried.
     * @param query_record_array, all vector are going to be queried.
G
groot 已提交
243
     * @param query_range_array, time ranges, if not specified, will search in whole table
J
jinhai 已提交
244
     * @param topk, how many similarity vectors will be searched.
G
groot 已提交
245
     * @param topk_query_result_array, result array.
J
jinhai 已提交
246 247 248
     *
     * @return Indicate if query is successful.
     */
Y
Yu Kun 已提交
249
    virtual Status
Y
Yu Kun 已提交
250 251 252 253
    Search(const std::string &table_name,
                 const std::vector<RowRecord> &query_record_array,
                 const std::vector<Range> &query_range_array,
                 int64_t topk,
Y
Yu Kun 已提交
254
                 int64_t nprobe,
Y
Yu Kun 已提交
255
                 std::vector<TopKQueryResult> &topk_query_result_array) = 0;
J
jinhai 已提交
256 257 258 259 260 261 262 263 264 265 266

    /**
     * @brief Show table description
     *
     * This method is used to show table information.
     *
     * @param table_name, which table is show.
     * @param table_schema, table_schema is given when operation is successful.
     *
     * @return Indicate if this operation is successful.
     */
Y
Yu Kun 已提交
267 268
    virtual Status
    DescribeTable(const std::string &table_name, TableSchema &table_schema) = 0;
J
jinhai 已提交
269

G
groot 已提交
270 271 272 273 274 275 276 277 278 279
    /**
     * @brief Get table row count
     *
     * This method is used to get table row count.
     *
     * @param table_name, table's name.
     * @param row_count, table total row count.
     *
     * @return Indicate if this operation is successful.
     */
Y
Yu Kun 已提交
280
    virtual Status
Y
Yu Kun 已提交
281 282
    CountTable(const std::string &table_name,
            int64_t &row_count) = 0;
G
groot 已提交
283

J
jinhai 已提交
284 285 286 287 288 289 290 291 292
    /**
     * @brief Show all tables in database
     *
     * This method is used to list all tables.
     *
     * @param table_array, all tables are push into the array.
     *
     * @return Indicate if this operation is successful.
     */
Y
Yu Kun 已提交
293 294
    virtual Status
    ShowTables(std::vector<std::string> &table_array) = 0;
J
jinhai 已提交
295 296 297 298 299 300 301 302

    /**
     * @brief Give the client version
     *
     * This method is used to give the client version.
     *
     * @return Client version.
     */
Y
Yu Kun 已提交
303 304
    virtual std::string
    ClientVersion() const = 0;
J
jinhai 已提交
305 306 307 308 309 310 311 312

    /**
     * @brief Give the server version
     *
     * This method is used to give the server version.
     *
     * @return Server version.
     */
Y
Yu Kun 已提交
313 314
    virtual std::string
    ServerVersion() const = 0;
J
jinhai 已提交
315 316 317 318 319 320 321 322

    /**
     * @brief Give the server status
     *
     * This method is used to give the server status.
     *
     * @return Server status.
     */
Y
Yu Kun 已提交
323 324
    virtual std::string
    ServerStatus() const = 0;
Y
Yu Kun 已提交
325

Y
Yu Kun 已提交
326 327 328
    virtual std::string
    DumpTaskTables() const = 0;

Y
Yu Kun 已提交
329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363
    /**
     * @brief delete tables by range
     *
     * This method is used to delete tables by range.
     *
     * @param Range, table range to delete.
     * @param table_name
     *
     * @return Indicate if this operation is successful.
     */
    virtual Status
    DeleteByRange(Range &range,
                  const std::string &table_name) = 0;

    /**
     * @brief preload table
     *
     * This method is used to preload table
     *
     * @param table_name
     *
     * @return Indicate if this operation is successful.
     */
    virtual Status
    PreloadTable(const std::string &table_name) const = 0;

    /**
     * @brief describe index
     *
     * This method is used to describe index
     *
     * @param table_name
     *
     * @return index informations and indicate if this operation is successful.
     */
364 365
    virtual Status
    DescribeIndex(const std::string &table_name, IndexParam &index_param) const = 0;
Y
Yu Kun 已提交
366 367 368 369 370 371 372 373 374 375 376 377

    /**
     * @brief drop index
     *
     * This method is used to drop index
     *
     * @param table_name
     *
     * @return Indicate if this operation is successful.
     */
    virtual Status
    DropIndex(const std::string &table_name) const = 0;
J
jinhai 已提交
378 379 380
};

}