🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI
  • Home
  • Blog
  • Cara Menggunakan Data String untuk Memberdayakan Aplikasi Pencarian Kemiripan Anda

Cara Menggunakan Data String untuk Memberdayakan Aplikasi Pencarian Kemiripan Anda

  • Engineering
August 08, 2022
Xi Ge

Cover 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:

  1. 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.

  1. 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.VARCHARketika 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",
)

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 likeuntuk 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:

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

Terus Baca