All Products
Search
Document Center

Tair (Redis® OSS-Compatible):Perintah TairSearch

Last Updated:Jul 21, 2026

TairSearch adalah modul pencarian teks penuh yang terintegrasi dalam Tair (Redis OSS-Compatible). Modul ini menggunakan sintaks kueri yang mirip dengan Elasticsearch dan memberikan performa penulisan serta pencarian dalam hitungan milidetik.

Ikhtisar

TairSearch menyediakan kemampuan berikut:

  • Latensi rendah dan performa tinggi: Penulisan dan pencarian teks penuh dalam hitungan milidetik didukung oleh mesin in-memory Tair. Untuk detailnya, lihat whitepaper performa TairSearch.

  • Pembaruan inkremental dan parsial: Tambahkan, perbarui, hapus, dan auto-increment bidang dokumen individual tanpa menulis ulang seluruh dokumen.

  • Sintaks kueri ala Elasticsearch: Query DSL berbasis JSON yang mendukung bool, match, term, paging, dan sorting—sudah dikenal oleh pengembang yang berpengalaman dengan Elasticsearch.

  • Agregasi: Agregasi terms, metrik, dan filter untuk analitik pada hasil pencarian. Lihat Agregasi.

  • Auto-complete: Pencocokan kabur berbasis awalan untuk pengalaman pencarian saat mengetik.

  • Alat analisis bawaan dan kustom: Alat analisis bawaan untuk bahasa Inggris (standard, stop), Tiongkok (jieba, IK), dan bahasa lainnya. Alat analisis kustom dengan kamus dan daftar stop word buatan pengguna juga didukung. Untuk detailnya, lihat Alat analisis pencarian.

  • Kueri indeks shard: Cari di beberapa indeks shard sekaligus dengan TFT.MSEARCH dan dapatkan hasil agregasi.

  • Kompresi dokumen: Kompres dokumen yang disimpan untuk mengurangi penggunaan memori. Dinonaktifkan secara default.

  • Cache kueri: Cache hasil kueri terbaru untuk meningkatkan performa kueri data panas.

Prasyarat

Instans harus merupakan instans Tair optimasi memori berbasis DRAM yang menjalankan salah satu versi berikut:

Versi engine

Versi minor minimum

Redis 5.0-compatible

1.7.27 atau lebih baru

Redis 6.0-compatible

6.2.4.1 atau lebih baru

Redis 7.0-compatible

Semua versi minor

Perbarui instans ke versi minor terbaru untuk mendapatkan fitur terlengkap dan stabilitas tertinggi. Untuk instruksinya, lihat Upgrade versi minor dan proxy. Untuk instans kluster atau instans dengan pemisahan baca/tulis, perbarui juga node proxy ke versi minor terbaru agar semua perintah berfungsi sebagaimana mestinya.

Catatan rilis

Instans berbasis DRAM kompatibel Redis 5.0

Tanggal

Versi

Perubahan

2022-03-11

V1.7.27

TairSearch dirilis

2022-05-24

V1.8.5

Fitur agregasi

2022-09-06

V5.0.15

Perintah TFT.MSEARCH

2023-01-13

V5.0.25

Alat analisis

2023-03-15

V5.0.28

Cache kueri, kompresi dokumen, perintah TFT.ANALYZER

2023-06-12

V5.0.35

Tipe data ARRAY, algoritma similarity Okapi BM25

Instans berbasis DRAM kompatibel Redis 6.0

Tanggal

Versi

Perubahan

2023-02-07

V6.2.4.1

TairSearch (semua fitur V5.0.25)

2023-03-14

V6.2.5.0

Cache kueri, kompresi dokumen, TFT.ANALYZER (semua fitur V5.0.28)

2023-06-12

V6.2.7.3

Tipe data ARRAY, Okapi BM25 (semua fitur V5.0.35)

2023-12-21

V23.12.1.2

Perintah TFT.EXPLAINSCORE

Instans berbasis DRAM kompatibel Redis 7.0

Tanggal

Versi

Perubahan

2024-07-22

V24.7.0.0

Dukungan TairSearch

Praktik terbaik

Catatan penggunaan

  • Data TairSearch disimpan pada instans Tair dan mengonsumsi memori instans.

  • Untuk mengurangi penggunaan memori:

    • Atur index menjadi true hanya untuk bidang yang perlu dapat dicari. Atur index menjadi false untuk bidang lainnya.

    • Gunakan _source dengan pola includes/excludes untuk menyimpan hanya bidang dokumen yang Anda butuhkan.

    • Pilih alat analisis yang sesuai untuk menghindari tokenisasi yang tidak perlu dan peningkatan penggunaan memori.

    • Aktifkan kompresi dokumen untuk dokumen besar.

  • Batasi jumlah dokumen per indeks hingga maksimal 5 juta. Hal ini mencegah kesenjangan data pada instans kluster, menyeimbangkan permintaan baca dan tulis, serta mengurangi large key dan hotkey. Pisahkan dataset besar ke beberapa indeks dan gunakan TFT.MSEARCH untuk mengkuerinya secara bersamaan.

Konvensi sintaks

Konvensi

Makna

UPPERCASE

Kata kunci perintah

*italic*

Variabel

[options]

Parameter opsional. Parameter tanpa tanda kurung siku wajib diisi.

`A\

B`

Parameter saling eksklusif. Tentukan hanya salah satu.

...

Parameter sebelumnya dapat diulang.


Perintah pencarian teks penuh

TFT.CREATEINDEX

Membuat indeks dengan definisi pemetaan. Sintaks pemetaan mirip dengan pemetaan eksplisit Elasticsearch. Indeks harus dibuat sebelum dokumen dapat ditambahkan.

Sintaks

TFT.CREATEINDEX index mappings [settings]
Untuk mencegah large key, pisahkan indeks besar menjadi beberapa indeks kecil dengan mappings dan settings yang identik, lalu kueri secara bersamaan dengan TFT.MSEARCH.

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks yang akan dibuat.

*mappings*

Ya

Definisi pemetaan JSON. Lihat Opsi pemetaan.

*settings*

Tidak

Pengaturan JSON untuk indeks. Lihat Pengaturan indeks.

Opsi pemetaan

Objek mappings mendukung bidang tingkat atas berikut:

dynamic

Mode pemetaan. Nilai yang valid:

  • "strict" — Data hanya dapat ditulis ke bidang yang didefinisikan dalam properties. Menulis ke bidang yang tidak didefinisikan akan gagal.

  • Tidak ditentukan (default) — Mode non-strict. Sistem tidak memeriksa apakah bidang yang ditulis telah didefinisikan dalam properties.

enabled

Mengontrol pemeriksaan tipe untuk bidang yang tidak diindeks (index diatur ke false). Nilai yang valid: true (default) dan false. Saat true, penulisan gagal jika tipe bidang tidak sesuai dengan tipe yang didefinisikan dalam properties. Bidang yang diindeks selalu diperiksa tipenya terlepas dari pengaturan ini.

_source

Mengontrol apakah dokumen asli disimpan. Pengaturan ini tidak memengaruhi pembuatan indeks.

  • enabledtrue (default) menyimpan dokumen asli. false tidak menyimpannya.

  • includes — Array pola nama bidang yang akan disertakan. Wildcard didukung.

  • excludes — Array pola nama bidang yang akan dikecualikan. Wildcard didukung. Jika suatu bidang cocok dengan includes dan excludes, excludes memiliki prioritas lebih tinggi (bidang tersebut tidak disimpan).

Contoh:

"_source": {"enabled": true}

Ini adalah pengaturan default—menyimpan semua bidang. Setara dengan "_source": {"enabled": true, "excludes": [], "includes": []}.

"_source": {"enabled": true, "excludes": [], "includes": ["id", "name"]}

Hanya menyimpan bidang id dan name.

properties

Kumpulan definisi bidang. Setiap bidang mendukung atribut berikut:

Atribut

Deskripsi

Default

type

Tipe data. Lihat Tipe bidang.

Wajib

index

Apakah bidang ini diindeks (dapat dicari). true atau false.

true

boost

Bobot bidang untuk skor. Bilangan titik mengambang positif.

1

similarity

Algoritma similarity: "classic" (TF-IDF) atau "BM25" (Okapi BM25).

"classic"

Tipe bidang

Type

Deskripsi

Opsi khusus tipe

keyword

String yang tidak ditokenisasi. Cocok untuk kueri pencocokan eksak.

ignore_above: Panjang string maksimum. Default: 128.

text

String yang ditokenisasi oleh alat analisis sebelum diindeks.

analyzer, search_analyzer. Lihat Opsi alat analisis teks.

long

Bilangan bulat 64-bit. Cocok untuk timestamp (epoch Unix).

--

integer

Bilangan bulat 32-bit.

--

double

Bilangan titik mengambang 64-bit. NaN, Inf, dan -Inf tidak didukung.

--

Dukungan ARRAY: Semua tipe bidang mendukung varian array. Tambahkan [] ke nama tipe. Misalnya, keyword[] mendeklarasikan array kata kunci.

TFT.CREATEINDEX idx:products '{"mappings":{"properties":{"tags":{"type":"keyword[]"}}}}'

Opsi alat analisis teks

Opsi

Deskripsi

Default

analyzer

Alat analisis yang digunakan untuk pengindeksan. Lihat Alat analisis bawaan. Alat analisis kustom juga dapat ditentukan, dikonfigurasi melalui bagian analysis dalam settings.

"standard"

search_analyzer

Alat analisis yang digunakan saat pencarian. Nilai yang valid sama dengan analyzer.

Sama dengan analyzer

Alat analisis bawaan

standard (default), jieba (direkomendasikan untuk bahasa Tiongkok, bekerja lebih baik daripada chinese), stop, IK, pattern, whitespace, simple, keyword, chinese, french, dutch, russian.

Untuk detailnya, lihat Alat analisis bawaan.

Pengaturan indeks

Objek settings opsional mendukung bidang berikut:

analysis

Menentukan alat analisis kustom. Untuk detailnya, lihat Alat analisis kustom.

index

Mengonfigurasi algoritma similarity kustom. Gunakan ini untuk menyesuaikan parameter Okapi BM25:

Parameter

Deskripsi

Default

Nilai valid

k1

Mengontrol seberapa besar frekuensi term memengaruhi skor. Nilai yang lebih tinggi meningkatkan efeknya.

1.2

Lebih besar dari 0

b

Mengontrol seberapa besar panjang dokumen memengaruhi skor. Nilai yang lebih tinggi meningkatkan efeknya.

0.75

0 hingga 1

Contoh:

TFT.CREATEINDEX idx:products '{"mappings":{"properties":{"name":{"type":"keyword","similarity":"my_bm25"}}},"settings":{"index":{"similarity":{"my_bm25":{"type":"BM25","k1":1.0,"b":1.0}}}}}'

queries_cache

Mengonfigurasi cache hasil kueri. Secara default, cache menyimpan hingga 10.000 hasil tanpa batas memori. Saat penuh, hasil dihapus menggunakan algoritma Least Recently Used (LRU).

Parameter

Tipe

Deskripsi

Default

size

STRING

Memori maksimum untuk semua cache kueri. Mendukung satuan "bytes", "kb", dan "mb". Contoh: "1000" (1.000 byte), "10kb", "1mb".

Tanpa batas

ttl

INTEGER

Time to Live untuk hasil yang di-cache, dalam detik.

10

Contoh:

"settings": {"queries_cache": {"size": "100mb", "ttl": 3}}
queries_cache adalah parameter tingkat node. Mengonfigurasinya pada satu indeks memengaruhi semua indeks lain dalam proses yang sama. Gunakan konfigurasi queries_cache yang sama di semua indeks.

compress_doc

Mengonfigurasi kompresi dokumen transparan. Mengaktifkan kompresi meningkatkan konsumsi CPU dan latensi baca/tulis. Aktifkan ini hanya ketika indeks besar (kilobyte atau lebih) dan biaya penyimpanan menjadi pertimbangan utama.

Parameter

Type

Deskripsi

Default

size

STRING

Ambang batas kompresi. Dokumen hanya dikompresi ketika mencapai ukuran ini. Mendukung satuan "bytes", "kb", dan "mb".

"10kb"

enable

BOOLEAN

Apakah kompresi diaktifkan.

false

Contoh:

"settings": {"compress_doc": {"size": "1kb", "enable": true}}
Kompresi hanya berlaku untuk dokumen yang ditulis atau diperbarui setelah Anda mengaktifkan pengaturan ini dengan TFT.UPDATEINDEX. Dokumen yang sudah ada tidak dikompresi secara retroaktif.

Nilai kembali

  • Jika berhasil: OK

  • Jika gagal: Pesan error

Contoh

TFT.CREATEINDEX idx:product '{"mappings":{"_source":{"enabled":true},"properties":{"product_id":{"type":"keyword","ignore_above":128},"product_name":{"type":"text"},"product_title":{"type":"text","analyzer":"jieba"},"price":{"type":"double"}}}}'
OK

Lihat juga: TFT.UPDATEINDEX, TFT.GETINDEX


TFT.UPDATEINDEX

Menambahkan bidang baru ke pemetaan indeks atau memodifikasi pengaturan indeks.

Sintaks

TFT.UPDATEINDEX index mappings [settings]

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks.

*mappings*

Ya

Bidang properties baru yang akan ditambahkan. Hanya tentukan bidang yang ditambahkan—opsi pemetaan tingkat atas seperti dynamic, _source, dan lainnya tidak dapat diubah. Bidang baru tidak boleh bertentangan dengan bidang yang sudah ada.

*settings*

Tidak

Pengaturan indeks yang dimodifikasi. Hanya queries_cache, compress_doc, dan index (nilai k1/b BM25) yang dapat dimodifikasi.

Untuk sintaks lengkap mappings dan settings, lihat TFT.CREATEINDEX.

Nilai kembali

  • Jika berhasil: OK

  • Jika gagal: Pesan error

Contoh

TFT.UPDATEINDEX idx:product '{"mappings":{"properties":{"product_group":{"type":"text","analyzer":"chinese"}}}}'
OK

Lihat juga: TFT.CREATEINDEX, TFT.GETINDEX


TFT.GETINDEX

Mengambil pemetaan dan pengaturan suatu indeks.

Sintaks

TFT.GETINDEX index

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks.

Nilai kembali

  • Jika berhasil: Konten pemetaan indeks dalam format JSON

  • Jika gagal: Pesan error

Contoh

TFT.GETINDEX idx:product
{"idx:product0310":{"mappings":{"_source":{"enabled":true,"excludes":[],"includes":["product_id"]},"dynamic":"false","properties":{"price":{"boost":1.0,"enabled":true,"ignore_above":-1,"index":true,"similarity":"classic","type":"double"},"product_id":{"boost":1.0,"enabled":true,"ignore_above":128,"index":true,"similarity":"classic","type":"keyword"},"product_name":{"boost":1.0,"enabled":true,"ignore_above":-1,"index":true,"similarity":"classic","type":"text"},"product_title":{"analyzer":"chinese","boost":1.0,"enabled":true,"ignore_above":-1,"index":true,"similarity":"classic","type":"text"}}}}}

Lihat juga: TFT.CREATEINDEX, TFT.UPDATEINDEX


TFT.ADDDOC

Menambahkan satu dokumen ke indeks.

Sintaks

TFT.ADDDOC index document [WITH_ID doc_id]

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks.

*document*

Ya

Dokumen JSON. Nilai bidang harus sesuai dengan tipe data yang didefinisikan dalam pemetaan.

WITH_ID *doc_id*

Tidak

ID dokumen kustom (string). Jika dihilangkan, ID akan dibuat otomatis. Jika ID yang ditentukan sudah ada, dokumen yang ada akan ditimpa.

Jika _source dikonfigurasi dengan includes, hanya bidang yang tercantum dalam includes yang disimpan saat menambahkan atau memperbarui dokumen.

Nilai kembali

  • Jika berhasil: Objek JSON yang berisi ID dokumen, misalnya {"_id":"00001"}

  • Jika gagal: Pesan error

Contoh

Tambahkan dokumen dengan ID kustom:

TFT.ADDDOC idx:product '{"product_id":"product test"}' WITH_ID 00001
{"_id":"00001"}

Tambahkan dokumen dengan bidang array:

TFT.ADDDOC idx:product '{"product_id":["an","2","3df"]}' WITH_ID 00001

Lihat juga: TFT.MADDDOC, TFT.UPDATEDOCFIELD, TFT.DELDOC


TFT.MADDDOC

Menambahkan beberapa dokumen ke indeks dalam satu operasi atomik. Jika ada dokumen yang memiliki format tidak valid, tidak ada dokumen yang ditambahkan.

Sintaks

TFT.MADDDOC index document doc_id [document1 doc_id1] ...

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks.

*document*

Ya

Dokumen JSON. Nilai bidang harus sesuai dengan tipe data yang didefinisikan dalam pemetaan.

*doc_id*

Ya

ID dokumen (string).

Jika _source dikonfigurasi dengan includes, hanya bidang yang tercantum dalam includes yang disimpan saat menambahkan atau memperbarui dokumen.

Nilai kembali

  • Jika berhasil: OK

  • Jika gagal: Pesan error

Contoh

TFT.MADDDOC idx:product '{"product_id":"test1"}' 00011 '{"product_id":"test2"}' 00012
OK

Lihat juga: TFT.ADDDOC, TFT.DELDOC


TFT.UPDATEDOCFIELD

Memperbarui bidang tertentu dalam dokumen. Jika dokumen tidak ada, dokumen tersebut dibuat (setara dengan TFT.ADDDOC). Jika bidang tidak ada, bidang tersebut ditambahkan.

Sintaks

TFT.UPDATEDOCFIELD index doc_id document

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks.

*doc_id*

Ya

ID dokumen yang akan diperbarui.

*document*

Ya

Objek JSON yang berisi bidang yang akan diperbarui. Bidang yang diindeks harus sesuai dengan tipe data yang didefinisikan dalam pemetaan. Bidang yang tidak diindeks bisa bertipe apa saja.

Jika _source dikonfigurasi dengan includes, hanya bidang yang tercantum dalam includes yang disimpan saat menambahkan atau memperbarui dokumen.

Nilai kembali

  • Jika berhasil: OK

  • Jika gagal: Pesan error

Contoh

TFT.UPDATEDOCFIELD idx:product 00011 '{"product_id":"test8","product_group":"BOOK"}'
OK

Lihat juga: TFT.ADDDOC, TFT.DELDOCFIELD


TFT.DELDOCFIELD

Menghapus satu atau beberapa bidang dari dokumen. Jika bidang diindeks, entri indeksnya juga dihapus.

Sintaks

TFT.DELDOCFIELD index doc_id field [field1 field2 ...]

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks.

*doc_id*

Ya

ID dokumen.

*field*

Ya

Satu atau beberapa nama bidang yang akan dihapus.

Operasi gagal jika bidang yang ditentukan tidak ada dalam dokumen (misalnya, bidang yang difilter oleh _source).

Nilai kembali

  • Jika berhasil: Jumlah bidang yang dihapus (bilangan bulat)

  • Jika gagal: Pesan error

Contoh

TFT.DELDOCFIELD idx:product 00011 product_group
(integer) 1

Lihat juga: TFT.UPDATEDOCFIELD


TFT.INCRLONGDOCFIELD

Menambahkan nilai bidang integer dalam dokumen. Bidang harus bertipe LONG atau INTEGER. Tipe data ARRAY tidak didukung.

Sintaks

TFT.INCRLONGDOCFIELD index doc_id field increment

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks.

*doc_id*

Ya

ID dokumen.

*field*

Ya

Bidang yang akan ditambahkan. Harus bertipe LONG atau INTEGER.

*increment*

Ya

Nilai penambahan. Bisa berupa bilangan bulat positif atau negatif.

Jika dokumen tidak ada, dokumen tersebut dibuat otomatis dengan bidang diinisialisasi ke 0 sebelum menerapkan penambahan. Operasi gagal jika bidang tidak ada dalam dokumen (misalnya, bidang yang difilter oleh _source).

Nilai kembali

  • Jika berhasil: Nilai bidang yang diperbarui (bilangan bulat)

  • Jika gagal: Pesan error

Contoh

TFT.INCRLONGDOCFIELD idx:product 00011 stock 100
(integer)100

Lihat juga: TFT.INCRFLOATDOCFIELD, TFT.UPDATEDOCFIELD


TFT.INCRFLOATDOCFIELD

Menambahkan nilai bidang titik mengambang dalam dokumen. Bidang harus bertipe DOUBLE. Tipe data ARRAY tidak didukung.

Sintaks

TFT.INCRFLOATDOCFIELD index doc_id field increment

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks.

*doc_id*

Ya

ID dokumen.

*field*

Ya

Bidang yang akan ditambahkan. Harus bertipe DOUBLE.

*increment*

Ya

Nilai penambahan. Bisa berupa bilangan titik mengambang positif atau negatif.

Jika dokumen tidak ada, dokumen tersebut dibuat otomatis dengan bidang diinisialisasi ke 0 sebelum menerapkan penambahan. Operasi gagal jika bidang tidak ada dalam dokumen (misalnya, bidang yang difilter oleh _source).

Nilai kembali

  • Jika berhasil: Nilai bidang yang diperbarui (string)

  • Jika gagal: Pesan error

Contoh

TFT.INCRFLOATDOCFIELD idx:product 00011 stock 299.6
"299.6"

Lihat juga: TFT.INCRLONGDOCFIELD, TFT.UPDATEDOCFIELD


TFT.GETDOC

Mengambil dokumen berdasarkan ID-nya.

Sintaks

TFT.GETDOC index doc_id

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks.

*doc_id*

Ya

ID dokumen.

Nilai kembali

  • Jika berhasil: Objek JSON dengan ID dan konten dokumen

  • Jika gagal: Pesan error

Contoh

TFT.GETDOC idx:product 00011
{"_id":"00011","_source":{"product_id":"test8"}}

Lihat juga: TFT.EXISTS, TFT.SEARCH


TFT.EXISTS

Memeriksa apakah dokumen ada dalam indeks.

Sintaks

TFT.EXISTS index doc_id

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks.

*doc_id*

Ya

ID dokumen.

Nilai kembali

  • 1 jika dokumen ada

  • 0 jika indeks atau dokumen tidak ada

  • Jika gagal: Pesan error

Contoh

TFT.EXISTS idx:product 00011
(integer) 1

Lihat juga: TFT.GETDOC, TFT.DOCNUM


TFT.DOCNUM

Mendapatkan jumlah dokumen dalam indeks.

Sintaks

TFT.DOCNUM index

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks.

Nilai kembali

  • Jika berhasil: Jumlah dokumen (bilangan bulat)

  • Jika gagal: Pesan error

Contoh

TFT.DOCNUM idx:product
(integer) 3

Lihat juga: TFT.EXISTS, TFT.SCANDOCID


TFT.SCANDOCID

Memindai ID dokumen dalam indeks menggunakan kursor, mirip dengan perintah Redis SCAN.

Sintaks

TFT.SCANDOCID index cursor [MATCH *value*] [COUNT count]

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks.

*cursor*

Ya

Posisi kursor. Gunakan 0 untuk memulai pemindaian baru.

MATCH *\*value\**

Tidak

Pola gaya glob untuk memfilter ID dokumen. Contoh: MATCH *redis*.

COUNT *count*

Tidak

Jumlah maksimum item yang dikembalikan per pemindaian. Default: 100.

Nilai kembali

Array dua elemen:

  1. Kursor untuk iterasi berikutnya. 0 menunjukkan pemindaian selesai.

  2. Array ID dokumen.

Contoh

TFT.SCANDOCID idx:product 0 COUNT 3
1) "0"
2) 1) "00001"
   2) "00011"
   3) "00012"

Lihat juga: TFT.DOCNUM, TFT.GETDOC


TFT.DELDOC

Menghapus satu atau beberapa dokumen dari indeks berdasarkan ID dokumen.

Sintaks

TFT.DELDOC index doc_id [doc_id] ...

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks.

*doc_id*

Ya

Satu atau beberapa ID dokumen yang akan dihapus.

Nilai kembali

  • Jika berhasil: Jumlah dokumen yang benar-benar dihapus (string). ID yang tidak ada diabaikan.

  • Jika gagal: Pesan error

Contoh

TFT.DELDOC idx:product 00011 00014
"1"    # Dokumen 00014 tidak ada, sehingga hanya dokumen 00011 yang dihapus.

Lihat juga: TFT.DELALL, TFT.ADDDOC


TFT.DELALL

Menghapus semua dokumen dari indeks tetapi mempertahankan indeks dan pemetaannya.

Sintaks

TFT.DELALL index

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks.

Nilai kembali

  • Jika berhasil: OK

  • Jika gagal: Pesan error

Contoh

TFT.DELALL idx:product
OK

Lihat juga: TFT.DELDOC, DEL


TFT.ANALYZER

Menguji cara alat analisis menokenisasi teks tertentu.

Sintaks

TFT.ANALYZER analyzer_name text [INDEX index_name] [SHOW_TIME]

Parameter

Parameter

Wajib

Deskripsi

*analyzer_name*

Ya

Nama alat analisis bawaan atau kustom.

*text*

Ya

Teks yang akan ditokenisasi. Harus dikodekan UTF-8.

INDEX *index_name*

Bersyarat

Indeks yang berisi definisi alat analisis. Diperlukan saat menggunakan alat analisis kustom atau alat analisis bawaan dengan daftar stop word atau kamus yang dimodifikasi.

SHOW_TIME

Tidak

Sertakan durasi tokenisasi dalam output, dalam mikrodetik. Eksekusi pertama dengan kamus besar (misalnya, Jieba, IK) mungkin memakan waktu beberapa detik karena pemuatan kamus.

Nilai kembali

  • Jika berhasil: Objek JSON yang berisi detail token

  • Jika gagal: Pesan error

Contoh

TFT.ANALYZER standard "Tair is a nosql database"
{
    "tokens": [
        {"token": "Tair", "start_offset": 0, "end_offset": 4, "position": 0},
        {"token": "nosql", "start_offset": 10, "end_offset": 15, "position": 3},
        {"token": "database", "start_offset": 16, "end_offset": 24, "position": 4}
    ]
}

DEL (Redis native)

Gunakan perintah Redis native DEL untuk menghapus satu atau beberapa kunci TairSearch (indeks).

DEL key [key ...]

Untuk detailnya, lihat referensi perintah DEL.


TFT.SEARCH

Mencari dokumen dalam indeks menggunakan Query DSL.

Sintaks

TFT.SEARCH index query

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks.

*query*

Ya

Pernyataan Query DSL JSON. Lihat bagian di bawah untuk sintaks lengkapnya.

Sintaks kueri mirip dengan Elasticsearch Query DSL.

Nilai kembali

Jika berhasil, objek JSON yang berisi hasil pencarian:

{
    "hits": {
        "hits": [
            {"_id": "...", "_index": "...", "_score": 1.0, "_source": {...}}
        ],
        "max_score": 1.0,
        "total": {
            "relation": "eq",
            "value": 3
        }
    }
}

Bidang total.relation menunjukkan hubungan antara jumlah dengan total.value:

  • "eq" — Jumlahnya eksak.

  • "gte" — Jumlahnya minimal sebesar nilai ini (ketika track_total_hits adalah false).

Contoh

TFT.SEARCH idx:product '{"sort":[{"price":{"order":"desc"}}]}'
{"hits":{"hits":[{"_id":"fruits_3","_index":"idx:product","_score":1.0,"_source":{"product_id":"fruits_3","product_name":"orange","price":30.2,"stock":3000}},{"_id":"fruits_2","_index":"idx:product","_score":1.0,"_source":{"product_id":"fruits_2","product_name":"banana","price":24.0,"stock":2000}},{"_id":"fruits_1","_index":"idx:product","_score":1.0,"_source":{"product_id":"fruits_1","product_name":"apple","price":19.5,"stock":1000}}],"max_score":1.0,"total":{"relation":"eq","value":3}}}

Lihat juga: TFT.MSEARCH, TFT.EXPLAINCOST, TFT.EXPLAINSCORE


Jenis kueri

Bidang query dalam Query DSL mendukung jenis kueri berikut.

Pengurutan

Gunakan bidang sort untuk mengontrol urutan hasil. Tipe data ARRAY tidak didukung untuk pengurutan.

Nilai

Deskripsi

"_score"

Urutkan berdasarkan skor relevansi secara menurun.

"_doc"

Urutkan berdasarkan ID dokumen secara menaik.

*field_name*

Urutkan berdasarkan bidang tertentu secara menaik. Bidang harus diindeks (index: true) atau diperiksa tipenya (enabled: true) dan bertipe keyword, long, integer, atau double.

Untuk pengurutan multi-bidang, gunakan array. Kontrol arah pengurutan dengan order ("desc" atau "asc"):

{"sort": [{"price": {"order": "desc"}}, {"_doc": {"order": "desc"}}]}

Filtering sumber

Gunakan bidang _source untuk mengontrol bidang dokumen mana yang muncul dalam hasil:

{"_source": {"includes": ["f0"]}}

Mendukung includes dan excludes dengan pola wildcard.

Paging

Parameter

Tipe

Deskripsi

Default

from

INTEGER

Offset berbasis nol dari hasil pertama yang dikembalikan.

0

size

INTEGER

Jumlah maksimum hasil yang dikembalikan. Nilai valid: 0 hingga 10000. Nilai 0 hanya mengembalikan jumlah total tanpa dokumen.

10

Menggunakan from dan size bersama-sama menyediakan paging. Performa kueri menurun seiring peningkatan from.

track_total_hits

Mengontrol apakah akan menghitung semua dokumen yang cocok untuk kueri term, terms, atau match (kueri majemuk juga didukung, tetapi pencocokan kabur dalam match dinonaktifkan).

Nilai

Perilaku

false

Hanya mengembalikan 100 dokumen teratas yang diurutkan berdasarkan skor.

true

Menghitung semua dokumen yang cocok.

Peringatan

Mengatur track_total_hits ke true dengan jumlah besar dokumen yang cocok dapat menyebabkan kueri lambat. Gunakan dengan hati-hati.


TFT.MSEARCH

Mencari di beberapa indeks yang memiliki pemetaan dan pengaturan identik, lalu mengagregasi dan mengembalikan hasil gabungan.

Sintaks

TFT.MSEARCH index_count index [index1] ... query

Parameter

Parameter

Wajib

Deskripsi

*index_count*

Ya

Jumlah indeks yang akan dicari. Nilai valid: 1 hingga 100.

*index*

Ya

Satu atau beberapa nama indeks. Semua indeks harus memiliki mappings dan settings yang identik. Error dikembalikan jika pemetaan berbeda atau indeks tidak ada.

*query*

Ya

Pernyataan Query DSL JSON. Mendukung query, sort, _source, aggs, track_total_hits, size, reply_with_keys_cursor, dan keys_cursor.

TFT.MSEARCH tidak mendukung parameter from. Gunakan paging berbasis kursor sebagai gantinya (lihat di bawah).

Paging berbasis kursor

Gunakan size, reply_with_keys_cursor, dan keys_cursor bersama-sama untuk paging:

Parameter

Tipe

Deskripsi

Default

size

INTEGER

Jumlah hasil yang dikembalikan per halaman.

10

reply_with_keys_cursor

BOOLEAN

Sertakan posisi kursor dalam respons.

false

keys_cursor

OBJECT

Posisi kursor dari kueri sebelumnya. Gunakan 0 (atau hilangkan) untuk kueri pertama.

0

Cara kerja:

  1. Kueri pertama: Atur reply_with_keys_cursor ke true dan hilangkan keys_cursor (atau atur ke 0). Tair mengambil size dokumen dari setiap indeks, lalu mengumpulkan, memberi skor, mengurutkan, dan mengagregasi hasil gabungan, mengembalikan size dokumen teratas. Respons menyertakan posisi keys_cursor untuk setiap indeks.

  2. Kueri berikutnya: Teruskan keys_cursor yang dikembalikan dari respons sebelumnya. Tair melanjutkan pengambilan dari posisi kursor di setiap indeks.

Perilaku agregasi

TFT.MSEARCH mengagregasi set hasil anak dari setiap indeks, bukan mengagregasi dataset gabungan:

  • Rate dan sort: Memberi skor dan mengurutkan set hasil anak.

  • sum, max, min, avg, value_count: Mengagregasi di seluruh set hasil anak.

  • sum_of_squares, variance, std_deviation: Merata-rata di seluruh set hasil anak.

  • Agregasi terms dan agregasi filter: Mengagregasi di seluruh set hasil anak secara terpisah.

Nilai kembali

Jika berhasil, objek JSON yang mirip dengan output TFT.SEARCH, ditambah bidang aux_info:

{
    "aux_info": {
        "index_crc64": 15096806844241479487,
        "keys_cursor": {"key0": 2, "key1": 5, "key2": 3},
        "field_type": {"f0": "long"}
    }
}

Bidang

Deskripsi

index_crc64

Hash CRC-64 dari pemetaan dan pengaturan. Dapat diabaikan untuk permintaan bisnis.

keys_cursor

Posisi kursor untuk kueri berhalaman berikutnya. Disertakan hanya saat reply_with_keys_cursor adalah true.

field_type

Tipe data bidang yang diurutkan. Disertakan hanya saat pengurutan berdasarkan bidang indeks.

Contoh

Siapkan tiga indeks dengan pemetaan yang sama:

TFT.CREATEINDEX key0 '{"mappings":{"properties":{"f0":{"type":"long"}}}}'
TFT.CREATEINDEX key1 '{"mappings":{"properties":{"f0":{"type":"long"}}}}'
TFT.CREATEINDEX key2 '{"mappings":{"properties":{"f0":{"type":"long"}}}}'
TFT.ADDDOC key0 '{"f0":120}'
TFT.ADDDOC key0 '{"f0":130}'
TFT.ADDDOC key1 '{"f0":140}'
TFT.ADDDOC key1 '{"f0":150}'
TFT.ADDDOC key2 '{"f0":160}'
TFT.ADDDOC key2 '{"f0":170}'

Halaman pertama:

TFT.MSEARCH 3 key0 key1 key2 '{"size":2,"query":{"range":{"f0":{"gt":120,"lte":170}}},"sort":[{"f0":{"order":"desc"}}],"reply_with_keys_cursor":true}'
{"hits":{"hits":[{"_id":"16625439765504840","_index":"key2","_score":1.0,"_source":{"f0":170}},{"_id":"16625439741096630","_index":"key2","_score":1.0,"_source":{"f0":160}}],"max_score":1.0,"total":{"relation":"eq","value":5}},"aux_info":{"index_crc64":10084399559244916810,"keys_cursor":{"key0":0,"key1":0,"key2":2}}}

Halaman kedua (teruskan keys_cursor dari respons sebelumnya):

TFT.MSEARCH 3 key0 key1 key2 '{"size":2,"query":{"range":{"f0":{"gt":120,"lte":170}}},"sort":[{"f0":{"order":"desc"}}],"reply_with_keys_cursor":true,"keys_cursor":{"key0":0,"key1":0,"key2":2}}'
{"hits":{"hits":[{"_id":"16625439652681160","_index":"key1","_score":1.0,"_source":{"f0":150}},{"_id":"16625439624704580","_index":"key1","_score":1.0,"_source":{"f0":140}}],"max_score":1.0,"total":{"relation":"eq","value":5}},"aux_info":{"index_crc64":10084399559244916810,"keys_cursor":{"key0":0,"key1":2,"key2":2}}}

Lihat juga: TFT.SEARCH


TFT.EXPLAINCOST

Mengambil rincian waktu eksekusi kueri.

Sintaks

TFT.EXPLAINCOST index query

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks.

*query*

Ya

Pernyataan Query DSL (sintaks sama dengan TFT.SEARCH).

Nilai kembali

Objek JSON dengan bagian berikut:

Bagian

Deskripsi

QUERY_COST

Waktu eksekusi kueri dalam mikrodetik (time_cost_us), ditambah tampilan kueri (query) dan jumlah dokumen (doc_num). Untuk kueri bool, mencakup waktu per langkah (steps).

AGGS_COST

Waktu agregasi dalam mikrodetik. Diabaikan jika tidak ada agregasi yang ditentukan.

COLLECTOR_COST

Waktu untuk mengumpulkan dan mengurutkan hasil dalam mikrodetik, ditambah tipe collector: ScoreCollector (berbasis skor) atau CustomSortCollector (berbasis bidang).

Contoh

TFT.EXPLAINCOST idx:product '{"sort":[{"price":{"order":"desc"}}]}'
{
    "QUERY_COST": {
        "query": "MATCHALL_QUERY",
        "doc_num": 1,
        "time_cost_us": 2
    },
    "COLLECTOR_COST": {
        "collector_type": "CustomSortCollector",
        "time_cost_us": 20
    }
}

Lihat juga: TFT.SEARCH, TFT.EXPLAINSCORE


TFT.EXPLAINSCORE

Mengambil rincian skor hasil pencarian, menunjukkan cara skor dokumen dihitung.

Hanya tersedia untuk instans berbasis DRAM yang kompatibel dengan Redis 6.0 atau lebih baru.

Sintaks

TFT.EXPLAINSCORE index query [doc_id] ...

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks.

*query*

Ya

Pernyataan Query DSL (sintaks sama dengan TFT.SEARCH).

*doc_id*

Tidak

Satu atau beberapa ID dokumen. Saat ditentukan, hanya dokumen ini yang disertakan dalam output.

Nilai kembali

Set hasil yang sama dengan TFT.SEARCH, ditambah objek _explanation untuk setiap dokumen yang berisi:

Bidang

Deskripsi

score

Skor dokumen.

description

Rumus yang digunakan untuk perhitungan skor.

field

Bidang dokumen yang mencocokkan istilah kueri.

term

Istilah kueri yang ditemukan dalam dokumen.

query_boost

Bobot skor yang diterapkan pada klausa kueri ini.

details

Metadata dan proses pemberian skor langkah demi langkah.

Contoh

TFT.EXPLAINSCORE today_shares '{"query":{"wildcard":{"shares_name":{"value":"*BY"}}}}'
{
    "hits": {
        "hits": [
            {
                "_id": "17036492095306830",
                "_index": "today_shares",
                "_score": 1.0,
                "_source": {
                    "shares_name": "YBY",
                    "logictime": 14300410,
                    "purchase_type": 1,
                    "purchase_price": 11.1,
                    "purchase_count": 100,
                    "investor": "Mila"
                },
                "_explanation": {
                    "score": 1.0,
                    "description": "score, computed as query_boost",
                    "field": "shares_name",
                    "term": "*BY",
                    "query_boost": 1.0
                }
            }
        ],
        "max_score": 1.0,
        "total": {"relation": "eq", "value": 1}
    }
}

Lihat juga: TFT.SEARCH, TFT.EXPLAINCOST


Perintah auto-complete

TFT.ADDSUG

Menambahkan satu atau beberapa entri teks auto-complete dengan bobot terkait.

Sintaks

TFT.ADDSUG index text weight [text weight] ...

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks.

*text*

Ya

Entri teks auto-complete.

*weight*

Ya

Bobot skor (bilangan bulat positif). Bobot yang lebih tinggi mendapat peringkat lebih tinggi dalam hasil.

Nilai kembali

  • Jika berhasil: Jumlah entri teks yang ditambahkan (bilangan bulat)

  • Jika gagal: Pesan error

Contoh

TFT.ADDSUG idx:redis 'redis is a memory database' 3 'redis cluster' 10
(integer) 2

Lihat juga: TFT.GETSUG, TFT.DELSUG, TFT.SUGNUM


TFT.DELSUG

Menghapus satu atau beberapa entri teks auto-complete dari indeks.

Sintaks

TFT.DELSUG index text [text] ...

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks.

*text*

Ya

Teks entri yang akan dihapus. Harus merupakan kecocokan lengkap dan eksak.

Nilai kembali

  • Jika berhasil: Jumlah entri teks yang dihapus (bilangan bulat)

  • Jika gagal: Pesan error

Contoh

TFT.DELSUG idx:redis 'redis is a memory database' 'redis cluster'
(integer) 2

Lihat juga: TFT.ADDSUG, TFT.SUGNUM


TFT.SUGNUM

Mendapatkan jumlah entri teks auto-complete dalam indeks.

Sintaks

TFT.SUGNUM index

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks.

Nilai kembali

  • Jika berhasil: Jumlah entri (bilangan bulat)

  • Jika gagal: Pesan error

Contoh

TFT.SUGNUM idx:redis
(integer) 3

Lihat juga: TFT.ADDSUG, TFT.GETSUG


TFT.GETSUG

Mengambil saran auto-complete yang cocok dengan awalan. Hasil dikembalikan dalam urutan menurun berdasarkan bobot.

Sintaks

TFT.GETSUG index prefix [MAX_COUNT count] [FUZZY]

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks.

*prefix*

Ya

Awalan yang akan dicocokkan.

MAX_COUNT *count*

Tidak

Jumlah maksimum entri yang dikembalikan. Nilai valid: 0 hingga 255.

FUZZY

Tidak

Aktifkan pencocokan kabur.

Nilai kembali

  • Jika berhasil: Daftar entri teks auto-complete yang cocok

  • Jika gagal: Pesan error

Contoh

TFT.GETSUG idx:redis res MAX_COUNT 2 FUZZY
1) "redis cluster"
2) "redis lock"

Lihat juga: TFT.ADDSUG, TFT.GETALLSUGS


TFT.GETALLSUGS

Mengambil semua entri teks auto-complete dalam indeks.

Sintaks

TFT.GETALLSUGS index

Parameter

Parameter

Wajib

Deskripsi

*index*

Ya

Nama indeks.

Nilai kembali

  • Jika berhasil: Daftar semua entri teks auto-complete

  • Jika gagal: Pesan error

Contoh

TFT.GETALLSUGS idx:redis
1) "redis cluster"
2) "redis lock"
3) "redis is a memory database"

Lihat juga: TFT.GETSUG, TFT.ADDSUG


Agregasi

Tambahkan klausa aggs (atau aggregations) ke kueri TFT.SEARCH untuk melakukan agregasi pada set hasil.

Penggunaan dasar

Tentukan nama agregasi kustom, jenis agregasi, dan field yang akan diagregasi:

TFT.SEARCH shares '{"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Sum":{"sum":{"field":"purchase_price"}}}}'

Respons mencakup hasil pencarian 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}}}
Tambahkan "size": 0 ke kueri untuk hanya mengembalikan hasil agregasi tanpa dokumen.

Agregasi metrik

Agregasi metrik melakukan perhitungan numerik pada bidang numerik (integer, double, dll.) dan tidak mendukung sub-agregasi bersarang.

Metrik

Deskripsi

Tipe bidang yang didukung

sum

Jumlah nilai bidang

Numerik

max

Nilai maksimum

Numerik

min

Nilai minimum

Numerik

avg

Nilai rata-rata

Numerik

sum_of_squares

Jumlah kuadrat nilai

Numerik

variance

Varians statistik

Numerik

std_deviation

Standar deviasi

Numerik

value_count

Jumlah nilai (tanpa deduplikasi)

Numerik, keyword

extended_stats

Semua metrik di atas dalam satu respons

Numerik

Hanya value_count yang mendukung bidang keyword. Semua metrik lain memerlukan bidang numerik.

Output: Nilai DOUBLE yang dihitung dari bidang yang ditentukan.

Agregasi terms

Menghitung nilai yang dideduplikasi dalam bidang keyword. Mendukung sub-agregasi bersarang.

Parameter

Deskripsi

Default

field

Bidang agregasi. Hanya bidang keyword yang didukung.

Wajib

size

Jumlah bucket yang dikembalikan. Nilai valid: 1 hingga 65535.

10

order

Urutan pengurutan. {"_count": "desc"} mengurutkan berdasarkan jumlah dokumen (default). {"_key": "asc"} mengurutkan secara alfabetis berdasarkan nilai bidang.

{"_count": "desc"}

min_doc_count

Jumlah dokumen minimum agar bucket disertakan dalam hasil.

1

include

Pola regex atau nilai eksak yang harus dicocokkan oleh kunci bucket. Untuk bidang string, pencocokan regex didukung. Untuk bidang array, pencocokan eksak diperlukan.

--

exclude

Pola regex atau nilai eksak yang tidak boleh dicocokkan oleh kunci bucket. Jika include dan exclude keduanya ditentukan, include diperiksa terlebih dahulu, lalu exclude.

--

Output: Objek JSON dengan buckets. Setiap bucket berisi key (nilai bidang) dan doc_count (jumlah dokumen):

{
    "aggregations": {
        "Per_Investor_Freq": {
            "buckets": [
                {"doc_count": 2, "key": "Jay"},
                {"doc_count": 1, "key": "Mila"}
            ]
        }
    }
}

Contoh:

{"aggs": {"Per_Investor_Freq": {"terms": {"field": "investor"}}}}

Agregasi filter

Menyaring hasil kueri dengan pernyataan kueri dan menghitung jumlah dokumen yang cocok. Mendukung sub-agregasi bersarang.

Output: Jumlah dokumen (doc_count) yang cocok dengan kondisi filter.

Contoh agregasi

Contoh berikut menggunakan dataset perdagangan saham.

Langkah 1: 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"}}}}'

Langkah 2: Tambahkan dokumen

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"}'

Langkah 3: Jalankan kueri

sum -- Total jumlah pembelian untuk seorang investor

TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Sum":{"sum":{"field":"purchase_price"}}}}'
{"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Sum":{"value":212.2}}}

max -- Harga pembelian tertinggi untuk seorang investor

TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Max":{"max":{"field":"purchase_price"}}}}'
{"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Max":{"value":111.1}}}

avg -- Harga pembelian rata-rata untuk seorang investor

TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Avg":{"avg":{"field":"purchase_price"}}}}'
{"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Avg":{"value":106.1}}}

std_deviation -- Standar deviasi harga pembelian

TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Std_Deviation":{"std_deviation":{"field":"purchase_price"}}}}'
{"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Std_Deviation":{"value":5.0}}}

extended_stats -- Semua statistik sekaligus

TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Extended_Stats":{"extended_stats":{"field":"purchase_price"}}}}'
{"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 -- Investor dengan minimal 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"}}}}}'
{"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":3}},"aggregations":{"Per_Investor_Freq":{"buckets":[{"key":"Jay","doc_count":2}]}}}

Agregasi terms bersarang -- Jumlah transaksi per saham dengan harga rata-rata

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"}}}}}}'
{"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 -- Filter berdasarkan investor dengan statistik lengkap

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"}}}}}}'
{"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}}}}