使用向量嵌入搜索(续11)
Node.js
const vectorQuery: VectorQuery = coll.findNearest(
{
vectorField: 'embedding_field',
queryVector: [3.0, 1.0, 2.0],
limit: 10,
distanceMeasure: 'EUCLIDEAN',
distanceResultField: 'vector_distance'
});
const snapshot: VectorQuerySnapshot = await vectorQuery.get();
snapshot.forEach((doc) => {
console.log(doc.id, ' Distance: ', doc.get('vector_distance'));
});
Go
import (
"context"
"fmt"
"io"
"cloud.google.com/go/firestore"
)
func vectorSearchDistanceResultField(w io.Writer, projectID string) error {
ctx := context.Background()
client, err := firestore.NewClient(ctx, projectID)
if err != nil {
return fmt.Errorf("firestore.NewClient: %w", err)
}
defer client.Close()
collection := client.Collection("coffee-beans")
// Requires a vector index
// https://firebase.google.com/docs/firestore/vector-search#create_and_manage_vector_indexes
vectorQuery := collection.FindNearest("embedding_field",
[]float32{3.0, 1.0, 2.0},
10,
firestore.DistanceMeasureEuclidean,
&firestore.FindNearestOptions{
DistanceResultField: "vector_distance",
})
docs, err := vectorQuery.Documents(ctx).GetAll()
if err != nil {
fmt.Fprintf(w, "failed to get vector query results: %v", err)
return err
}
for _, doc := range docs {
fmt.Fprintf(w, "%v, Distance: %v\n", doc.Data()["name"], doc.Data()["vector_distance"])
}
return nil
}
vector_search_result_field.go
Java
import com.google.cloud.firestore.VectorQuery;
import com.google.cloud.firestore.VectorQueryOptions;
import com.google.cloud.firestore.VectorQuerySnapshot;
VectorQuery vectorQuery = coll.findNearest(
"embedding_field",
new double[] {3.0, 1.0, 2.0},
/* limit */ 10,
VectorQuery.DistanceMeasure.EUCLIDEAN,
VectorQueryOptions.newBuilder().setDistanceResultField("vector_distance").build());
ApiFuture<VectorQuerySnapshot> future = vectorQuery.get();
VectorQuerySnapshot vectorQuerySnapshot = future.get();
for (DocumentSnapshot document : vectorQuerySnapshot.getDocuments()) {
System.out.println(document.getId() + " Distance: " + document.get("vector_distance"));
}
如果您想使用字段掩码返回部分文档字段以及 distanceResultField,则还必须在字段掩码中添加 distanceResultField 的值,如以下示例所示:
Python
vector_query = collection.select(["color", "vector_distance"]).find_nearest(
vector_field="embedding_field",
query_vector=Vector([0.3416704, 0.18332680, 0.24160706]),
distance_measure=DistanceMeasure.EUCLIDEAN,
limit=10,
distance_result_field="vector_distance",
)
vector_search.py
Node.js
const vectorQuery: VectorQuery = coll
.select('name', 'description', 'vector_distance')
.findNearest({
vectorField: 'embedding_field',
queryVector: [3.0, 1.0, 2.0],
limit: 10,
distanceMeasure: 'EUCLIDEAN',
distanceResultField: 'vector_distance'
});
Go
import (
"context"
"fmt"
"io"
"cloud.google.com/go/firestore"
)
func vectorSearchDistanceResultFieldMasked(w io.Writer, projectID string) error {
ctx := context.Background()
client, err := firestore.NewClient(ctx, projectID)
if err != nil {
return fmt.Errorf("firestore.NewClient: %w", err)
}
defer client.Close()
collection := client.Collection("coffee-beans")
// Requires a vector index
// https://firebase.google.com/docs/firestore/vector-search#create_and_manage_vector_indexes
vectorQuery := collection.Select("color", "vector_distance").
FindNearest("embedding_field",
[]float32{3.0, 1.0, 2.0},
10,
firestore.DistanceMeasureEuclidean,
&firestore.FindNearestOptions{
DistanceResultField: "vector_distance",
})
docs, err := vectorQuery.Documents(ctx).GetAll()
if err != nil {
fmt.Fprintf(w, "failed to get vector query results: %v", err)
return err
}
for _, doc := range docs {
fmt.Fprintf(w, "%v, Distance: %v\n", doc.Data()["color"], doc.Data()["vector_distance"])
}
return nil
}
vector_search_result_field_masked.go
Java
import com.google.cloud.firestore.VectorQuery;
import com.google.cloud.firestore.VectorQueryOptions;
import com.google.cloud.firestore.VectorQuerySnapshot;
VectorQuery vectorQuery = coll
.select("name", "description", "vector_distance")
.findNearest(
"embedding_field",
new double[] {3.0, 1.0, 2.0},
/* limit */ 10,
VectorQuery.DistanceMeasure.EUCLIDEAN,
VectorQueryOptions.newBuilder()
.setDistanceResultField("vector_distance")
.build());
ApiFuture<VectorQuerySnapshot> future = vectorQuery.get();
VectorQuerySnapshot vectorQuerySnapshot = future.get();
for (DocumentSnapshot document : vectorQuerySnapshot.getDocuments()) {
System.out.println(document.getId() + " Distance: " + document.get("vector_distance"));
}
