All Products
Search
Document Center

:bit_struct

Last Updated:Aug 22, 2026

Gunakan fungsi plugin ini dalam klausa filter untuk memfilter data, atau dalam klausa sort dengan fungsi yang mengembalikan nilai numerik untuk mengurutkan data. Bidang dokumen yang digunakan sebagai parameter fungsi harus dibuat sebagai indeks atau properti.

Fitur dan fungsi

1. Pengantar

bit_struct: Memisahkan setiap nilai bidang INT_ARRAY ke dalam segmen kustom berdasarkan posisi bit dan melakukan operasi tertentu pada segmen-segmen tersebut.

2. Sintaks

bit_struct(doc_field,"$struct_definition", operation,...)

3. Parameter

  • doc_field: Nama bidang bertipe INT_ARRAY.

  • $struct_definition: Memisahkan nilai int64 menjadi beberapa dimensi. Setiap dimensi didefinisikan oleh posisi bit awal dan akhir, dipisahkan dengan tanda hubung (-). Posisi bit diindeks dari nol dan dihitung dari bit paling signifikan. Rentang valid untuk posisi bit adalah 0 hingga 63. Anda dapat mendefinisikan beberapa dimensi dengan memisahkannya menggunakan koma (,). Setiap dimensi diberi nomor, dimulai dari 1. Misalnya, untuk memisahkan nilai int64 menjadi tiga dimensi—di mana bit 0–9 mewakili nilai pertama ($1), bit 10–48 mewakili nilai kedua ($2), dan bit 49–60 mewakili nilai ketiga ($3)—atur parameter ini menjadi "0-9,10-48,49-60".

  • operation: Mendefinisikan operasi yang akan dilakukan. Anda harus mendefinisikan minimal satu dan maksimal lima operasi. Setiap operasi diberi nomor yang berurutan setelah nomor terakhir yang digunakan dalam $struct_definition. Jika Anda mendefinisikan beberapa operasi, operasi berikutnya dapat menggunakan nilai kembali dari operasi sebelumnya dengan mereferensikan nomornya. Operasi yang tersedia adalah:

    • "equal,$m,$n": Memeriksa apakah nilai yang diwakili oleh $m sama dengan nilai yang diwakili oleh $n. Mengembalikan true jika sama, dan false jika tidak.

    • "overlap,$m,$n,$k,$p": Memeriksa apakah rentang yang didefinisikan oleh ($m, $n) tumpang tindih dengan rentang yang didefinisikan oleh ($k, $p) pada garis bilangan. Mengembalikan true jika tumpang tindih, dan false jika tidak.

    • "and,$m,$n,...": Mengembalikan hasil operasi logika AND (&&) pada $m, $n, dan seterusnya.

4. Nilai Kembali

Nilai int64. Fungsi ini mengembalikan indeks berbasis nol dari elemen pertama dalam doc_field yang operasi terakhirnya bernilai true. Jika tidak ada elemen dalam doc_field yang memenuhi operasi yang ditentukan, fungsi mengembalikan -1.

5. Catatan

  • Bidang yang bergantung pada parameter fungsi harus dibuat sebagai bidang properti.

Skenario penggunaan

Toko mana saja yang buka selama periode waktu tertentu? Asumsikan sebuah dokumen berisi bidang bernama open_time bertipe int64_array, di mana setiap nilai merepresentasikan periode jam operasional. 32 bit tinggi dari nilai int64 merepresentasikan waktu mulai, dan 32 bit rendah merepresentasikan waktu selesai. Untuk mencari toko yang buka dari pukul 14.00 hingga 15.30, Anda dapat mengonversi rentang waktu ini menjadi menit sejak awal hari (00.00). Misalnya, rentang waktu dari 14.00 hingga 15.30 direpresentasikan sebagai (840, 930). Klausa filter dalam kueri kemudian dapat ditulis sebagai berikut:

filter=bit_struct(open_time, "0-31,32-63","overlap,$1,$2,840,930")!=-1
  • Kueri untuk toko yang dapat melayani rombongan berjumlah Pmin hingga Pmax orang untuk makanan tertentu pada hari mendatang

Asumsikan sebuah dokumen berisi bidang int64_array bernama book_info. Dalam setiap nilai array ini, bit 0–7 merepresentasikan tanggal, bit 8–15 merepresentasikan jenis makanan, bit 16–41 merepresentasikan ukuran rombongan minimum, dan bit 42–63 merepresentasikan ukuran rombongan maksimum. Untuk mencari toko yang dapat melayani rombongan berjumlah 3 hingga 5 orang untuk makan malam (jenis makanan 3) besok (tanggal 1), Anda dapat menulis klausa filter sebagai berikut:

filter=bit_struct(book_info,"0-7,8-15,16-41,42-63",
"equal,$1,1","equal,$2,3","overlap,$3,$4,3,5","and,$5,$6,$7")!=-1
// Penjelasan
// $1 merepresentasikan nilai dari bit 0–7 book_info.
// $2 merepresentasikan nilai dari bit 8–15 book_info.
// $3 merepresentasikan nilai dari bit 16–41 book_info.
// $4 merepresentasikan nilai dari bit 42–63 book_info.
// $5 merepresentasikan nilai kembali dari operasi "equal,$1,1".
// $6 merepresentasikan nilai kembali dari operasi "equal,$2,3".
// $7 merepresentasikan nilai kembali dari operasi "overlap,$3,$4,3,5".
// Fungsi mengembalikan indeks array dalam book_info yang sesuai dengan pertama kali hasil logika AND dari nilai yang diwakili oleh $5, $6, dan $7 bernilai true.
  • Kueri untuk toko dengan Inventory > 10 antara pukul 14.00 dan 15.30, yang sesuai dengan interval (840, 930). Karena fungsi bit_struct mengembalikan indeks, Anda dapat menggunakannya bersama fungsi multi_attr untuk mengambil nilai dari bidang bertipe array lain pada indeks tersebut. Misalnya, Anda dapat menggunakan hal berikut dalam pernyataan kueri:

filter=multi_attr(store, bit_struct(dispatch_time,"0-31,32-63", "equal,$1,840", "equal,$2,930", "and,$3,$4"))>10
// Penjelasan
// dispatch_time adalah bidang INT64 multi-nilai dalam dokumen yang menyimpan waktu pengiriman pedagang. Konversi waktu tersebut menjadi periode yang diukur dalam menit sejak awal hari (00.00). Periode dari 14.00 hingga 15.30 direpresentasikan sebagai (840, 930).
// store adalah bidang int64_array di mana setiap nilai berkorespondensi dengan periode waktu dalam dispatch_time dan merepresentasikan tingkat inventaris untuk periode tersebut.

Membangun nilai int64_array

Contoh

Contoh ini menggunakan Python untuk membangun nilai int64 untuk periode waktu dari pukul 08.00 hingga 18.00.

# Waktu mulai 08.00, dalam menit
start=8*60

# Waktu selesai 18.00
end=18*60

# Gunakan 32 bit tinggi dari int64 untuk waktu mulai dan 32 bit rendah untuk waktu selesai.
# Pertama, bangun 32 bit tinggi.
start=start<<32
print("32 bit tinggi",start)#2061584302080

# Hasil akhir
result=start|end
print("Hasil",result)#2061584303160

Hasil: 2061584303160

Berikut ini contoh sederhana.

Asumsikan Anda ingin memeriksa apakah suatu array berisi nilai tertentu, dan nilai tersebut disimpan dalam 32 bit rendah suatu elemen. Anda dapat menulis klausa filter sebagai berikut:

bit_struct(type_arr,"0-31,32-63","equal,$2,40506")!=-1
// Penjelasan:
// "0-31,32-63": Ini adalah nilai tetap.
// "equal,$2,40506": Memeriksa apakah array berisi nilai 40506.