为什么我的 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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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