TairSearch adalah struktur data internal Tair untuk pencarian teks lengkap, dengan sintaksis yang mirip dengan Elasticsearch. Topik ini menjelaskan cara menggunakan perintah TFT.MSEARCH di TairSearch untuk mencari dokumen berdasarkan shard data.
Informasi latar belakang
Di TairSearch, sebuah key merupakan blok bangunan dasar. Umumnya, sebuah key sesuai dengan skema yang berisi mappings dan settings. Jika jumlah dokumen yang lebih besar dari perkiraan ditulis ke dalam sebuah key, key tersebut menjadi key besar. Ketika penggunaan memori dari key melebihi kapasitas memori dari shard data, terjadi kesalahan kehabisan memori.
Untuk meningkatkan kapasitas memori instance mandiri, ikuti langkah-langkah berikut:
Tingkatkan instance mandiri menjadi instance kluster.
Pisahkan key besar menjadi key kecil dan distribusikan key-key ini ke shard data dari instance kluster.
Dalam konteks ini, TairSearch menyediakan solusi berikut untuk mencari key besar: pisahkan key besar menjadi key kecil, distribusikan dokumen ke key-key ini, lalu gunakan perintah TFT.MSEARCH untuk menanyakan dokumen dalam key-key ini. Saat membuat key-key ini, pastikan bahwa konfigurasi skemanya sama. Untuk informasi lebih lanjut tentang TairSearch, lihat Pencarian.
Kami merekomendasikan Anda menggunakan fitur Msearch di instance pembagian baca/tulis atau instance kluster dalam mode proxy di mana TairProxy disediakan untuk meningkatkan kinerja query. Hindari menggunakan Msearch di instance kluster dalam mode koneksi langsung atau instance standar yang tidak memiliki TairProxy.
Cara kerja Msearch
TairSearch menyediakan perintah TFT.SEARCH untuk menanyakan satu key dan perintah TFT.MSEARCH untuk menanyakan beberapa key dengan konfigurasi skema yang sama.
Setelah klien mengirim permintaan tulis ke TairProxy, TairProxy menulis key ke shard data yang sesuai berdasarkan slot.
Msearch memerlukan konfigurasi skema yang sama untuk key dan logika kustom untuk memisahkan key besar. Anda harus memahami dan menentukan aturan pemisahan key besar menjadi key kecil serta mendistribusikan key kecil tersebut.
Gambar 1. Alur Kerja TairProxy Menangani Permintaan Tulis
Setelah klien menggunakan perintah TFT.MSEARCH untuk mengirim permintaan baca ke TairProxy, TairProxy meneruskan permintaan ke shard data yang berisi data yang diminta. Shard data ini menanyakan dokumen yang diinginkan dalam key, mengumpulkan hasilnya, lalu mengembalikan hasilnya ke TairProxy. Kemudian, TairProxy memberi skor, mengurutkan, dan menggabungkan dokumen, serta mengembalikan set hasil akhir ke klien.
Gambar 2. Alur Kerja TairProxy Menangani Permintaan Baca
Paging Msearch
Saat mencari dokumen berdasarkan shard data di TairSearch, sejumlah besar dokumen mungkin dikembalikan. Dalam hal ini, Anda dapat menggunakan paging Msearch untuk mendapatkan dokumen dalam batch.
Cara kerja paging Msearch
Berbeda dengan TFT.SEARCH yang menggunakan kombinasi from dan size untuk mengimplementasikan paging, TFT.MSEARCH menggunakan size dan keys_cursor. Parameter size menentukan jumlah total dokumen yang dapat dikembalikan, sedangkan keys_cursor menunjukkan posisi awal dari query berikutnya untuk setiap key.
Prosedur untuk mengimplementasikan paging menggunakan TFT.MSEARCH:
Tentukan parameter size dan jalankan perintah TFT.MSEARCH untuk mendapatkan size dokumen dari setiap key.
Atur parameter
reply_with_keys_cursorketrue, sehingga Tair memberi skor, mengurutkan, dan menggabungkan dokumen yang dikumpulkan, serta mengembalikan size dokumen dan nilai keys_cursor.CatatanNilai default dari keys_cursor adalah 0, yang menunjukkan bahwa query berikutnya dimulai dari dokumen pertama setelah cursor.
Dalam query berikutnya, tentukan nilai return sebelumnya dari parameter keys_cursor sehingga Tair mendapatkan size dokumen mulai dari posisi yang ditentukan, lalu ulangi langkah-langkah sebelumnya.
Contoh
Anggaplah Anda mengatur parameter size menjadi 10 untuk menanyakan dokumen dari key key0, key1, dan key2.
Tair mendapatkan 10 dokumen dari masing-masing tiga key dan memberi skor, mengurutkan, serta menggabungkan 30 dokumen ini. Kemudian, Tair mengembalikan 10 dokumen teratas. Nilai return contoh {"keys_cursor":{"key0":2,"key1":5,"key2":3}} dari keys_cursor menunjukkan bahwa dokumen yang dikembalikan terdiri dari dua teratas dari hasil key0, lima teratas dari hasil key1, dan tiga teratas dari hasil key2. Pada query berikutnya, atur parameter keys_cursor ke {"key0":2,"key1":5,"key2":3}. Dalam hal ini, Tair mendapatkan 10 dokumen dari yang ketiga di key0, 10 dokumen dari yang keenam di key1, dan 10 dokumen dari yang keempat di key2.
Kode contoh
Kode contoh berikut menunjukkan cara menggunakan Msearch untuk mencari data panas.
Anggaplah setiap key di TairSearch menyimpan entri data panas yang dihasilkan dalam seminggu, dan satu juta entri dihasilkan setiap hari. Dalam hal ini, setiap key diharapkan menyimpan tujuh juta dokumen.
Sebuah key baru dibuat pada awal setiap minggu, dan setiap key dipertahankan selama dua minggu. Key yang kedaluwarsa dihapus.
Setiap entri data berisi properti datetime, author, uid, dan content.
Buat indeks.
# Buat dua key dan tentukan nama key dalam format "FLOW_START DATE_END DATE". Pastikan bahwa key memiliki konfigurasi skema yang sama. TFT.CREATEINDEX FLOW_20230109_15 '{ "mappings":{ "properties":{ "datetime":{ "type":"long" }, "author":{ "type":"text" }, "uid":{ "type":"long" }, "content":{ "type":"text", "analyzer": "jieba" } } } }' TFT.CREATEINDEX FLOW_20230116_23 '{ "mappings":{ "properties":{ "datetime":{ "type":"long" }, "author":{ "type":"text" }, "uid":{ "type":"long" }, "content":{ "type":"text", "analyzer": "jieba" } } } }'Tambahkan data dokumen.
# Tulis satu entri data ke masing-masing dari dua key. TFT.ADDDOC FLOW_20230109_15 '{ "datetime":20230109001209340, "author":"Serial TV populer", "uid":7884455, "content":"Film akan diputar selama Festival Musim Semi" }' TFT.ADDDOC FLOW_20230116_23 '{ "datetime":20230118011304250, "author":"Komoditas modis", "uid":100093, "content":"Luncurkan lini produk zodiak baru untuk Tahun Kelinci" }'Tanyakan dokumen dari dua key ini.
Tanyakan data panas terkait zodiak Cina Tahun Kelinci dan urutkan dokumen yang dikembalikan berdasarkan waktu.
TFT.MSEARCH 2 FLOW_20230109_15 FLOW_20230116_23 '{ "query":{ "match":{ "content":"Zodiak Cina Tahun Kelinci" } }, "sort" : [ { "datetime": { "order" : "desc" } } ], "size":10, "reply_with_keys_cursor":true, "keys_cursor":{ "FLOW_2023010916":0, "FLOW_202301623":0 } }'Output yang Diharapkan:
{ "hits":{ "hits":[ { "_id":"20230118011304250", "_index":"FLOW_20230116_23", "_score":1, "_source":{ "datetime":20230118011304250, "author":"Komoditas modis", "uid":100093, "content":"Luncurkan lini produk zodiak baru untuk Tahun Kelinci" } } ], "max_score":1, "total":{ "relation":"eq", "value":1 } }, "aux_info":{ "index_crc64":14159192555612760957, "keys_cursor":{ "FLOW_20230109_15":0, "FLOW_20230116_23":1 } } }