diff --git a/qdrant-landing/content/documentation/cloud-quickstart.md b/qdrant-landing/content/documentation/cloud-quickstart.md
index 440e7d9fa..43def9ae5 100644
--- a/qdrant-landing/content/documentation/cloud-quickstart.md
+++ b/qdrant-landing/content/documentation/cloud-quickstart.md
@@ -14,12 +14,12 @@ aliases:
-Learn how to set up Qdrant Cloud and perform your first semantic search in just a few minutes. We'll use a sample dataset of menu items pre-embedded with the `BAAI/bge-small-en-v1.5` model.
+Learn how to set up Qdrant Cloud and perform your first semantic search in just a few minutes. We'll use a sample dataset of menu items embedded with the `sentence-transformers/all-MiniLM-L6-v2` model via [Cloud Inference](/documentation/concepts/inference/). This is one of the free embedding models available on Qdrant Cloud. For a list of the available free and paid models, refer to the Inference tab of the Cluster Detail page in the Qdrant Cloud Console.
## 1. Create a Cloud Cluster
1. Register for a [Cloud account](https://cloud.qdrant.io/signup) with your email, Google or Github credentials.
-2. Go to **Clusters** and click **Create First Cluster**.
+2. Under **Create a Free Cluster**, enter a cluster name and select your preferred cloud provider and region. Click **Create Free Cluster**.
3. Copy your **API key** when prompted - you'll need it to connect. Store it somewhere safe as it won't be displayed again.
For detailed cluster setup instructions, see the [Cloud documentation](/documentation/cloud-intro/).
@@ -29,9 +29,11 @@ For detailed cluster setup instructions, see the [Cloud documentation](/document
Once you have a cluster, the fastest way to get started is to use our official SDKs which provide a convenient interface for working with Qdrant in your preferred programming language.
```bash
-pip install qdrant-client fastembed # for Python projects
-# cargo add qdrant-client fastembed # for Rust projects
-# npm install @qdrant/js-client-rest fastembed # for Node.js projects
+pip install qdrant-client # for Python projects
+# cargo add qdrant-client # for Rust projects
+# npm install @qdrant/js-client-rest # for Node.js projects
+# dotnet add package Qdrant.Client # for .NET projects
+# go get github.com/qdrant/go-client # for Go projects
```
## 3. Connect to Qdrant Cloud
@@ -40,18 +42,23 @@ Import the qdrant client and create a connection to your Qdrant Cloud cluster us
```python
from qdrant_client import QdrantClient
+from qdrant_client.models import Distance, VectorParams, PointStruct, Document
# connect to Qdrant Cloud
client = QdrantClient(
url="https://xyz-example.eu-central.aws.cloud.qdrant.io",
api_key="your-api-key",
+ cloud_inference=True
)
```
```rust
-use qdrant_client::Qdrant;
+use qdrant_client::{Qdrant, Payload};
+use qdrant_client::qdrant::{CreateCollectionBuilder, Distance, VectorParamsBuilder, PointStruct, DocumentBuilder, UpsertPointsBuilder, QueryPointsBuilder, Query};
-// Connect to Qdrant Cloud
+use serde_json::json;
+
+// connect to Qdrant Cloud
let client = Qdrant::from_url("https://xyz-example.eu-central.aws.cloud.qdrant.io:6334")
.api_key("your-api-key")
.build()?;
@@ -66,6 +73,67 @@ const client = new QdrantClient({
});
```
+```java
+import static io.qdrant.client.PointIdFactory.id;
+import static io.qdrant.client.QueryFactory.nearest;
+import static io.qdrant.client.ValueFactory.value;
+import static io.qdrant.client.VectorsFactory.vectors;
+
+import io.qdrant.client.QdrantClient;
+import io.qdrant.client.QdrantGrpcClient;
+import io.qdrant.client.grpc.Points.Document;
+import io.qdrant.client.grpc.Points.PointStruct;
+import io.qdrant.client.grpc.Points.QueryPoints;
+import io.qdrant.client.grpc.Points.ScoredPoint;
+import io.qdrant.client.grpc.Points.WithPayloadSelector;
+import io.qdrant.client.grpc.Collections.Distance;
+import io.qdrant.client.grpc.Collections.VectorParams;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+
+QdrantClient client =
+ new QdrantClient(
+ QdrantGrpcClient.newBuilder("xyz-example.qdrant.io", 6334, true)
+ .withApiKey("")
+ .build());
+```
+
+
+```csharp
+using Qdrant.Client;
+using Qdrant.Client.Grpc;
+
+var client = new QdrantClient(
+ host: "xyz-example.qdrant.io",
+ port: 6334,
+ https: true,
+ apiKey: ""
+);
+```
+
+```go
+import (
+ "context"
+ "fmt"
+
+ "github.com/qdrant/go-client/qdrant"
+)
+
+client, err := qdrant.NewClient(&qdrant.Config{
+ Host: "xyz-example.qdrant.io",
+ Port: 6334,
+ APIKey: "",
+ UseTLS: true,
+})
+
+if err != nil {
+ fmt.Printf("Failed to create client: %v\n", err)
+ return
+}
+```
+
```bash
# test the connection
curl -X GET \
@@ -79,8 +147,6 @@ We will use some sample menu items to demonstrate how to create a collection and
```python
-from qdrant_client.models import Distance, VectorParams
-
# create collection
client.create_collection(
collection_name="items",
@@ -89,8 +155,6 @@ client.create_collection(
```
```rust
-use qdrant_client::qdrant::{CreateCollectionBuilder, Distance, VectorParamsBuilder};
-
// create collection
client.create_collection(
CreateCollectionBuilder::new("items")
@@ -105,6 +169,28 @@ await client.createCollection("items", {
});
```
+```java
+client.createCollectionAsync("items",
+ VectorParams.newBuilder().setDistance(Distance.Cosine).setSize(384).build()).get();
+```
+
+```csharp
+await client.CreateCollectionAsync(
+ collectionName: "items",
+ vectorsConfig: new VectorParams { Size = 384, Distance = Distance.Cosine }
+);
+```
+
+```go
+client.CreateCollection(context.Background(), &qdrant.CreateCollection{
+ CollectionName: "items",
+ VectorsConfig: qdrant.NewVectorsConfig(&qdrant.VectorParams{
+ Size: 384,
+ Distance: qdrant.Distance_Cosine,
+ }),
+})
+```
+
```bash
curl -X PUT \
'http://:6333/collections/items' \
@@ -119,15 +205,9 @@ curl -X PUT \
```
## 5. Populate the collection
-Next, we will populate the collection with menu items. Each item will be represented as a point in the collection, with its vector embedding and associated metadata.
+Next, we will populate the collection with menu items. Each item will be represented as a point in the collection with its associated metadata. Instead of generating embeddings locally, we pass a `Document` object with the text and model name — Qdrant Cloud Inference handles the embedding automatically.
```python
-from qdrant_client.models import PointStruct
-from fastembed import TextEmbedding
-
-# load the embedding model
-model = TextEmbedding('BAAI/bge-small-en-v1.5')
-
menu_items = [
("Pad Thai with Tofu", "Stir-fried rice noodles with tofu bean sprouts scallions and crushed peanuts in traditional tamarind sauce", "$13.95", "Noodles"),
("Grilled Salmon Fillet", "Wild-caught Atlantic salmon grilled with lemon butter and fresh herbs served with seasonal vegetables", "$24.50", "Seafood Entrees"),
@@ -161,19 +241,20 @@ menu_items = [
("Coconut Shrimp", "Jumbo shrimp breaded in shredded coconut served with sweet chili sauce", "$14.25", "Seafood Appetizers")
]
-# embedding generator
+# points generator
points = []
-embeddings = model.embed([f"{item[0]} {item[1]}" for item in menu_items])
-for i, embedding in enumerate(embeddings):
- vector = embedding.tolist()
+for i, menu_item in enumerate(menu_items):
point = PointStruct(
id=i,
- vector=vector,
+ vector=Document(
+ text=f"{menu_item[0]} {menu_item[1]}",
+ model="sentence-transformers/all-MiniLM-L6-v2"
+ ),
payload={
- "item_name": menu_items[i][0],
- "description": menu_items[i][1],
- "price": menu_items[i][2],
- "category": menu_items[i][3],
+ "item_name": menu_item[0],
+ "description": menu_item[1],
+ "price": menu_item[2],
+ "category": menu_item[3],
}
)
points.append(point)
@@ -186,17 +267,6 @@ client.upsert(
```
```rust
-use fastembed::{EmbeddingModel, InitOptions, TextEmbedding};
-use qdrant_client::qdrant::{PointStruct, UpsertPointsBuilder};
-use qdrant_client::{Qdrant, Payload};
-use serde_json::json;
-
-// load the embedding model
-let mut model = TextEmbedding::try_new(
- InitOptions::new(EmbeddingModel::BGESmallENV15).with_show_download_progress(true),
-)
-.expect("Failed to load embedding model");
-
// generate embeddings and prepare points
let menu_items = vec![
(
@@ -381,28 +451,22 @@ let menu_items = vec![
),
];
-let embeddings = model
- .embed(
- menu_items
- .iter()
- .map(|item| format!("{} {}", item.0, item.1))
- .collect::>(),
- None,
- )
- .expect("Failed to generate embeddings");
-
-let points = embeddings
+let points = menu_items
.into_iter()
.enumerate()
- .map(|(idx, embedding)| {
+ .map(|(idx, menu_item)| {
PointStruct::new(
idx as u64,
- embedding,
+ DocumentBuilder::new(
+ format!("{} {}", menu_item.0, menu_item.1),
+ "sentence-transformers/all-MiniLM-L6-v2"
+ )
+ .build(),
Payload::try_from(json!({
- "item_name": menu_items[idx].0,
- "description": menu_items[idx].1,
- "price": menu_items[idx].2,
- "category": menu_items[idx].3,
+ "item_name": menu_item.0,
+ "description": menu_item.1,
+ "price": menu_item.2,
+ "category": menu_item.3,
}))
.unwrap(),
)
@@ -415,13 +479,6 @@ let _ = client
```
```typescript
-import { TextEmbedding, EmbeddingModel } from 'fastembed';
-
-// load the embedding model
-const model = await FlagEmbedding.init({
- model: EmbeddingModel.BGESmallENV15,
-});
-
let menuItems = [
[
"Pad Thai with Tofu",
@@ -609,16 +666,18 @@ let menuItems = [
const points: any[] = [];
let idx = 0;
-const embeddings = model.embed(menuItems.map(item => `${item[0]} ${item[1]}`));
-for await (const embedding of embeddings) {
+for (const menuItem of menuItems) {
points.push({
id: idx,
- vector: Array.from(embedding[0]),
+ vector: {
+ text: `${menuItem[0]} ${menuItem[1]}`,
+ model: "sentence-transformers/all-MiniLM-L6-v2",
+ },
payload: {
- item_name: menuItems[idx][0],
- description: menuItems[idx][1],
- price: menuItems[idx][2],
- category: menuItems[idx][3],
+ item_name: menuItem[0],
+ description: menuItem[1],
+ price: menuItem[2],
+ category: menuItem[3],
},
});
idx++;
@@ -628,18 +687,193 @@ for await (const embedding of embeddings) {
await client.upsert("items", { points });
```
+```java
+String[][] menuItems = {
+ {"Pad Thai with Tofu", "Stir-fried rice noodles with tofu bean sprouts scallions and crushed peanuts in traditional tamarind sauce", "$13.95", "Noodles"},
+ {"Grilled Salmon Fillet", "Wild-caught Atlantic salmon grilled with lemon butter and fresh herbs served with seasonal vegetables", "$24.50", "Seafood Entrees"},
+ {"Mushroom Risotto", "Creamy arborio rice with mixed mushrooms parmesan truffle oil and fresh thyme", "$16.75", "Vegetarian"},
+ {"Bibimbap Bowl", "Korean rice bowl with seasoned vegetables fried egg gochujang sauce and choice of protein", "$14.50", "Korean Bowls"},
+ {"Falafel Wrap", "Crispy chickpea fritters with hummus tahini cucumber tomato and pickled vegetables in warm pita", "$11.25", "Mediterranean"},
+ {"Shrimp Tacos", "Three soft tacos with grilled shrimp cabbage slaw chipotle aioli and fresh lime", "$13.00", "Tacos"},
+ {"Vegetable Curry", "Mixed vegetables in aromatic coconut curry sauce with jasmine rice and naan bread", "$12.95", "Indian Curries"},
+ {"Tuna Poke Bowl", "Fresh ahi tuna with avocado edamame cucumber seaweed salad over sushi rice with spicy mayo", "$16.50", "Poke Bowls"},
+ {"Margherita Pizza", "Fresh mozzarella san marzano tomatoes basil and extra virgin olive oil on wood-fired crust", "$14.00", "Pizza"},
+ {"Chicken Tikka Masala", "Tandoori chicken in creamy tomato sauce with aromatic spices served with basmati rice", "$15.95", "Indian Entrees"},
+ {"Greek Salad", "Romaine lettuce tomatoes cucumbers kalamata olives feta cheese red onion with lemon oregano dressing", "$10.50", "Salads"},
+ {"Lobster Roll", "Fresh Maine lobster meat with light mayo on toasted buttery roll served with chips", "$22.00", "Seafood Sandwiches"},
+ {"Quinoa Buddha Bowl", "Organic quinoa with roasted chickpeas kale sweet potato tahini dressing and hemp seeds", "$13.50", "Healthy Bowls"},
+ {"Beef Pho", "Traditional Vietnamese beef noodle soup with rice noodles fresh herbs bean sprouts and lime", "$12.75", "Noodle Soups"},
+ {"Eggplant Parmesan", "Breaded eggplant layered with marinara mozzarella and parmesan served with pasta", "$15.25", "Italian Entrees"},
+ {"Crab Cakes", "Maryland-style lump crab cakes with remoulade sauce and mixed greens", "$18.50", "Seafood Appetizers"},
+ {"Tofu Stir Fry", "Crispy tofu with broccoli bell peppers snap peas in garlic ginger sauce over steamed rice", "$12.50", "Vegetarian Entrees"},
+ {"Salmon Sushi Platter", "12 pieces of fresh salmon nigiri and sashimi with wasabi pickled ginger and soy sauce", "$19.95", "Sushi"},
+ {"Caprese Sandwich", "Fresh mozzarella tomatoes basil pesto balsamic glaze on ciabatta bread", "$11.75", "Sandwiches"},
+ {"Tom Yum Soup", "Spicy and sour Thai soup with shrimp lemongrass galangal mushrooms and kaffir lime leaves", "$11.50", "Soups"},
+ {"Lentil Dal", "Red lentils simmered with turmeric cumin coriander served with rice and naan", "$11.95", "Vegan Entrees"},
+ {"Fish and Chips", "Beer-battered cod with crispy fries malt vinegar and tartar sauce", "$16.00", "British Classics"},
+ {"Veggie Burger", "House-made black bean and quinoa patty with avocado sprouts tomato on brioche bun", "$13.25", "Burgers"},
+ {"Miso Ramen", "Rich miso broth with ramen noodles soft-boiled egg bamboo shoots nori and scallions", "$14.50", "Ramen"},
+ {"Stuffed Bell Peppers", "Roasted bell peppers filled with rice vegetables herbs and melted cheese", "$13.75", "Vegetarian Entrees"},
+ {"Scallop Risotto", "Pan-seared sea scallops over creamy parmesan risotto with white wine and lemon", "$26.50", "Seafood Specials"},
+ {"Spring Rolls", "Fresh rice paper rolls with vegetables tofu rice noodles herbs and peanut dipping sauce", "$8.95", "Appetizers"},
+ {"Oyster Po Boy", "Fried oysters with lettuce tomato pickles and remoulade on french bread", "$15.50", "Sandwiches"},
+ {"Portobello Mushroom Steak", "Grilled portobello cap marinated in balsamic with roasted vegetables and quinoa", "$14.95", "Vegan Entrees"},
+ {"Coconut Shrimp", "Jumbo shrimp breaded in shredded coconut served with sweet chili sauce", "$14.25", "Seafood Appetizers"},
+};
+
+List points = new ArrayList<>();
+for (int i = 0; i < menuItems.length; i++) {
+ points.add(
+ PointStruct.newBuilder()
+ .setId(id(i))
+ .setVectors(vectors(
+ Document.newBuilder()
+ .setText(menuItems[i][0] + " " + menuItems[i][1])
+ .setModel("sentence-transformers/all-MiniLM-L6-v2")
+ .build()))
+ .putAllPayload(Map.of(
+ "item_name", value(menuItems[i][0]),
+ "description", value(menuItems[i][1]),
+ "price", value(menuItems[i][2]),
+ "category", value(menuItems[i][3])))
+ .build()
+ );
+}
+
+client.upsertAsync("items", points).get();
+```
+
+```csharp
+var menuItems = new[] {
+ ("Pad Thai with Tofu", "Stir-fried rice noodles with tofu bean sprouts scallions and crushed peanuts in traditional tamarind sauce", "$13.95", "Noodles"),
+ ("Grilled Salmon Fillet", "Wild-caught Atlantic salmon grilled with lemon butter and fresh herbs served with seasonal vegetables", "$24.50", "Seafood Entrees"),
+ ("Mushroom Risotto", "Creamy arborio rice with mixed mushrooms parmesan truffle oil and fresh thyme", "$16.75", "Vegetarian"),
+ ("Bibimbap Bowl", "Korean rice bowl with seasoned vegetables fried egg gochujang sauce and choice of protein", "$14.50", "Korean Bowls"),
+ ("Falafel Wrap", "Crispy chickpea fritters with hummus tahini cucumber tomato and pickled vegetables in warm pita", "$11.25", "Mediterranean"),
+ ("Shrimp Tacos", "Three soft tacos with grilled shrimp cabbage slaw chipotle aioli and fresh lime", "$13.00", "Tacos"),
+ ("Vegetable Curry", "Mixed vegetables in aromatic coconut curry sauce with jasmine rice and naan bread", "$12.95", "Indian Curries"),
+ ("Tuna Poke Bowl", "Fresh ahi tuna with avocado edamame cucumber seaweed salad over sushi rice with spicy mayo", "$16.50", "Poke Bowls"),
+ ("Margherita Pizza", "Fresh mozzarella san marzano tomatoes basil and extra virgin olive oil on wood-fired crust", "$14.00", "Pizza"),
+ ("Chicken Tikka Masala", "Tandoori chicken in creamy tomato sauce with aromatic spices served with basmati rice", "$15.95", "Indian Entrees"),
+ ("Greek Salad", "Romaine lettuce tomatoes cucumbers kalamata olives feta cheese red onion with lemon oregano dressing", "$10.50", "Salads"),
+ ("Lobster Roll", "Fresh Maine lobster meat with light mayo on toasted buttery roll served with chips", "$22.00", "Seafood Sandwiches"),
+ ("Quinoa Buddha Bowl", "Organic quinoa with roasted chickpeas kale sweet potato tahini dressing and hemp seeds", "$13.50", "Healthy Bowls"),
+ ("Beef Pho", "Traditional Vietnamese beef noodle soup with rice noodles fresh herbs bean sprouts and lime", "$12.75", "Noodle Soups"),
+ ("Eggplant Parmesan", "Breaded eggplant layered with marinara mozzarella and parmesan served with pasta", "$15.25", "Italian Entrees"),
+ ("Crab Cakes", "Maryland-style lump crab cakes with remoulade sauce and mixed greens", "$18.50", "Seafood Appetizers"),
+ ("Tofu Stir Fry", "Crispy tofu with broccoli bell peppers snap peas in garlic ginger sauce over steamed rice", "$12.50", "Vegetarian Entrees"),
+ ("Salmon Sushi Platter", "12 pieces of fresh salmon nigiri and sashimi with wasabi pickled ginger and soy sauce", "$19.95", "Sushi"),
+ ("Caprese Sandwich", "Fresh mozzarella tomatoes basil pesto balsamic glaze on ciabatta bread", "$11.75", "Sandwiches"),
+ ("Tom Yum Soup", "Spicy and sour Thai soup with shrimp lemongrass galangal mushrooms and kaffir lime leaves", "$11.50", "Soups"),
+ ("Lentil Dal", "Red lentils simmered with turmeric cumin coriander served with rice and naan", "$11.95", "Vegan Entrees"),
+ ("Fish and Chips", "Beer-battered cod with crispy fries malt vinegar and tartar sauce", "$16.00", "British Classics"),
+ ("Veggie Burger", "House-made black bean and quinoa patty with avocado sprouts tomato on brioche bun", "$13.25", "Burgers"),
+ ("Miso Ramen", "Rich miso broth with ramen noodles soft-boiled egg bamboo shoots nori and scallions", "$14.50", "Ramen"),
+ ("Stuffed Bell Peppers", "Roasted bell peppers filled with rice vegetables herbs and melted cheese", "$13.75", "Vegetarian Entrees"),
+ ("Scallop Risotto", "Pan-seared sea scallops over creamy parmesan risotto with white wine and lemon", "$26.50", "Seafood Specials"),
+ ("Spring Rolls", "Fresh rice paper rolls with vegetables tofu rice noodles herbs and peanut dipping sauce", "$8.95", "Appetizers"),
+ ("Oyster Po Boy", "Fried oysters with lettuce tomato pickles and remoulade on french bread", "$15.50", "Sandwiches"),
+ ("Portobello Mushroom Steak", "Grilled portobello cap marinated in balsamic with roasted vegetables and quinoa", "$14.95", "Vegan Entrees"),
+ ("Coconut Shrimp", "Jumbo shrimp breaded in shredded coconut served with sweet chili sauce", "$14.25", "Seafood Appetizers"),
+};
+
+var points = new List();
+for (int i = 0; i < menuItems.Length; i++)
+{
+ var item = menuItems[i];
+ points.Add(new PointStruct
+ {
+ Id = (ulong)i,
+ Vectors = new Document
+ {
+ Text = $"{item.Item1} {item.Item2}",
+ Model = "sentence-transformers/all-MiniLM-L6-v2",
+ },
+ Payload =
+ {
+ ["item_name"] = item.Item1,
+ ["description"] = item.Item2,
+ ["price"] = item.Item3,
+ ["category"] = item.Item4,
+ },
+ });
+}
+
+await client.UpsertAsync("items", points);
+```
+
+```go
+type MenuItem struct {
+ Name, Description, Price, Category string
+}
+
+menuItems := []MenuItem{
+ {"Pad Thai with Tofu", "Stir-fried rice noodles with tofu bean sprouts scallions and crushed peanuts in traditional tamarind sauce", "$13.95", "Noodles"},
+ {"Grilled Salmon Fillet", "Wild-caught Atlantic salmon grilled with lemon butter and fresh herbs served with seasonal vegetables", "$24.50", "Seafood Entrees"},
+ {"Mushroom Risotto", "Creamy arborio rice with mixed mushrooms parmesan truffle oil and fresh thyme", "$16.75", "Vegetarian"},
+ {"Bibimbap Bowl", "Korean rice bowl with seasoned vegetables fried egg gochujang sauce and choice of protein", "$14.50", "Korean Bowls"},
+ {"Falafel Wrap", "Crispy chickpea fritters with hummus tahini cucumber tomato and pickled vegetables in warm pita", "$11.25", "Mediterranean"},
+ {"Shrimp Tacos", "Three soft tacos with grilled shrimp cabbage slaw chipotle aioli and fresh lime", "$13.00", "Tacos"},
+ {"Vegetable Curry", "Mixed vegetables in aromatic coconut curry sauce with jasmine rice and naan bread", "$12.95", "Indian Curries"},
+ {"Tuna Poke Bowl", "Fresh ahi tuna with avocado edamame cucumber seaweed salad over sushi rice with spicy mayo", "$16.50", "Poke Bowls"},
+ {"Margherita Pizza", "Fresh mozzarella san marzano tomatoes basil and extra virgin olive oil on wood-fired crust", "$14.00", "Pizza"},
+ {"Chicken Tikka Masala", "Tandoori chicken in creamy tomato sauce with aromatic spices served with basmati rice", "$15.95", "Indian Entrees"},
+ {"Greek Salad", "Romaine lettuce tomatoes cucumbers kalamata olives feta cheese red onion with lemon oregano dressing", "$10.50", "Salads"},
+ {"Lobster Roll", "Fresh Maine lobster meat with light mayo on toasted buttery roll served with chips", "$22.00", "Seafood Sandwiches"},
+ {"Quinoa Buddha Bowl", "Organic quinoa with roasted chickpeas kale sweet potato tahini dressing and hemp seeds", "$13.50", "Healthy Bowls"},
+ {"Beef Pho", "Traditional Vietnamese beef noodle soup with rice noodles fresh herbs bean sprouts and lime", "$12.75", "Noodle Soups"},
+ {"Eggplant Parmesan", "Breaded eggplant layered with marinara mozzarella and parmesan served with pasta", "$15.25", "Italian Entrees"},
+ {"Crab Cakes", "Maryland-style lump crab cakes with remoulade sauce and mixed greens", "$18.50", "Seafood Appetizers"},
+ {"Tofu Stir Fry", "Crispy tofu with broccoli bell peppers snap peas in garlic ginger sauce over steamed rice", "$12.50", "Vegetarian Entrees"},
+ {"Salmon Sushi Platter", "12 pieces of fresh salmon nigiri and sashimi with wasabi pickled ginger and soy sauce", "$19.95", "Sushi"},
+ {"Caprese Sandwich", "Fresh mozzarella tomatoes basil pesto balsamic glaze on ciabatta bread", "$11.75", "Sandwiches"},
+ {"Tom Yum Soup", "Spicy and sour Thai soup with shrimp lemongrass galangal mushrooms and kaffir lime leaves", "$11.50", "Soups"},
+ {"Lentil Dal", "Red lentils simmered with turmeric cumin coriander served with rice and naan", "$11.95", "Vegan Entrees"},
+ {"Fish and Chips", "Beer-battered cod with crispy fries malt vinegar and tartar sauce", "$16.00", "British Classics"},
+ {"Veggie Burger", "House-made black bean and quinoa patty with avocado sprouts tomato on brioche bun", "$13.25", "Burgers"},
+ {"Miso Ramen", "Rich miso broth with ramen noodles soft-boiled egg bamboo shoots nori and scallions", "$14.50", "Ramen"},
+ {"Stuffed Bell Peppers", "Roasted bell peppers filled with rice vegetables herbs and melted cheese", "$13.75", "Vegetarian Entrees"},
+ {"Scallop Risotto", "Pan-seared sea scallops over creamy parmesan risotto with white wine and lemon", "$26.50", "Seafood Specials"},
+ {"Spring Rolls", "Fresh rice paper rolls with vegetables tofu rice noodles herbs and peanut dipping sauce", "$8.95", "Appetizers"},
+ {"Oyster Po Boy", "Fried oysters with lettuce tomato pickles and remoulade on french bread", "$15.50", "Sandwiches"},
+ {"Portobello Mushroom Steak", "Grilled portobello cap marinated in balsamic with roasted vegetables and quinoa", "$14.95", "Vegan Entrees"},
+ {"Coconut Shrimp", "Jumbo shrimp breaded in shredded coconut served with sweet chili sauce", "$14.25", "Seafood Appetizers"},
+}
+
+points := make([]*qdrant.PointStruct, len(menuItems))
+for i, item := range menuItems {
+ points[i] = &qdrant.PointStruct{
+ Id: qdrant.NewIDNum(uint64(i)),
+ Vectors: qdrant.NewVectorsDocument(&qdrant.Document{
+ Text: item.Name + " " + item.Description,
+ Model: "sentence-transformers/all-MiniLM-L6-v2",
+ }),
+ Payload: qdrant.NewValueMap(map[string]any{
+ "item_name": item.Name,
+ "description": item.Description,
+ "price": item.Price,
+ "category": item.Category,
+ }),
+ }
+}
+
+client.Upsert(context.Background(), &qdrant.UpsertPoints{
+ CollectionName: "items",
+ Points: points,
+})
+```
+
## 6. Search the Menu Items
-Now we can search the menu item dataset! We'll use the same `BAAI/bge-small-en-v1.5` model to embed our query text, then find the best dishes matching that embedding.
+Now we can search the menu item dataset! We'll use the same `sentence-transformers/all-MiniLM-L6-v2` model in Cloud Inference to embed our query text, then find the best dishes matching that embedding.
```python
# generate query embedding
query_text = "vegetarian dishes"
-query_vector = next(iter(model.embed(query_text)))
# search for similar menu items
results = client.query_points(
collection_name="items",
- query=query_vector,
+ query=Document(text=query_text, model="sentence-transformers/all-MiniLM-L6-v2"),
with_payload=True,
limit=5
)
@@ -656,15 +890,17 @@ for result in results.points:
```rust
// generate query embedding
let query_text = "vegetarian dishes";
-let query_embeddings = model
- .embed(vec![query_text], None)
- .expect("Failed to generate embeddings");
-let query_vector = query_embeddings[0].clone();
let results = client
.query(
QueryPointsBuilder::new("items")
- .query(query_vector)
+ .query(Query::new_nearest(
+ DocumentBuilder::new(
+ query_text,
+ "sentence-transformers/all-MiniLM-L6-v2"
+ )
+ .build(),
+ ))
.with_payload(true)
.limit(5),
)
@@ -689,11 +925,13 @@ for result in results.result {
```typescript
// generate query embedding
const queryText = "vegetarian dishes";
-const queryEmbedding = (await model.embed([queryText]).next()).value!
// search for similar items
const results = await client.query("items", {
- query: Array.from(queryEmbedding[0]),
+ query: {
+ text: queryText,
+ model: "sentence-transformers/all-MiniLM-L6-v2",
+ },
with_payload: true,
limit: 5,
});
@@ -708,6 +946,90 @@ for (const result of results.points) {
}
```
+```java
+// generate query embedding
+String queryText = "vegetarian dishes";
+
+// search for similar menu items
+List results = client
+ .queryAsync(
+ QueryPoints.newBuilder()
+ .setCollectionName("items")
+ .setQuery(nearest(
+ Document.newBuilder()
+ .setText(queryText)
+ .setModel("sentence-transformers/all-MiniLM-L6-v2")
+ .build()))
+ .setWithPayload(
+ WithPayloadSelector.newBuilder().setEnable(true).build())
+ .setLimit(5)
+ .build())
+ .get();
+
+// print results
+for (ScoredPoint result : results) {
+ System.out.println("Item: " + result.getPayloadMap().get("item_name").getStringValue());
+ System.out.println("Score: " + result.getScore());
+ System.out.println("Description: " + result.getPayloadMap().get("description").getStringValue());
+ System.out.println("Price: " + result.getPayloadMap().get("price").getStringValue());
+ System.out.println("---");
+}
+```
+
+```csharp
+// generate query embedding
+var queryText = "vegetarian dishes";
+
+// search for similar menu items
+var results = await client.QueryAsync(
+ collectionName: "items",
+ query: new Document
+ {
+ Text = queryText,
+ Model = "sentence-transformers/all-MiniLM-L6-v2",
+ },
+ payloadSelector: true,
+ limit: 5
+);
+
+// print results
+foreach (var result in results)
+{
+ Console.WriteLine($"Item: {result.Payload["item_name"].StringValue}");
+ Console.WriteLine($"Score: {result.Score}");
+ Console.WriteLine($"Description: {result.Payload["description"].StringValue}");
+ Console.WriteLine($"Price: {result.Payload["price"].StringValue}");
+ Console.WriteLine("---");
+}
+```
+
+```go
+// generate query embedding
+queryText := "vegetarian dishes"
+
+// search for similar menu items
+results, err := client.Query(context.Background(), &qdrant.QueryPoints{
+ CollectionName: "items",
+ Query: qdrant.NewQueryNearest(
+ qdrant.NewVectorInputDocument(&qdrant.Document{
+ Text: queryText,
+ Model: "sentence-transformers/all-MiniLM-L6-v2",
+ }),
+ ),
+ WithPayload: qdrant.NewWithPayload(true),
+ Limit: qdrant.PtrOf(uint64(5)),
+})
+
+// print results
+for _, result := range results {
+ fmt.Printf("Item: %s\n", result.Payload["item_name"].GetStringValue())
+ fmt.Printf("Score: %f\n", result.Score)
+ fmt.Printf("Description: %s\n", result.Payload["description"].GetStringValue())
+ fmt.Printf("Price: %s\n", result.Payload["price"].GetStringValue())
+ fmt.Println("---")
+}
+```
+
## That's Vector Search!
You've just performed semantic search on real menu item data. The query "vegetarian dishes" returned similar menu items based on meaning, not just keyword matching.