TairSearch adalah struktur data pencarian teks penuh internal dari Tair yang menggunakan sintaks kueri mirip Elasticsearch (ES-LIKE).
Ikhtisar
TairSearch menawarkan fitur-fitur berikut:
Latensi rendah dan performa tinggi: menyediakan kemampuan penulisan dan pencarian teks penuh dalam tingkat milidetik berdasarkan daya komputasi ultra-tinggi Tair. Untuk informasi selengkapnya, lihat Dokumen Putih Performa TairSearch.
Pembaruan inkremental dan parsial: mendukung pembaruan parsial indeks dan pembaruan dokumen inkremental, termasuk penambahan, pembaruan, penghapusan, serta penambahan nilai otomatis pada bidang.
Sintaks fleksibel: menyediakan urutan pengurutan kustom dan mendukung sintaks JSON untuk kueri bool, match, term, serta paging—mirip dengan Elasticsearch.
Kueri agregasi: mendukung agregasi terms, metrics, dan filter. Untuk informasi selengkapnya, lihat Agregasi.
Saran penyelesaian otomatis: mendukung pencocokan fuzzy berbasis awalan dan penyelesaian otomatis untuk operasi pencarian.
Alat analisis kustom: menyediakan berbagai alat analisis canggih, termasuk alat bawaan untuk bahasa utama dunia seperti Inggris (Standard dan Stop) dan Tiongkok (Jieba dan IK). Fitur ini juga mendukung alat analisis kustom dengan kamus dan kata berhenti yang ditentukan pengguna. Untuk informasi selengkapnya, lihat Alat analisis pencarian.
Kueri indeks shard: memungkinkan Anda menggunakan perintah TFT.MSEARCH untuk mencari beberapa indeks shard dan mengembalikan set hasil yang diagregasi.
Kompresi dokumen: mendukung penyimpanan dokumen terkompresi guna mengurangi penggunaan memori. Fitur ini dinonaktifkan secara default.
Cache kueri: menyimpan hasil kueri terbaru dalam cache untuk meningkatkan efisiensi kueri data panas.
Catatan rilis
Instans berbasis DRAM yang kompatibel dengan Redis 5.0
Pada 11 Maret 2022, TairSearch dirilis bersama Tair V1.7.27.
Pada 24 Mei 2022, Tair V1.8.5 dirilis untuk menambahkan dukungan fitur agregasi TairSearch.
Pada 6 September 2022, Tair V5.0.15 dirilis untuk menambahkan dukungan perintah TFT.MSEARCH.
Pada 13 Januari 2023, Tair V5.0.25 dirilis untuk menambahkan dukungan alat analisis.
Pada 15 Maret 2023, Tair V5.0.28 dirilis untuk menambahkan dukungan cache kueri, kompresi dokumen, dan perintah TFT.ANALYZER.
Pada 12 Juni 2023, Tair V5.0.35 dirilis untuk menambahkan dukungan dokumen bertipe data ARRAY dan algoritma peringkat kemiripan Okapi BM25.
Instans berbasis DRAM yang kompatibel dengan Redis 6.0
Pada 7 Februari 2023, Tair V6.2.4.1 dirilis untuk menambahkan dukungan TairSearch.
Tair V6.2.4.1 memiliki semua fitur yang disediakan oleh instans berbasis DRAM kompatibel Redis 5.0 versi Tair V5.0.25.
Pada 14 Maret 2023, Tair V6.2.5.0 dirilis untuk menambahkan dukungan cache kueri, kompresi dokumen, dan perintah TFT.ANALYZER.
Tair V6.2.5.0 memiliki semua fitur yang disediakan oleh instans berbasis DRAM kompatibel Redis 5.0 versi Tair V5.0.28.
Pada 12 Juni 2023, Tair V6.2.7.3 dirilis untuk menambahkan dukungan dokumen bertipe data ARRAY dan algoritma peringkat kemiripan Okapi BM25.
Tair V6.2.7.3 memiliki semua fitur yang disediakan oleh instans berbasis DRAM kompatibel Redis 5.0 versi Tair V5.0.35.
Pada 21 Desember 2023, Tair V23.12.1.2 dirilis dengan dukungan perintah TFT.EXPLAINSCORE.
Instans berbasis DRAM yang kompatibel dengan Redis 7.0
Pada 22 Juli 2024, Tair V24.7.0.0 dirilis untuk menambahkan dukungan TairSearch.
Praktik terbaik
Prasyarat
Instans tersebut adalah instans Tair optimasi memori, dan versi yang didukung adalah sebagai berikut:
Untuk instans berbasis DRAM yang kompatibel dengan Redis 5.0, versi minor harus 1.7.27 atau lebih baru.
Untuk instans berbasis DRAM yang kompatibel dengan Redis 6.0, versi minor harus 6.2.4.1 atau lebih baru.
Untuk instans berbasis DRAM yang kompatibel dengan Redis 7.0, semua versi minor didukung.
Versi minor terbaru menyediakan lebih banyak fitur dan stabilitas yang lebih tinggi. Kami menyarankan Anda memperbarui instans ke versi minor terbaru. Untuk informasi selengkapnya, lihat Memperbarui versi minor instans. Jika instans Anda merupakan instans kluster atau instans pemisahan baca/tulis, kami menyarankan Anda memperbarui node proxy dalam instans ke versi minor terbaru untuk memastikan semua perintah dapat dijalankan sebagaimana mestinya.
Peringatan
Data TairSearch yang ingin Anda kelola disimpan pada instans Tair.
Untuk mengurangi penggunaan memori, kami menyarankan Anda melakukan langkah-langkah berikut:
Saat membuat indeks, atur index ke true untuk bidang dokumen guna menentukan bidang tersebut sebagai bidang terindeks. Untuk bidang dokumen lainnya, atur index ke false.
Tentukan objek yang berisi pola includes dan excludes dalam parameter _source untuk memfilter bidang dokumen yang tidak diperlukan dan menyimpan hanya bidang yang dibutuhkan.
Jika Anda ingin membagi dokumen menjadi token, pilih alat analisis yang sesuai untuk mencegah pemisahan yang tidak perlu dan peningkatan penggunaan memori.
Jika dokumen terlalu besar, gunakan fitur kompresi dokumen untuk secara otomatis mengompresi dan mendekompresi dokumen.
Jangan menambahkan terlalu banyak dokumen ke satu indeks. Sebaiknya tambahkan dokumen ke beberapa indeks. Kami menyarankan agar jumlah dokumen per indeks tetap di bawah 5 juta untuk mencegah kesenjangan data pada instans kluster, menyeimbangkan permintaan baca/tulis, serta mengurangi jumlah large key dan hotkey.
Daftar perintah
Tabel 1. Perintah pencarian teks penuh
Perintah | Sintaks | Deskripsi |
| Membuat indeks dan pemetaan untuk indeks tersebut. Sintaks yang digunakan untuk membuat pemetaan mirip dengan sintaks yang digunakan untuk membuat pemetaan eksplisit di Elasticsearch. Anda harus membuat indeks sebelum dapat menambahkan dokumen ke indeks tersebut. | |
| Menambahkan bidang properties ke indeks yang ditentukan atau memodifikasi pengaturan indeks. | |
| Memperoleh konten pemetaan suatu indeks. | |
| Menambahkan dokumen ke indeks. Anda dapat menentukan ID unik untuk dokumen dalam indeks menggunakan WITH_ID. Jika ID dokumen sudah ada, ID yang ada akan ditimpa. Jika Anda tidak menentukan WITH_ID (default), ID dokumen akan dibuat secara otomatis. | |
| Menambahkan beberapa dokumen ke indeks. Setiap dokumen harus memiliki ID dokumen yang ditentukan oleh doc_id. Jika sebuah dokumen gagal ditambahkan karena format tidak valid, semua dokumen yang terlibat dalam perintah tersebut tidak akan ditambahkan ke indeks. | |
| Memperbarui dokumen yang ditentukan oleh doc_id dalam indeks. Jika bidang dokumen yang ingin Anda perbarui adalah bidang terpetakan dan terindeks, bidang tersebut harus memiliki tipe data yang sama dengan yang digunakan dalam pemetaan. Jika bidang tersebut bukan bidang terindeks, bidang yang diperbarui dapat memiliki tipe data apa pun. Catatan Jika bidang sudah ada, dokumen diperbarui. Jika bidang belum ada, bidang tersebut ditambahkan. Jika dokumen tidak ada, dokumen dibuat secara otomatis. Dalam kasus ini, perintah setara dengan TFT.ADDDOC. | |
| Menghapus bidang yang ditentukan dari dokumen yang ditentukan oleh doc_id dalam indeks. Jika bidang tersebut merupakan bidang terindeks, informasi bidang tersebut juga dihapus dari indeks. Catatan Jika bidang yang ditentukan tidak ada (misalnya, bidang yang difilter oleh _source), operasi gagal. | |
| Menambahkan increment ke bidang yang ditentukan dalam dokumen yang ditentukan oleh doc_id dalam indeks. Increment dapat berupa bilangan bulat positif atau negatif. Tipe data bidang hanya dapat berupa LONG atau INTEGER. Catatan Jika dokumen tidak ada, dokumen dibuat secara otomatis. Dalam kasus ini, nilai bidang yang ada adalah 0, dan nilai bidang yang diperbarui diperoleh dengan menambahkan nilai increment ke nilai bidang yang ada. Jika bidang tidak ada (misalnya, difilter oleh _source), operasi gagal. | |
| Menambahkan increment ke bidang yang ditentukan dalam dokumen yang ditentukan oleh doc_id dalam indeks. Increment dapat berupa bilangan titik mengambang positif atau negatif. Tipe data bidang hanya dapat berupa DOUBLE. Catatan Jika dokumen tidak ada, dokumen dibuat secara otomatis. Dalam kasus ini, nilai bidang yang ada adalah 0, dan nilai bidang yang diperbarui diperoleh dengan menambahkan nilai increment ke nilai bidang yang ada. Jika bidang tidak ada (misalnya, difilter oleh _source), operasi gagal. | |
| Memperoleh konten dokumen yang ditentukan oleh doc_id dalam indeks. | |
| Memeriksa apakah dokumen yang ditentukan oleh doc_id ada dalam indeks. | |
| Memperoleh jumlah dokumen dalam indeks. | |
| Memperoleh ID semua dokumen dalam indeks. | |
| Menghapus dokumen yang ditentukan oleh doc_id dari indeks. Beberapa ID dokumen dapat ditentukan. | |
| Menghapus semua dokumen dari indeks tetapi mempertahankan indeks tersebut. | |
| Menanyakan efek tokenisasi dari alat analisis yang ditentukan. | |
| Mencari dokumen dalam indeks berdasarkan pernyataan kueri. Sintaks kueri mirip dengan sintaks Elasticsearch. | |
| Menanyakan dokumen dalam beberapa indeks yang memiliki mappings dan settings diatur ke nilai yang sama menggunakan klausa kueri dan mengumpulkan hasil dari indeks-indeks tersebut. Kemudian, hasilnya dinilai, diurutkan, diagregasi, dan dikembalikan. | |
| Menanyakan durasi eksekusi pernyataan kueri. Keluaran mencakup jumlah dokumen yang terlibat dalam kueri dan jumlah waktu yang dikonsumsi oleh setiap operasi dalam kueri. | |
| Menanyakan informasi skor terperinci dari dokumen yang dihasilkan dari eksekusi pernyataan kueri. Anda dapat menggunakan perintah ini untuk memahami proses perhitungan skor dokumen. Kemudian, Anda dapat mengoptimalkan kueri pencarian untuk meningkatkan efektivitas pengambilan dokumen. | |
| Anda dapat menggunakan perintah Redis DEL asli untuk menghapus satu atau beberapa kunci TairSearch. |
Tabel 2. Perintah penyelesaian otomatis
Perintah | Sintaks | Deskripsi |
| Menambahkan satu atau beberapa teks penyelesaian otomatis dan bobotnya ke indeks yang ditentukan. | |
| Menghapus satu atau beberapa entri teks penyelesaian otomatis dari indeks yang ditentukan. | |
| Memperoleh jumlah teks penyelesaian otomatis dalam indeks yang ditentukan. | |
| Memperoleh teks penyelesaian otomatis yang dapat dicocokkan berdasarkan awalan yang ditentukan. Teks dikembalikan dalam urutan menurun berdasarkan bobot. | |
| Memperoleh semua entri teks penyelesaian otomatis dalam indeks yang ditentukan. |
Daftar berikut menjelaskan konvensi untuk sintaks perintah yang digunakan dalam topik ini:
Kata kunci huruf kapital: menunjukkan kata kunci perintah.Teks miring: menunjukkan variabel.[opsi]: menunjukkan bahwa parameter yang diapit tanda kurung siku bersifat opsional. Parameter yang tidak diapit tanda kurung siku harus ditentukan.A|B: menunjukkan bahwa parameter yang dipisahkan oleh tanda vertikal (|) saling eksklusif. Hanya satu parameter yang dapat ditentukan....: menunjukkan bahwa parameter sebelum simbol ini dapat diulang.
TFT.CREATEINDEX
Item | Deskripsi |
Sintaks |
|
Deskripsi perintah | Membuat indeks dan pemetaan untuk indeks tersebut. Sintaks yang digunakan untuk membuat pemetaan mirip dengan sintaks yang digunakan untuk membuat pemetaan eksplisit di Elasticsearch. Anda harus membuat indeks sebelum dapat menambahkan dokumen ke indeks tersebut. Catatan Untuk mencegah terbentuknya large key, Anda dapat membagi indeks besar menjadi indeks kecil dan merancang aturan distribusi beban untuk menulis data ke indeks yang berbeda. Saat membuat indeks, pastikan indeks tersebut memiliki parameter mappings dan settings diatur ke nilai yang sama. Setelah indeks tersebut dibuat, Anda dapat menanyakannya menggunakan TFT.MSEARCH. |
Parameter |
|
Parameter respons. |
|
Contoh | Contoh perintah: Contoh keluaran: |
TFT.UPDATEINDEX
Kategori | Deskripsi |
Sintaks |
|
Deskripsi perintah | Menambahkan bidang properties ke indeks yang ditentukan atau memodifikasi pengaturan indeks. |
Parameter |
Catatan Untuk sintaks mappings dan settings, lihat TFT.CREATEINDEX. |
Parameter respons |
|
Contoh | Contoh perintah: Contoh keluaran: |
TFT.GETINDEX
Kategori | Deskripsi |
Sintaks |
|
Deskripsi perintah | Memperoleh konten pemetaan suatu indeks. |
Parameter |
|
Parameter respons. |
|
Contoh | Contoh perintah: Contoh keluaran: |
TFT.ADDDOC
Item | Deskripsi |
Sintaks |
|
Deskripsi perintah | Menambahkan dokumen ke indeks. Anda dapat menentukan ID unik untuk dokumen dalam indeks menggunakan WITH_ID. Jika ID dokumen sudah ada, ID yang ada akan ditimpa. Jika Anda tidak menentukan WITH_ID (default), ID dokumen akan dibuat secara otomatis. |
Parameter |
|
Parameter respons |
|
Contoh | Contoh perintah: Contoh keluaran: Contoh array yang akan ditambahkan: |
TFT.MADDDOC
Kategori | Deskripsi |
Sintaks |
|
Deskripsi perintah | Menambahkan beberapa dokumen ke indeks. Setiap dokumen harus memiliki ID dokumen yang ditentukan oleh doc_id. Jika sebuah dokumen gagal ditambahkan karena format tidak valid, semua dokumen yang terlibat dalam perintah tersebut tidak akan ditambahkan ke indeks. |
Parameter |
|
Parameter respons. |
|
Contoh | Contoh perintah: Contoh keluaran: |
TFT.UPDATEDOCFIELD
Kategori | Deskripsi |
Sintaks |
|
Deskripsi perintah | Memperbarui dokumen yang ditentukan oleh doc_id dalam indeks. Jika bidang dokumen yang ingin Anda perbarui adalah bidang terpetakan dan terindeks, bidang tersebut harus memiliki tipe data yang sama dengan yang digunakan dalam pemetaan. Jika bidang tersebut bukan bidang terindeks, bidang yang diperbarui dapat memiliki tipe data apa pun. Catatan Jika bidang sudah ada, dokumen diperbarui. Jika bidang belum ada, bidang tersebut ditambahkan. Jika dokumen tidak ada, dokumen dibuat secara otomatis. Dalam kasus ini, perintah setara dengan TFT.ADDDOC. |
Opsi |
|
Parameter respons. |
|
Contoh | Contoh perintah: Contoh keluaran: |
TFT.DELDOCFIELD
Kategori | Deskripsi |
Sintaks |
|
Deskripsi perintah | Menghapus bidang yang ditentukan dari dokumen yang ditentukan oleh doc_id dalam indeks. Jika bidang tersebut merupakan bidang terindeks, informasi bidang tersebut juga dihapus dari indeks. Catatan Jika bidang yang ditentukan tidak ada (misalnya, bidang yang difilter oleh _source), operasi gagal. |
Opsi |
|
Parameter respons. |
|
Contoh | Contoh perintah: Contoh keluaran: |
TFT.INCRLONGDOCFIELD
Kategori | Deskripsi |
Sintaks |
|
Deskripsi perintah | Menambahkan increment ke bidang yang ditentukan dalam dokumen yang ditentukan oleh doc_id dalam indeks. Increment dapat berupa bilangan bulat positif atau negatif. Tipe data bidang hanya dapat berupa LONG atau INTEGER. Catatan Jika dokumen tidak ada, dokumen dibuat secara otomatis. Dalam kasus ini, nilai bidang yang ada adalah 0, dan nilai bidang yang diperbarui diperoleh dengan menambahkan nilai increment ke nilai bidang yang ada. Jika bidang tidak ada (misalnya, difilter oleh _source), operasi gagal. |
Opsi |
|
Parameter respons. |
|
Contoh | Contoh perintah: Contoh keluaran: |
TFT.INCRFLOATDOCFIELD
Kategori | Deskripsi |
Sintaks |
|
Deskripsi perintah | Menambahkan increment ke bidang yang ditentukan dalam dokumen yang ditentukan oleh doc_id dalam indeks. Increment dapat berupa bilangan titik mengambang positif atau negatif. Tipe data bidang hanya dapat berupa DOUBLE. Catatan Jika dokumen tidak ada, dokumen dibuat secara otomatis. Dalam kasus ini, nilai bidang yang ada adalah 0, dan nilai bidang yang diperbarui diperoleh dengan menambahkan nilai increment ke nilai bidang yang ada. Jika bidang tidak ada (misalnya, difilter oleh _source), operasi gagal. |
Opsi |
|
Parameter respons. |
|
Contoh | Contoh perintah: Contoh keluaran: |
TFT.GETDOC
Kategori | Deskripsi |
Sintaks |
|
Deskripsi perintah | Memperoleh konten dokumen yang ditentukan oleh doc_id dalam indeks. |
Opsi |
|
Parameter respons. |
|
Contoh | Contoh perintah: Contoh keluaran: |
TFT.EXISTS
Kategori | Deskripsi |
Sintaks |
|
Deskripsi perintah | Memeriksa apakah dokumen yang ditentukan oleh doc_id ada dalam indeks. |
Parameter |
|
Parameter respons. |
|
Contoh | Contoh perintah: Contoh keluaran: |
TFT.DOCNUM
Kategori | Deskripsi |
Sintaks |
|
Deskripsi perintah | Memperoleh jumlah dokumen dalam indeks. |
Parameter |
|
Nilai kembali |
|
Contoh | Contoh perintah: Contoh keluaran: |
TFT.SCANDOCID
Kategori | Deskripsi |
Sintaks |
|
Deskripsi perintah | Memperoleh ID semua dokumen dalam indeks. |
Parameter |
|
Parameter respons. |
|
Contoh | Contoh perintah: Contoh keluaran: |
TFT.DELDOC
Item | Deskripsi |
Sintaks |
|
Deskripsi perintah | Menghapus dokumen yang ditentukan oleh doc_id dari indeks. Beberapa ID dokumen dapat ditentukan. |
Parameter |
|
Parameter respons. |
|
Contoh | Contoh perintah: Contoh keluaran: |
TFT.DELALL
Kategori | Deskripsi |
Sintaks |
|
Deskripsi perintah | Menghapus semua dokumen dari indeks tetapi mempertahankan indeks tersebut. |
Parameter |
|
Parameter respons. |
|
Contoh | Contoh perintah: Contoh keluaran: |
TFT.ANALYZER
Kategori | Deskripsi |
Sintaks |
|
Deskripsi perintah | Menanyakan efek tokenisasi dari alat analisis yang ditentukan. |
Opsi |
|
Parameter respons. |
|
Contoh | Contoh perintah: Contoh keluaran: |
TFT.SEARCH
Kategori | Deskripsi |
Sintaks |
|
Deskripsi perintah | Mencari dokumen dalam indeks berdasarkan pernyataan kueri. Sintaks kueri mirip dengan sintaks Elasticsearch. |
Opsi | index adalah nama indeks yang ingin Anda kelola dengan menjalankan perintah ini; query adalah pernyataan Query DSL yang mirip dengan sintaks yang digunakan di Elasticsearch. Bidang berikut didukung:
|
Keluaran |
|
Contoh | Contoh perintah: Contoh keluaran: |
TFT.MSEARCH
Item | Deskripsi |
Sintaks |
|
Deskripsi perintah | Menanyakan dokumen dalam beberapa indeks yang memiliki mappings dan settings diatur ke nilai yang sama menggunakan klausa kueri dan mengumpulkan hasil dari indeks-indeks tersebut. Kemudian, hasilnya dinilai, diurutkan, diagregasi, dan dikembalikan. Catatan Keluaran perintah TFT.MSEARCH adalah hasil penilaian, pengurutan, dan agregasi hasil kueri dari indeks-indeks tersebut. Keluaran ini berbeda dari hasil yang dihasilkan dengan langsung menilai, mengurutkan, dan mengagregasi set data dalam beberapa indeks. Kebijakan TFT.MSEARCH:
|
Parameter |
Catatan Berbeda dengan pernyataan query perintah TFT.SEARCH, pernyataan query perintah TFT.MSEARCH tidak mendukung parameter from, tetapi mendukung kueri berhalaman menggunakan parameter size, reply_with_keys_cursor, dan keys_cursor. Untuk informasi selengkapnya tentang sintaks parameter lainnya, lihat TFT.SEARCH. |
Parameter respons. |
|
Contoh | Jalankan perintah berikut terlebih dahulu: Contoh perintah: Contoh respons: Contoh perintah untuk menanyakan halaman kedua: Contoh respons: |
TFT.EXPLAINCOST
Item | Deskripsi |
Sintaks |
|
Deskripsi perintah | Menanyakan durasi eksekusi pernyataan kueri. Keluaran mencakup jumlah dokumen yang terlibat dalam kueri dan jumlah waktu yang dikonsumsi oleh setiap operasi dalam kueri. |
Opsi |
|
Parameter respons. |
|
Contoh | Contoh perintah: Contoh keluaran: |
TFT.EXPLAINSCORE
Kategori | Deskripsi |
Sintaks |
|
Deskripsi perintah | Menanyakan informasi skor terperinci dari dokumen yang dihasilkan dari eksekusi pernyataan kueri. Anda dapat menggunakan perintah ini untuk memahami proses perhitungan skor dokumen. Kemudian, Anda dapat mengoptimalkan kueri pencarian untuk meningkatkan efektivitas pengambilan dokumen. Perintah ini hanya tersedia untuk instans berbasis DRAM yang kompatibel dengan Redis 6.0. |
Parameter |
|
Parameter respons. |
|
Contoh | Contoh perintah: Contoh keluaran: |
TFT.ADDSUG
Kategori | Deskripsi |
Sintaks |
|
Deskripsi perintah | Menambahkan satu atau beberapa teks penyelesaian otomatis dan bobotnya ke indeks yang ditentukan. |
Parameter |
|
Parameter respons |
|
Contoh | Contoh perintah: Contoh keluaran: |
TFT.DELSUG
Kategori | Deskripsi |
Sintaks |
|
Deskripsi perintah | Menghapus satu atau beberapa entri teks penyelesaian otomatis dari indeks yang ditentukan. |
Parameter |
|
Keluaran |
|
Contoh | Contoh perintah: Contoh keluaran: |
TFT.SUGNUM
Kategori | Deskripsi |
Sintaks |
|
Deskripsi perintah | Memperoleh jumlah teks penyelesaian otomatis dalam indeks yang ditentukan. |
Parameter |
|
Parameter respons. |
|
Contoh | Contoh perintah: Contoh keluaran: |
TFT.GETSUG
Kategori | Deskripsi |
Sintaks |
|
Deskripsi perintah | Memperoleh teks penyelesaian otomatis yang dapat dicocokkan berdasarkan awalan yang ditentukan. Teks dikembalikan dalam urutan menurun berdasarkan bobot. |
Parameter |
|
Parameter respons. |
|
Contoh | Contoh perintah: Contoh keluaran: |
TFT.GETALLSUGS
Kategori | Deskripsi |
Sintaks |
|
Deskripsi perintah | Memperoleh semua entri teks penyelesaian otomatis dalam indeks yang ditentukan. |
Parameter |
|
Parameter respons. |
|
Contoh | Contoh perintah: Contoh keluaran: |
Agregasi
Anda dapat menambahkan klausa aggs (atau aggregations) ke permintaan TFT.SEARCH untuk mengagregasi hasil klausa query.
Penggunaan
Dalam kebanyakan kasus, dalam klausa aggs, Anda harus menentukan nama agregasi kustom, jenis agregasi, dan bidang agregasi (field). Hanya bidang bertipe numerik dan keyword yang didukung. Contohnya:
TFT.SEARCH shares '{"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Sum":{"sum":{"field":"purchase_price"}}}}'
# Tentukan Jay_Sum sebagai nama agregasi, sum sebagai jenis agregasi, dan purchase_price sebagai bidang agregasi.Hasil yang dikembalikan berisi hasil kueri dari query dan hasil agregasi dari aggs:
{"hits":{"hits":[{"_id":"16581351808123930","_index":"today_shares0718","_score":1.0,"_source":{"shares_name":"XAX","logictime":14300210,"purchase_type":1,"purchase_price":101.1,"purchase_count":100,"investor":"Jay"}},{"_id":"16581351809626430","_index":"today_shares0718","_score":1.0,"_source":{"shares_name":"XAX","logictime":14300310,"purchase_type":1,"purchase_price":111.1,"purchase_count":100,"investor":"Jay"}}],"max_score":1.0,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Sum":{"value":212.2}}}Anda dapat menambahkan "size":0 ke pernyataan kueri sehingga hanya hasil aggs yang dikembalikan.
Jenis agregasi untuk aggs
Agregasi Metrik, Agregasi Terms, dan Agregasi Filter didukung oleh parameter aggs.
Kategori | Deskripsi |
Agregasi metrik | Umumnya melakukan perhitungan numerik atau statistik pada bidang bertipe numerik (seperti integer, double, dll.), dan tidak mendukung sub-agregasi bersarang. Metrik berikut didukung:
Catatan Kecuali untuk value_count, semua metrik lain hanya mendukung bidang bertipe numerik. Keluaran: Nilai bertipe DOUBLE yang dihitung dari bidang tertentu. |
Agregasi Terms | Menghitung jumlah nilai yang dideduplikasi. Hanya bidang bertipe keyword yang didukung. Agregasi bersarang didukung. Deskripsi parameter:
Contoh: Keluaran: Objek JSON dengan nama agregasi sebagai kunci dan Object sebagai tipe. Dalam objek, agregasi kunci menggunakan buckets untuk menampilkan statistik. Setiap bucket berisi kunci (bidang agregasi) dan doc_count (jumlah dokumen yang terkait dengan bidang agregasi). Contoh: |
Agregasi Filter | Anda dapat memasukkan pernyataan query dalam filter untuk lebih lanjut memfilter hasil query. Sub-agregasi bersarang didukung. Keluaran: Jumlah dokumen (doc_count) yang cocok dengan kondisi filter. |
Contoh agregasi
Buat indeks.
TFT.CREATEINDEX today_shares '{"mappings":{"properties":{"shares_name":{"type":"keyword"},"logictime":{"type":"long"},"purchase_type":{"type":"integer"},"purchase_price":{"type":"double"},"purchase_count":{"type":"long"},"investor":{"type":"keyword"}}}}' # Buat indeks yang merepresentasikan volume perdagangan saham hari ini. # shares_name: Nama setiap saham. # logictime: Waktu saat transaksi selesai. # purchase_type: Jenis pembelian. # purchase_price: Harga pembelian. # purchase_count: Jumlah saham yang dibeli. # investor: ID investor.Keluaran yang diharapkan:
OKTambahkan data dokumen.
Jalankan perintah berikut:
TFT.ADDDOC today_shares '{"shares_name":"XAX","logictime":14300210, "purchase_type":1,"purchase_price":101.1, "purchase_count":100,"investor":"Jay"}' TFT.ADDDOC today_shares '{"shares_name":"XAX","logictime":14300310, "purchase_type":1,"purchase_price":111.1, "purchase_count":100,"investor":"Jay"}' TFT.ADDDOC today_shares '{"shares_name":"YBY","logictime":14300410, "purchase_type":1,"purchase_price":11.1, "purchase_count":100,"investor":"Mila"}'Keluaran yang diharapkan:
OKLakukan kueri.
Contoh kueri:
sum
# Tanyakan total jumlah yang dihabiskan Jay untuk membeli saham. TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Sum":{"sum":{"field":"purchase_price"}}}}' # Keluaran yang diharapkan: {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Sum":{"value":212.2}}}max
# Tanyakan jumlah terbesar yang dihabiskan Jay untuk membeli satu saham. TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Max":{"max":{"field":"purchase_price"}}}}' # Keluaran yang diharapkan: {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Max":{"value":111.1}}}avg
# Tanyakan jumlah rata-rata yang dihabiskan Jay untuk membeli saham yang berbeda. TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Avg":{"avg":{"field":"purchase_price"}}}}' # Keluaran yang diharapkan: {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Avg":{"value":106.1}}}std_deviation
# Tanyakan deviasi standar jumlah yang dihabiskan Jay untuk membeli saham. TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Std_Deviation":{"std_deviation":{"field":"purchase_price"}}}}' # Keluaran yang diharapkan: {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Std_Deviation":{"value":5.0}}}extended_stats
# Tanyakan statistik jumlah yang dihabiskan Jay untuk membeli saham. TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Extended_Stats":{"extended_stats":{"field":"purchase_price"}}}}' # Keluaran yang diharapkan: {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Extended_Stats":{"count":2,"sum":212.2,"max":111.1,"min":101.1,"avg":106.1,"sum_of_squares":10221.21,"variance":25.0,"std_deviation":5.0}}}terms
# Tanyakan investor yang telah menyelesaikan setidaknya dua transaksi. TFT.SEARCH today_shares '{"size":0,"query":{"term":{"purchase_type":1}},"aggs":{"Per_Investor_Freq":{"terms":{"field":"investor","min_doc_count":2,"order": {"_key":"desc"}}}}}' # Keluaran yang diharapkan: {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":3}},"aggregations":{"Per_Investor_Freq":{"buckets":[{"key":"Jay","doc_count":2}]}}}Agregasi terms bersarang
# Tanyakan jumlah transaksi dan harga pembelian rata-rata untuk setiap saham, tidak termasuk saham XAX. TFT.SEARCH today_shares '{"size":0,"query":{"term":{"purchase_type":1}},"aggs":{"Per_Investor_Freq":{"terms":{"field":"shares_name","include":"[A-Z]+","exclude":["XAX"]},"aggs":{"Price_Avg":{"avg":{"field":"purchase_price"}}}}}}' # Keluaran yang diharapkan: {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":3}},"aggregations":{"Per_Investor_Freq":{"buckets":[{"key":"YBY","doc_count":1,"Price_Avg":{"value":11.1}}]}}}Agregasi filter bersarang
# Tanyakan jumlah saham yang dibeli oleh Jay dan statistik keseluruhan (nilai metrik). TFT.SEARCH today_shares '{"size":0,"query":{"term":{"purchase_type":1}}, "aggs":{"Jay_BuyIn_Filter": {"filter": {"term":{"investor": "Jay"}},"aggs":{"Jay_BuyIn_Quatation":{"extended_stats":{"field":"purchase_price"}}}}}}' # Keluaran yang diharapkan: {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":3}},"aggregations":{"Jay_BuyIn_Filter":{"doc_count":2,"Jay_BuyIn_Quatation":{"count":2,"sum":212.2,"max":111.1,"min":101.1,"avg":106.1,"sum_of_squares":10221.21,"variance":25.0,"std_deviation":5.0}}}}