How Tessell for Milvus works?

Fully managed Milvus vector database service with enterprise-grade data management, performance optimized for production, cost-optimized for development, and all with your own security and compliance posture.

Store, index, and manage massive embedding vectors generated by deep neural networks and other machine learning (ML) models. Tessell for Milvus is highly resilient and reliable.

Where can vector databases help?

Retrieval Augmented Generation (RAG)

Build LLM apps with foundational LLM model using RAG.

Recommender System

Get personalized recommendations based on user profiles, behaviors, and queries, identifying vectors aligned with their interests. 

Text/Semantic Search

Allow search engines to return results semantically similar to the query, even if they don't contain the exact keywords.

Image Similarity Search

Explore visually akin images within an extensive repository of image libraries.

Question Answering System

Build a chatbot for interactive question-answering that automatically responds to user queries.

Build LLM apps with Tessell for Milvus

Build your LLM apps in minutes with Tessell for Milvus. Tessell manages and provisions your vector databases, seamlessly integrates with popular LLM frameworks, ensuring smooth data flow and efficient model training, and powers powerful vector search capabilities for lightning-fast retrieval of similar text, images, or code within your LLM app.

1
2from pymilvus import connections, db
3from pymilvus import CollectionSchema, FieldSchema, DataType
4
5#Create client connection to Tessell for Milvus
6
7TESSELL_MILVUS_URI = "xxxxxxx.tessell.com:19530"
8
9conn = connections.connect(
10  		alias="default",
11  		uri=TESSELL_MILVUS_URI,
12  		token="root:Milvus",
13		)
14
15db = conn.create_database('tessell_articles')
16
17article_id = FieldSchema(
18  name="article_id",
19  dtype=DataType.INT64,
20  is_primary=True,
21)
22article_title = FieldSchema(
23  name="article_title",
24  dtype=DataType.VARCHAR,
25  max_length=500,
26  # The default value will be used if this field is left empty during data inserts or upserts.
27  # The data type of `default_value` must be the same as that specified in `dtype`.
28  default_value="Unknown"
29)
30
31article_content= FieldSchema(
32  name="article_title",
33  dtype=DataType.VARCHAR,
34  max_length=10000,
35  # The default value will be used if this field is left empty during data inserts or upserts.
36  # The data type of `default_value` must be the same as that specified in `dtype`.
37  default_value="Unknown"
38)
39embeddings = FieldSchema(
40  name="book_intro",
41  dtype=DataType.FLOAT_VECTOR,
42  dim=786
43)
44schema = CollectionSchema(
45  fields=[article_id, article_title, article_content, embeddings],
46  description="Tessell articles knowledge basae",
47  enable_dynamic_field=True
48)
49collection_name = "tessell_articles"
Copy Code
Copied!
from pymilvus import connections, db from pymilvus import CollectionSchema, FieldSchema, DataType #Create client connection to Tessell for Milvus TESSELL_MILVUS_URI = "xxxxxxx.tessell.com:19530" conn = connections.connect( alias="default", uri=TESSELL_MILVUS_URI, token="root:Milvus", ) db = conn.create_database('tessell_articles') article_id = FieldSchema( name="article_id", dtype=DataType.INT64, is_primary=True, ) article_title = FieldSchema( name="article_title", dtype=DataType.VARCHAR, max_length=500, # The default value will be used if this field is left empty during data inserts or upserts. # The data type of `default_value` must be the same as that specified in `dtype`. default_value="Unknown" ) article_content= FieldSchema( name="article_title", dtype=DataType.VARCHAR, max_length=10000, # The default value will be used if this field is left empty during data inserts or upserts. # The data type of `default_value` must be the same as that specified in `dtype`. default_value="Unknown" ) embeddings = FieldSchema( name="book_intro", dtype=DataType.FLOAT_VECTOR, dim=786 ) schema = CollectionSchema( fields=[article_id, article_title, article_content, embeddings], description="Tessell articles knowledge basae", enable_dynamic_field=True ) collection_name = "tessell_articles"
1package main
2
3import (
4	"context"
5	"fmt"
6	"log"
7	"math/rand"
8	"time"
9
10	"github.com/milvus-io/milvus-sdk-go/v2/client"
11	"github.com/milvus-io/milvus-sdk-go/v2/entity"
12)
13
14func main() {
15	collectionName := "tessell_articles"
16	uri := "xxxxxxx.tessell.com:19530"
17	user := "username"
18	password := "password"
19
20	// connect to milvus
21	fmt.Println("Connecting to DB: ", uri)
22	ctx, cancel := context.WithCancel(context.Background())
23	defer cancel()
24
25	client, err := client.NewClient(ctx, client.Config{
26		Address:  uri,
27		Username: user,
28		Password: password,
29	})
30
31	if err != nil {
32		log.Fatal("fail to connect to milvus", err.Error())
33	}
34	fmt.Println("Success!")
35
36	// delete collection if exists
37	has, err := client.HasCollection(ctx, collectionName)
38	if err != nil {
39		log.Fatal("fail to check whether collection exists", err.Error())
40	}
41	if has {
42		client.DropCollection(ctx, collectionName)
43	}
44
45	// create a collection
46	fmt.Println("Creating example collection: Tessell Articles")
47	schema := entity.NewSchema().WithName(collectionName).WithDescription("All articles published on tessell website.").
48		WithField(entity.NewField().WithName("article_id").WithDataType(entity.FieldTypeInt64).WithIsPrimaryKey(true).WithDescription("customized primary id")).
49		WithField(entity.NewField().WithName("article_title").WithDataType(entity.FieldTypeInt64).WithDescription("Article Title")).
50		WithField(entity.NewField().WithName("embeddings").WithDataType(entity.FieldTypeFloatVector).WithDim(128))
51
52	err = client.CreateCollection(ctx, schema, entity.DefaultShardNumber)
53	if err != nil {
54		log.Fatal("failed to create collection", err.Error())
55	}
56	fmt.Println("Success!")
57
58	// insert data
59	fmt.Println("Inserting 100000 entities... ")
60	dim := 128
61	num_entities := 100000
62	idList, countList := make([]int64, 0, num_entities), make([]int64, 0, num_entities)
63	vectorList := make([][]float32, 0, num_entities)
64	for i := 0; i < num_entities; i++ {
65		idList = append(idList, int64(i))
66		countList = append(countList, int64(i))
67		vec := make([]float32, 0, dim)
68		for j := 0; j < dim; j++ {
69			vec = append(vec, rand.Float32())
70		}
71		vectorList = append(vectorList, vec)
72	}
73
74	idData := entity.NewColumnInt64("article_id", idList)
75	countData := entity.NewColumnInt64("article_title", countList)
76	vectorData := entity.NewColumnFloatVector("embeddings", dim, vectorList)
77
78	begin := time.Now()
79	_, err = client.Insert(ctx, collectionName, "", idData, countData, vectorData)
80	if err != nil {
81		log.Fatal("fail to insert data", err.Error())
82	}
83	fmt.Println("Succeed in", time.Since(begin))
84
85	// create index
86	fmt.Println("Building AutoIndex...")
87	index, err := entity.NewIndexAUTOINDEX(entity.L2)
88	if err != nil {
89		log.Fatal("fail to get auto index", err.Error())
90	}
91	begin = time.Now()
92	err = client.CreateIndex(ctx, collectionName, "article_id", index, false)
93	if err != nil {
94		log.Fatal("fail to create index", err.Error())
95	}
96	fmt.Println("Succeed in", time.Since(begin))
97
98	// load collection
99	fmt.Println("Loading collection...")
100	begin = time.Now()
101	err = client.LoadCollection(ctx, collectionName, false)
102	if err != nil {
103		log.Fatal("fail to load collection", err.Error())
104	}
105	fmt.Println("Succeed in", time.Since(begin))
106
107	// search
108	sp, _ := entity.NewIndexAUTOINDEXSearchParam(1)
109	vectors := []entity.Vector{entity.FloatVector(vectorList[1])}
110	fmt.Println("Search...")
111	begin = time.Now()
112	searchResult, err := client.Search(
113		ctx,
114		collectionName,      // collectionName
115		nil,                 // partitionNames
116		"",                  // expression
117		[]string{"article_id"}, // outputFields
118		vectors,             // vectors
119		"embeedings",        // vectorField
120		entity.L2,           // metricType
121		10,                  // topK
122		sp,                  // search params
123	)
124	if err != nil {
125		log.Fatal("search failed", err.Error())
126	}
127	fmt.Println("Succeed in", time.Since(begin))
128
129	for _, sr := range searchResult {
130		fmt.Println("ids: ", sr.IDs)
131		fmt.Println("Scores: ", sr.Scores)
132	}
133}
Copy Code
Copied!
package main import ( "context" "fmt" "log" "math/rand" "time" "github.com/milvus-io/milvus-sdk-go/v2/client" "github.com/milvus-io/milvus-sdk-go/v2/entity" ) func main() { collectionName := "tessell_articles" uri := "xxxxxxx.tessell.com:19530" user := "username" password := "password" // connect to milvus fmt.Println("Connecting to DB: ", uri) ctx, cancel := context.WithCancel(context.Background()) defer cancel() client, err := client.NewClient(ctx, client.Config{ Address: uri, Username: user, Password: password, }) if err != nil { log.Fatal("fail to connect to milvus", err.Error()) } fmt.Println("Success!") // delete collection if exists has, err := client.HasCollection(ctx, collectionName) if err != nil { log.Fatal("fail to check whether collection exists", err.Error()) } if has { client.DropCollection(ctx, collectionName) } // create a collection fmt.Println("Creating example collection: Tessell Articles") schema := entity.NewSchema().WithName(collectionName).WithDescription("All articles published on tessell website."). WithField(entity.NewField().WithName("article_id").WithDataType(entity.FieldTypeInt64).WithIsPrimaryKey(true).WithDescription("customized primary id")). WithField(entity.NewField().WithName("article_title").WithDataType(entity.FieldTypeInt64).WithDescription("Article Title")). WithField(entity.NewField().WithName("embeddings").WithDataType(entity.FieldTypeFloatVector).WithDim(128)) err = client.CreateCollection(ctx, schema, entity.DefaultShardNumber) if err != nil { log.Fatal("failed to create collection", err.Error()) } fmt.Println("Success!") // insert data fmt.Println("Inserting 100000 entities... ") dim := 128 num_entities := 100000 idList, countList := make([]int64, 0, num_entities), make([]int64, 0, num_entities) vectorList := make([][]float32, 0, num_entities) for i := 0; i < num_entities; i++ { idList = append(idList, int64(i)) countList = append(countList, int64(i)) vec := make([]float32, 0, dim) for j := 0; j < dim; j++ { vec = append(vec, rand.Float32()) } vectorList = append(vectorList, vec) } idData := entity.NewColumnInt64("article_id", idList) countData := entity.NewColumnInt64("article_title", countList) vectorData := entity.NewColumnFloatVector("embeddings", dim, vectorList) begin := time.Now() _, err = client.Insert(ctx, collectionName, "", idData, countData, vectorData) if err != nil { log.Fatal("fail to insert data", err.Error()) } fmt.Println("Succeed in", time.Since(begin)) // create index fmt.Println("Building AutoIndex...") index, err := entity.NewIndexAUTOINDEX(entity.L2) if err != nil { log.Fatal("fail to get auto index", err.Error()) } begin = time.Now() err = client.CreateIndex(ctx, collectionName, "article_id", index, false) if err != nil { log.Fatal("fail to create index", err.Error()) } fmt.Println("Succeed in", time.Since(begin)) // load collection fmt.Println("Loading collection...") begin = time.Now() err = client.LoadCollection(ctx, collectionName, false) if err != nil { log.Fatal("fail to load collection", err.Error()) } fmt.Println("Succeed in", time.Since(begin)) // search sp, _ := entity.NewIndexAUTOINDEXSearchParam(1) vectors := []entity.Vector{entity.FloatVector(vectorList[1])} fmt.Println("Search...") begin = time.Now() searchResult, err := client.Search( ctx, collectionName, // collectionName nil, // partitionNames "", // expression []string{"article_id"}, // outputFields vectors, // vectors "embeedings", // vectorField entity.L2, // metricType 10, // topK sp, // search params ) if err != nil { log.Fatal("search failed", err.Error()) } fmt.Println("Succeed in", time.Since(begin)) for _, sr := range searchResult { fmt.Println("ids: ", sr.IDs) fmt.Println("Scores: ", sr.Scores) } }

Integrates seamlessly with your tech stack

What is it like running Milvus on Tessell?

Ease of Consumption

Deploy fully-managed Milvus database based on choice of cluster shapes and cloud.

tick icon

Select Cloud

tick icon

Choose cluster shape

  • Depending upon how many vectors you want to store.
  • Chose from micro to large shape cluster based on requirements.
tick icon

Deploy Cluster

Self-healing and self-managed. 99.99% uptime

tick icon

Build on the Milvus strength with reliability & resiliency built-in.

tick icon

99.99% uptime SLA, and zero data corruption.

Collection & Indexes Lifecycle management

tick icon

Support for database indexing and collection lifecycle management through Tessell on Milvus.

tick icon

Powerful, flexible support for embeddings generated by  LLMs.

tick icon

Lightning-fast queries on any size data set

tick icon

Cost-effective storage of vectors.