Qdrant

以下是所有可用的 Qdrant 过程列表,请注意列表和签名过程与 ChromaDB 等其他过程一致

名称 描述

apoc.vectordb.qdrant.info(hostOrKey, collection, $config)

获取指定现有集合的信息,如果不存在则抛出 FileNotFoundException

apoc.vectordb.qdrant.createCollection(hostOrKey, collection, similarity, size, $config)

创建一个集合,名称由第二个参数指定,并指定 similaritysize。默认端点为 <hostOrKey param>/collections/<collection param>

apoc.vectordb.qdrant.deleteCollection(hostOrKey, collection, $config)

删除名称由第二个参数指定的集合。默认端点为 <hostOrKey param>/collections/<collection param>

apoc.vectordb.qdrant.upsert(hostOrKey, collection, vectors, $config)

在名称由第二个参数指定的集合中,更新/插入向量 [{id: 'id', vector: '<vectorDb>', medatada: '<metadata>'}]. 默认端点为 <hostOrKey param>/collections/<collection param>/points

apoc.vectordb.qdrant.delete(hostOrKey, collection, ids, $config)

删除具有指定 ids 的向量。默认端点为 <hostOrKey param>/collections/<collection param>/points/delete

apoc.vectordb.qdrant.get(hostOrKey, collection, ids, $config)

获取具有指定 ids 的向量。默认端点为 <hostOrKey param>/collections/<collection param>/points

apoc.vectordb.qdrant.getAndUpdate(hostOrKey, collection, ids, $config)

获取具有指定 ids 的向量,并可选择创建/更新 Neo4j 实体。默认端点为 <hostOrKey param>/collections/<collection param>/points

apoc.vectordb.qdrant.query(hostOrKey, collection, vector, filter, limit, $config)

在名称由第二个参数指定的集合中,从定义的 vector 中检索最接近的向量,结果限制为 limit。默认端点为 <hostOrKey param>/collections/<collection param>/points/search

apoc.vectordb.qdrant.queryAndUpdate(hostOrKey, collection, vector, filter, limit, $config)

在名称由第二个参数指定的集合中,从定义的 vector 中检索最接近的向量,结果限制为 limit,并可选择创建/更新 Neo4j 实体。默认端点为 <hostOrKey param>/collections/<collection param>/points/search

其中第一个参数可以是 apoc 配置 apoc.qdrant.<key>.host=myHost 定义的键。如果 hostOrKey=null,则默认值为 'https://:6333'。

示例

获取集合信息(它利用了 此 API
CALL apoc.vectordb.qdrant.info(hostOrKey, 'test_collection', {<optional config>})
表 1. 示例结果

{"result": {"optimizer_status": "ok", "points_count": 2, "vectors_count": 2, "segments_count": 8, "indexed_vectors_count": 0, "config": {"params": {"on_disk_payload": true, "vectors": {"size": 4, "distance": "Cosine"}, "shard_number": 1, "replication_factor": 1, "write_consistency_factor": 1}, "optimizer_config": {"max_optimization_threads": 1, "indexing_threshold": 20000, "deleted_threshold": 0.2, "flush_interval_sec": 5, "memmap_threshold": null, "default_segment_number": 0, "max_segment_size": null, "vacuum_min_vector_number": 1000}, "quantization_config": null, "hnsw_config": {"max_indexing_threads": 0, "full_scan_threshold": 10000, "ef_construct": 100, "m": 16, "on_disk": false}, "wal_config": {"wal_segments_ahead": 0, "wal_capacity_mb": 32} }, "status": green, "payload_schema": {} }, "time": 1.2725E-4, "status": ok }

创建集合(它利用了 此 API
CALL apoc.vectordb.qdrant.createCollection($hostOrKey, 'test_collection', 'Cosine', 4, {<optional config>})
表 2. 示例结果
结果 时间 状态

true

0.094182458

"ok"

删除集合(它利用了 此 API
CALL apoc.vectordb.qdrant.deleteCollection($hostOrKey, 'test_collection', {<optional config>})
表 3. 示例结果
结果 时间 状态

true

0.094182458

"ok"

更新/插入向量(它利用了 此 API
CALL apoc.vectordb.qdrant.upsert($hostOrKey, 'test_collection',
    [
        {id: 1, vector: [0.05, 0.61, 0.76, 0.74], metadata: {city: "Berlin", foo: "one"}},
        {id: 2, vector: [0.19, 0.81, 0.75, 0.11], metadata: {city: "London", foo: "two"}}
    ],
    {<optional config>})
表 4. 示例结果
结果 时间 状态

{"result": { "operation_id": 0, "status": "acknowledged" } }

0.094182458

"ok"

获取向量(它利用了 此 API
CALL apoc.vectordb.qdrant.get($hostOrKey, 'test_collection', [1,2], {<optional config>})
表 5. 示例结果
得分 元数据 id 向量 文本 实体

null

{city: "Berlin", foo: "one"}

null

null

null

null

null

{city: "Berlin", foo: "two"}

null

null

null

null

获取带有 {allResults: true} 的向量
CALL apoc.vectordb.qdrant.get($hostOrKey, 'test_collection', [1,2], {allResults: true, <optional config>})
表 6. 示例结果
得分 元数据 id 向量 文本 实体

null

{city: "Berlin", foo: "one"}

1

[…​]

null

null

null

{city: "Berlin", foo: "two"}

2

[…​]

null

null

查询向量(它利用了 此 API
CALL apoc.vectordb.qdrant.query($hostOrKey,
    'test_collection',
    [0.2, 0.1, 0.9, 0.7],
    { must:
        [ { key: "city", match: { value: "London" } } ]
    },
    5,
    {allResults: true, <optional config>})
表 7. 示例结果
得分 元数据 id 向量 文本 实体

1,

{city: "Berlin", foo: "one"}

1

[…​]

null

null

0.1

{city: "Berlin", foo: "two"}

2

[…​]

null

null

我们可以通过利用向量元数据来定义映射,以获取关联的节点和关系,并可选择创建它们。

例如,如果我们使用上述更新/插入过程创建了 2 个向量,我们可以填充一些现有节点(即 (:Test {myId: 'one'})(:Test {myId: 'two'})

CALL apoc.vectordb.qdrant.queryAndUpdate($hostOrKey, 'test_collection',
    [0.2, 0.1, 0.9, 0.7],
    {},
    5,
    { mapping: {
            embeddingKey: "vect",
            nodeLabel: "Test",
            entityKey: "myId",
            metadataKey: "foo"
        }
    })

这将填充两个节点,如下所示:(:Test {myId: 'one', city: 'Berlin', vect: [vector1]})(:Test {myId: 'two', city: 'London', vect: [vector2]}),它们将在 entity 结果列中返回。

我们还可以将映射配置的 mode 设置为 CREATE_IF_MISSING(如果节点不存在则创建)、READ_ONLY(仅搜索节点/关系,不进行更新)或 UPDATE_EXISTING(默认行为)

CALL apoc.vectordb.qdrant.queryAndUpdate($hostOrKey, 'test_collection',
    [0.2, 0.1, 0.9, 0.7],
    {},
    5,
    { mapping: {
            mode: "CREATE_IF_MISSING",
            embeddingKey: "vect",
            nodeLabel: "Test",
            entityKey: "myId",
            metadataKey: "foo"
        }
    })

这将创建并如上所示创建 2 个新节点。

或者,我们可以填充现有关系(即 (:Start)-[:TEST {myId: 'one'}]→(:End)(:Start)-[:TEST {myId: 'two'}]→(:End)

CALL apoc.vectordb.qdrant.queryAndUpdate($hostOrKey, 'test_collection',
    [0.2, 0.1, 0.9, 0.7],
    {},
    5,
    { mapping: {
            embeddingKey: "vect",
            relType: "TEST",
            entityKey: "myId",
            metadataKey: "foo"
        }
    })

这会填充两个关系,如下所示:()-[:TEST {myId: 'one', city: 'Berlin', vect: [vector1]}]-()()-[:TEST {myId: 'two', city: 'London', vect: [vector2]}]-(),它们将在 entity 结果列中返回。

我们还可以将映射用于 apoc.vectordb.qdrant.query 过程,以搜索符合标签/类型和 metadataKey 的节点/关系,而不进行更新(即等同于映射配置为 mode: "READ_ONLY"*.queryOrUpdate 过程)。

例如,对于先前的关系,我们可以执行以下过程,该过程只在 rel 列中返回这些关系

CALL apoc.vectordb.qdrant.query($hostOrKey, 'test_collection',
    [0.2, 0.1, 0.9, 0.7],
    {},
    5,
    { mapping: {
            relType: "TEST",
            entityKey: "myId",
            metadataKey: "foo"
        }
    })

我们也可以将映射用于 apoc.vectordb.qdrant.get* 过程

为了优化性能,我们可以选择使用 apoc.vectordb.qdrant.query*apoc.vectordb.qdrant.get* 过程时 YIELD 什么。

例如,通过执行 CALL apoc.vectordb.qdrant.query(…​) YIELD metadata, score, id,RestAPI 请求将包含 {"with_payload": false, "with_vectors": false},这样我们就不会返回我们不需要的其他值。

可以如下所示将向量数据库过程与 apoc.ml.rag 一起执行

CALL apoc.vectordb.qdrant.getAndUpdate($host, $collection, [<id1>, <id2>], $conf) YIELD node, metadata, id, vector
WITH collect(node) as paths
CALL apoc.ml.rag(paths, $attributes, $question, $confPrompt) YIELD value
RETURN value

它返回一个字符串,该字符串通过利用数据库向量的嵌入来回答 $question

删除向量(它利用了 此 API
CALL apoc.vectordb.qdrant.delete($hostOrKey, 'test_collection', [1,2], {<optional config>})
表 8. 示例结果
结果 时间 状态

{"result": { "operation_id": 2, "status": "acknowledged" } }

0.094182458

"ok"

© . All rights reserved.