MilvusApi.h 7.2 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,
J
jinhai 已提交
21 22 23 24 25 26
};

/**
 * @brief Connect API parameter
 */
struct ConnectParam {
G
groot 已提交
27 28
    std::string ip_address;                                ///< Server IP address
    std::string port;                                      ///< Server PORT
J
jinhai 已提交
29 30 31 32 33 34
};

/**
 * @brief Table Schema
 */
struct TableSchema {
G
groot 已提交
35 36 37 38
    std::string table_name;                                ///< Table name
    IndexType index_type = IndexType::invalid;             ///< Index type
    int64_t dimension = 0;                                 ///< Vector dimension, must be a positive value
    bool store_raw_vector = false;                          ///< Is vector raw data stored in the table
J
jinhai 已提交
39 40 41 42
};

/**
 * @brief Range information
G
groot 已提交
43
 * for DATE partition, the format is like: 'year-month-day'
J
jinhai 已提交
44 45
 */
struct Range {
G
groot 已提交
46 47
    std::string start_value;                                ///< Range start
    std::string end_value;                                  ///< Range stop
J
jinhai 已提交
48 49 50 51 52 53
};

/**
 * @brief Record inserted
 */
struct RowRecord {
G
groot 已提交
54
    std::vector<float> data;                               ///< Vector raw data
J
jinhai 已提交
55 56 57 58 59 60
};

/**
 * @brief Query result
 */
struct QueryResult {
G
groot 已提交
61 62
    int64_t id;                                             ///< Output result
    double score;                                           ///< Vector similarity score: 0 ~ 100
J
jinhai 已提交
63 64 65 66 67 68
};

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

G
groot 已提交
72

J
jinhai 已提交
73 74 75 76
/**
 * @brief SDK main class
 */
class Connection {
G
groot 已提交
77
public:
J
jinhai 已提交
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121

    /**
     * @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
    Destroy(std::shared_ptr<Connection> connection_ptr);

    /**
     * @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
     */

    virtual Status Connect(const ConnectParam &param) = 0;

    /**
     * @brief Connect
     *
     * Connect function should be called before any operations
     * Server will be connected after Connect return OK
     *
G
groot 已提交
122
     * @param uri, use to provide server information, example: milvus://ipaddress:port
J
jinhai 已提交
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
     *
     * @return Indicate if connect is successful
     */
    virtual Status Connect(const std::string &uri) = 0;

    /**
     * @brief connected
     *
     * Connection status.
     *
     * @return Indicate if connection status
     */
    virtual Status Connected() const = 0;

    /**
     * @brief Disconnect
     *
     * Server will be disconnected after Disconnect return OK
     *
     * @return Indicate if disconnect is successful
     */
    virtual Status Disconnect() = 0;


    /**
     * @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
     */
    virtual Status CreateTable(const TableSchema &param) = 0;


S
starlord 已提交
159 160 161 162 163 164 165 166 167 168 169 170
    /**
     * @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
     */
    virtual bool HasTable(const std::string &table_name) = 0;


J
jinhai 已提交
171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
    /**
     * @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.
     */
    virtual Status DeleteTable(const std::string &table_name) = 0;


    /**
     * @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
     */
    virtual Status AddVector(const std::string &table_name,
G
groot 已提交
195 196
                             const std::vector<RowRecord> &record_array,
                             std::vector<int64_t> &id_array) = 0;
J
jinhai 已提交
197 198 199 200 201 202 203 204 205


    /**
     * @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 已提交
206
     * @param query_range_array, time ranges, if not specified, will search in whole table
J
jinhai 已提交
207
     * @param topk, how many similarity vectors will be searched.
G
groot 已提交
208
     * @param topk_query_result_array, result array.
J
jinhai 已提交
209 210 211 212
     *
     * @return Indicate if query is successful.
     */
    virtual Status SearchVector(const std::string &table_name,
G
groot 已提交
213 214 215 216
                                const std::vector<RowRecord> &query_record_array,
                                const std::vector<Range> &query_range_array,
                                int64_t topk,
                                std::vector<TopKQueryResult> &topk_query_result_array) = 0;
J
jinhai 已提交
217 218 219 220 221 222 223 224 225 226 227 228 229

    /**
     * @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.
     */
    virtual Status DescribeTable(const std::string &table_name, TableSchema &table_schema) = 0;

G
groot 已提交
230 231 232 233 234 235 236 237 238 239 240 241
    /**
     * @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.
     */
    virtual Status GetTableRowCount(const std::string &table_name, int64_t &row_count) = 0;

J
jinhai 已提交
242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281
    /**
     * @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.
     */
    virtual Status ShowTables(std::vector<std::string> &table_array) = 0;

    /**
     * @brief Give the client version
     *
     * This method is used to give the client version.
     *
     * @return Client version.
     */
    virtual std::string ClientVersion() const = 0;

    /**
     * @brief Give the server version
     *
     * This method is used to give the server version.
     *
     * @return Server version.
     */
    virtual std::string ServerVersion() const = 0;

    /**
     * @brief Give the server status
     *
     * This method is used to give the server status.
     *
     * @return Server status.
     */
    virtual std::string ServerStatus() const = 0;
};

}