正文
let client = QdrantClient::from_url("http://localhost:6334").build()?;
client
.create_collection(&CreateCollection {
collection_name: collection.into(),
vectors_config: Some(VectorsConfig {
config: Some(Config::Params(VectorParams {
size: OPENAI_EMBEDDING_DIM,
distance: Distance::Cosine.into(),
..Default::default()
})),
}),
..Default::default()
})
.await?;
对这个代码稍作探索就可以发现它调用了相应的 GRPC 服务。剩下的事情就简单了,在 qdrant 代码库中找到 GRPC service 的实现(它用了 tonic,很容易辨识),然后找到 create collection 的方法,避开无关代码和任何跟分布式处理有关的代码,一层层找下去,很容易发现核心代码是
self.toc.perform_collection_meta_op
,而核心的数据结构就是
TableOfContent
:
另外一个方法 —— 如上图所示,qdrant 还提供了 RESTful API(见 actix),所以我们也可以看它的代码:
可以看到,二者殊途同归。
接下来,就是来找
TableOfContent
在何处创建。很简单的代码搜索后,不难发现它在
main.rs
里初始化的: