为什么我的 Firestore 向量嵌入搜索没有返回任何结果?

我按照 firebase 文档创建了一个复合索引

 gcloud alpha firestore indexes composite create \--project=[Insert Project Name Here]--collection-group=elements --query-scope=COLLECTION \--field-config=vector-config='{"dimension":"1536","flat": "{}"}',field-path=embedding

这个操作正常进行,我可以在 gcloud firestore indexes composite describe [Insert Index Name Here] 下清楚地看到它

然后我尝试使用一个 onCall 函数来查询数据库。

export const vectorSearch = functions.https.onCall(async (data, context) => {  const { query, quantity } = data;  if (!query) {    throw new functions.https.HttpsError('failed-precondition', 'query is required');  }  if (!quantity) {    throw new functions.https.HttpsError('failed-precondition', 'quantity is required');  }  try {    console.log(`Creating embedding for ${query}`)    const embeddingResponse = await openai.embeddings.create({      model: "text-embedding-3-small",      input: query,      encoding_format: "float",    });    const embedding = embeddingResponse.data[0].embedding;    console.log(`Embedding:`, embedding)    const vectorQuery: VectorQuery = firestore.collection('elements').findNearest('embedding', FieldValue.vector(embedding), {      limit: quantity,      distanceMeasure: 'COSINE'    });    const snapshot: VectorQuerySnapshot = await vectorQuery.get();    console.log(`Snapshot:`, snapshot)    const formattedData: any = {};    snapshot.docs.forEach((doc) => {      formattedData[doc.id] = doc.data();    });    return { docs: formattedData };  } catch (error) {    console.error('Error querying database:', error);    throw new functions.https.HttpsError('internal', 'Error querying database');  }});

问题

当我调用这个函数时,尽管相关集合下有文档,我却没有得到任何条目。我没有收到任何错误 – 只是响应中没有出现任何文档。然而,我应该能看到我在 quantity 字段中指定的文档数量。这是为什么呢?


回答:

我在 Firestore 数据库中将每个嵌入字段存储为数组。

[0.1, 0.2, 0.3]

我应该将每个嵌入存储为 vector 类型。

FieldValue.vector([0.1, 0.2, 0.3])

Firebase 忽略了不是向量类型的字段,因此搜索的索引为空,所以没有返回任何文档。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注