Mengubah Skema Koleksi EksternalCompatible with Milvus 3.0.x
Sumber data eksternal sering kali mengalami perubahan setelah Anda membuat koleksi eksternal. Misalnya, tabel Lakehouse yang sudah menyimpan embeddings mungkin nantinya akan mencakup bidang skalar baru, seperti skor, kategori, atau cap waktu, yang ingin Anda tampilkan dalam hasil kueri atau gunakan dalam filter.
Daripada membuat ulang koleksi eksternal atau menyalin data sumber ke Milvus, tambahkan bidang Milvus yang dipetakan ke bidang yang sudah ada di sumber data eksternal. Setelah menambahkan bidang tersebut, segarkan koleksi eksternal agar bidang baru tersebut dapat digunakan dalam kueri dan pencarian.
Batasan
Koleksi eksternal saat ini mendukung penambahan bidang setelah pembuatan. Perubahan skema lainnya, seperti menghapus bidang, mengganti nama bidang, mengubah tipe data bidang, mengubah dimensi vektor, atau memetakan ulang
external_field, tidak didukung.Anda hanya dapat menambahkan bidang yang sudah ada di sumber data eksternal. Operasi ini memetakan bidang eksternal yang sudah ada ke bidang Milvus. Operasi ini tidak membuat bidang baru di sumber data eksternal atau mengisi ulang data sumber.
Penambahan bidang
SPARSE_FLOAT_VECTORke koleksi eksternal yang sudah ada tidak didukung.Menambahkan bidang StructArray ke koleksi eksternal yang sudah ada tidak didukung. Jika koleksi eksternal Anda memerlukan bidang StructArray, tentukan bidang tersebut dalam skema koleksi saat Anda membuat koleksi.
Menambahkan bidang
Sebelum menambahkan bidang ke koleksi eksternal, pastikan bidang tersebut sudah ada di sumber data eksternal. Kemudian panggil ` add_collection_field() ` untuk menampilkan bidang tersebut di Milvus dengan mengatur ` external_field ` ke nama bidang di sumber data eksternal. Atur ` data_type ` ke tipe data Milvus yang sesuai dengan bidang di sumber data eksternal. Misalnya, jika bidang yang dipetakan menyimpan nilai presisi ganda, gunakan ` DataType.DOUBLE`.
Berbeda dengan koleksi terkelola, nilai untuk kolom yang ditambahkan dibaca dari sumber data eksternal setelah Anda menyegarkan koleksi eksternal.
Menambahkan bidang skalar
Gunakan ` add_collection_field() ` untuk menambahkan bidang skalar jika Anda ingin menampilkan bidang tersebut dalam hasil kueri atau menggunakannya dalam filter. Contoh berikut menambahkan bidang ` score ` yang dipetakan ke bidang ` score ` di sumber data eksternal.
from pymilvus import DataType, MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus",
)
client.add_collection_field(
collection_name="product_embeddings",
field_name="score",
data_type=DataType.DOUBLE,
nullable=True,
external_field="score",
)
Dalam contoh ini, ` score ` adalah nama bidang Milvus dan ` external_field="score" ` memetakan bidang tersebut ke bidang ` score ` di sumber data eksternal. Tetapkan ` nullable=True ` karena bidang tersebut ditambahkan setelah koleksi telah dibuat.
Menambahkan bidang vektor
Anda juga dapat menambahkan bidang vektor jika sumber data eksternal sudah berisi nilai-nilai vektor. Atur vektor data_type dan dim agar sesuai dengan bidang vektor di sumber data eksternal.
Contoh berikut menambahkan bidang vektor padat bernama image_embedding_v2.
from pymilvus import DataType, MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus",
)
client.add_collection_field(
collection_name="product_embeddings",
field_name="image_embedding_v2",
data_type=DataType.FLOAT_VECTOR,
dim=768,
nullable=True,
external_field="image_embedding_v2",
)
Jika Anda berencana menjalankan pencarian vektor pada bidang vektor yang ditambahkan, buatlah indeks untuk bidang tersebut sebelum menyegarkan koleksi eksternal.
index_params = client.prepare_index_params()
index_params.add_index(
field_name="image_embedding_v2",
index_type="AUTOINDEX",
metric_type="COSINE",
)
client.create_index(
collection_name="product_embeddings",
index_params=index_params,
)
Segarkan koleksi eksternal
Setelah mengubah skema koleksi eksternal, segarkan koleksi eksternal agar Milvus memperbarui metadata koleksi eksternal dan menerapkan perubahan skema tersebut pada hasil kueri, pencarian, dan penyaringan.
client.refresh_external_collection(
collection_name="product_embeddings"
)