Cara Menggunakan Data String untuk Memberdayakan Aplikasi Pencarian Kemiripan Anda
Sampul
Milvus 2.1 hadir dengan beberapa pembaruan yang signifikan yang membuat bekerja dengan Milvus menjadi lebih mudah. Salah satunya adalah dukungan terhadap tipe data string. Saat ini Milvus mendukung tipe data termasuk string, vektor, Boolean, bilangan bulat, bilangan floating-point, dan masih banyak lagi.
Artikel ini menyajikan sebuah pengenalan terhadap dukungan tipe data string. Baca dan pelajari apa yang bisa Anda lakukan dengan tipe data ini dan bagaimana cara menggunakannya.
Langsung ke:
Dukungan tipe data string telah menjadi salah satu fungsi yang paling diharapkan oleh pengguna. Hal ini menyederhanakan proses pembuatan aplikasi dengan basis data vektor Milvus dan mempercepat kecepatan pencarian kemiripan dan kueri vektor, yang secara garis besar meningkatkan efisiensi dan mengurangi biaya pemeliharaan aplikasi apa pun yang sedang Anda kerjakan.
Secara khusus, Milvus 2.1 mendukung tipe data VARCHAR, yang menyimpan string karakter dengan panjang yang bervariasi. Dengan dukungan tipe data VARCHAR, Anda dapat:
- Mengelola data string secara langsung tanpa bantuan database relasional eksternal.
Dukungan tipe data VARCHAR memungkinkan Anda untuk melewatkan langkah mengubah string menjadi tipe data lain saat memasukkan data ke dalam Milvus. Katakanlah Anda sedang mengerjakan sistem pencarian buku untuk toko buku online Anda sendiri. Anda sedang membuat kumpulan data buku dan ingin mengidentifikasi buku-buku tersebut dengan namanya. Pada versi sebelumnya di mana Milvus tidak mendukung tipe data string, sebelum memasukkan data ke dalam Milvus, Anda mungkin perlu terlebih dahulu mengubah string (nama-nama buku) menjadi ID buku dengan bantuan basis data relasional seperti MySQL. Saat ini, karena tipe data string sudah didukung, Anda cukup membuat sebuah field string dan langsung memasukkan nama-nama buku dan bukan nomor ID-nya.
Kemudahan ini juga berlaku pada proses pencarian dan query. Bayangkan ada seorang klien yang memiliki buku favorit berjudul Hello Milvus. Anda ingin mencari buku-buku yang serupa di dalam sistem dan merekomendasikannya kepada klien. Pada versi Milvus sebelumnya, sistem hanya akan mengembalikan ID buku dan Anda perlu mengambil langkah ekstra untuk memeriksa informasi buku yang sesuai dalam database relasional. Namun di Milvus 2.1, Anda dapat secara langsung mendapatkan nama-nama buku karena Anda telah membuat field string dengan nama-nama buku di dalamnya.
Singkatnya, dukungan tipe data string membuat Anda tidak perlu lagi beralih ke alat lain untuk mengelola data string, yang sangat menyederhanakan proses pengembangan.
- Mempercepat kecepatan pencarian hibrida dan kueri vektor melalui pemfilteran atribut.
Seperti tipe data skalar lainnya, VARCHAR dapat digunakan untuk pemfilteran atribut dalam pencarian hibrida dan kueri vektor melalui ekspresi Boolean. Perlu disebutkan bahwa Milvus 2.1 menambahkan operator like
, yang memungkinkan Anda untuk melakukan pencocokan awalan. Selain itu, Anda juga dapat melakukan pencocokan tepat dengan menggunakan operator ==
.
Selain itu, indeks terbalik berbasis MARISA-trie juga didukung untuk mempercepat pencarian dan kueri hibrida. Lanjutkan untuk membaca dan mencari tahu semua ekspresi string yang mungkin ingin Anda ketahui untuk melakukan pemfilteran atribut dengan data string.
Sekarang kita tahu bahwa tipe data string sangat berguna, tetapi kapan tepatnya kita perlu menggunakan tipe data ini dalam membangun aplikasi kita sendiri? Berikut ini, Anda akan melihat beberapa contoh kode skenario yang mungkin melibatkan data string, yang akan memberikan Anda pemahaman yang lebih baik tentang bagaimana mengelola data VARCHAR di Milvus 2.1.
Membuat sebuah koleksi
Mari kita ikuti contoh sebelumnya. Anda masih bekerja pada sistem rekomendasi buku dan ingin membuat sebuah koleksi buku dengan sebuah field kunci utama bernama book_name
, di mana Anda akan menyisipkan data string. Dalam hal ini, Anda dapat mengatur tipe data sebagai DataType.VARCHAR
ketika mengatur skema field, seperti yang ditunjukkan pada contoh di bawah ini.
Perhatikan bahwa ketika membuat bidang VARCHAR, Anda perlu menentukan panjang karakter maksimum melalui parameter max_length
yang nilainya dapat berkisar dari 1 hingga 65.535. Dalam contoh ini, kami menetapkan panjang maksimum sebagai 200.
from pymilvus import CollectionSchema, FieldSchema, DataType
book_id = FieldSchema(
name="book_id",
dtype=DataType.INT64,
)
book_name = FieldSchema(
name="book_name",
dtype=DataType.VARCHAR,
max_length=200,
is_primary=True,
)
word_count = FieldSchema(
name="word_count",
dtype=DataType.INT64,
)
book_intro = FieldSchema(
name="book_intro",
dtype=DataType.FLOAT_VECTOR,
dim=2
)
schema = CollectionSchema(
fields=[book_id, word_count, book_intro],
description="Test book search"
)
collection_name = "book"
Menyisipkan data
Setelah koleksi dibuat, kita dapat menyisipkan data ke dalamnya. Pada contoh berikut, kita menyisipkan 2.000 baris data string yang dibuat secara acak.
import random
data = [
[i for i in range(2000)],
["book_" + str(i) for i in range(2000)],
[i for i in range(10000, 12000)],
[[random.random() for _ in range(2)] for _ in range(2000)],
]
Menghapus data
Misalkan dua buku, bernama book_0
dan book_1
, tidak lagi tersedia di toko Anda, jadi Anda ingin menghapus informasi yang relevan dari database Anda. Dalam kasus ini, Anda dapat menggunakan ekspresi istilah in
untuk menyaring entitas yang akan dihapus, seperti yang ditunjukkan pada contoh di bawah ini.
Ingatlah bahwa Milvus hanya mendukung penghapusan entitas dengan primary key yang ditentukan dengan jelas, jadi sebelum menjalankan kode berikut ini, pastikan bahwa Anda telah mengatur field book_name
sebagai field primary key.
expr = "book_name in [\"book_0\", \"book_1\"]"
from pymilvus import Collection
collection = Collection("book")
collection.delete(expr)
Membangun sebuah Indeks
Milvus 2.1 mendukung pembuatan indeks skalar, yang akan sangat mempercepat pemfilteran field string. Tidak seperti membangun indeks vektor, Anda tidak perlu menyiapkan parameter sebelum membangun indeks skalar. Milvus untuk sementara hanya mendukung indeks pohon kamus (MARISA-trie), sehingga jenis indeks dari field tipe VARCHAR adalah MARISA-trie secara default.
Anda dapat menentukan nama indeks ketika membuatnya. Jika tidak ditentukan, nilai default dari index_name
adalah "_default_idx_"
. Pada contoh di bawah ini, kami menamai indeks dengan nama scalar_index
.
from pymilvus import Collection
collection = Collection("book")
collection.create_index(
field_name="book_name",
index_name="scalar_index",
)
Pencarian hibrida
Dengan menentukan ekspresi boolean, Anda dapat memfilter bidang string selama pencarian kemiripan vektor.
Sebagai contoh, jika Anda mencari buku yang intro-nya paling mirip dengan Hello Milvus namun hanya ingin mendapatkan buku yang namanya dimulai dengan 'book_2', Anda dapat menggunakan operator like
untuk melakukan pencocokan awalan dan mendapatkan buku yang ditargetkan, seperti yang ditunjukkan pada contoh di bawah ini.
search_param = {
"data": [[0.1, 0.2]],
"anns_field": "book_intro",
"param": {"metric_type": "L2", "params": {"nprobe": 10}},
"limit": 2,
"expr": "book_name like \"Hello%\"",
}
res = collection.search(**search_param)
Ekspresi string
Selain dari operator yang baru ditambahkan like
, operator lain, yang sudah didukung di versi Milvus sebelumnya, juga dapat digunakan untuk pemfilteran bidang string. Di bawah ini adalah beberapa contoh ekspresi string yang umum digunakan, di mana A
merepresentasikan sebuah field bertipe VARCHAR. Ingatlah bahwa semua ekspresi string di bawah ini dapat digabungkan secara logis menggunakan operator logika, seperti AND, OR, dan NOT.
Operasi set
Anda dapat menggunakan in
dan not in
untuk merealisasikan operasi himpunan, seperti A in ["str1", "str2"]
.
Membandingkan dua bidang string
Anda dapat menggunakan operator relasional untuk membandingkan nilai dua bidang string. Operator relasional tersebut meliputi ==
, !=
, >
, >=
, <
, <=
. Untuk informasi lebih lanjut, lihat Operator relasional.
Perhatikan bahwa field string hanya dapat dibandingkan dengan field string lain, bukan dengan field tipe data lain. Sebagai contoh, sebuah field bertipe VARCHAR tidak dapat dibandingkan dengan field bertipe Boolean atau bertipe integer.
Membandingkan sebuah field dengan nilai konstanta
Anda dapat menggunakan ==
atau !=
untuk memverifikasi apakah nilai suatu field sama dengan nilai konstan.
Memfilter bidang dengan rentang tunggal
Anda dapat menggunakan >
, >=
, <
, <=
untuk memfilter bidang string dengan rentang tunggal, seperti A > "str1"
.
Pencocokan awalan
Seperti yang telah disebutkan sebelumnya, Milvus 2.1 menambahkan operator like
untuk pencocokan awalan, seperti A like "prefix%"
.
Apa yang selanjutnya
Dengan dirilisnya Milvus 2.1 secara resmi, kami telah menyiapkan serangkaian blog yang memperkenalkan fitur-fitur baru. Baca lebih lanjut dalam seri blog ini:
- Cara Menggunakan Data String untuk Memberdayakan Aplikasi Pencarian Kemiripan Anda
- Menggunakan Milvus yang Disematkan untuk Menginstal dan Menjalankan Milvus secara Instan dengan Python
- Tingkatkan Throughput Pembacaan Basis Data Vektor Anda dengan Replika Dalam Memori
- Memahami Tingkat Konsistensi dalam Basis Data Vektor Milvus
- Memahami Tingkat Konsistensi dalam Basis Data Vektor Milvus (Bagian II)
- Bagaimana Basis Data Vektor Milvus Memastikan Keamanan Data?
- Membuat sebuah koleksi
- Menyisipkan data
- Menghapus data
- Membangun sebuah Indeks
- Pencarian hibrida
- Ekspresi string
- Apa yang selanjutnya
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word