All Products
Search
Document Center

Simple Log Service:Gunakan fungsi pencarian untuk pencarian teks lengkap

Last Updated:Feb 27, 2026

Fungsi search() melakukan pencarian teks lengkap pada data log dalam pernyataan analitik SQL. Topik ini mencakup sintaksis, contoh penggunaan, batasan, praktik terbaik, dan FAQ.

Prasyarat

  • LogStore Jenis Penyimpanan Standar telah dibuat. Untuk informasi selengkapnya, lihat Manage a LogStore.

  • Data log telah dikumpulkan. Untuk informasi selengkapnya, lihat Data ingestion overview.

  • index telah dibuat dan mode scan dinonaktifkan.

Contoh

Gabungkan dengan predikat SQL

Gabungkan fungsi search() dengan predikat SQL standar menggunakan operator AND untuk pemfilteran yang lebih tepat.

-- search + operator perbandingan
* | SELECT * FROM log
  WHERE search('status: 200') AND request_time > 100

-- search + klausa IN
* | SELECT * FROM log
  WHERE search('request_method: GET') AND status IN (200, 301, 302)

-- search + LIKE
* | SELECT * FROM log
  WHERE search('status: 200') AND http_user_agent LIKE '%Chrome%'

-- search + BETWEEN
* | SELECT * FROM log
  WHERE search('request_method: POST') AND request_time BETWEEN 100 AND 500

-- search + kombinasi kondisi kompleks (OR tidak boleh menyertakan search)
* | SELECT * FROM log
  WHERE search('request_method: GET')
    AND (status = 200 OR status = 302)
    AND request_time > 50
  • Hanya operator AND yang dapat menghubungkan fungsi search() dengan predikat SQL lainnya.

  • Fungsi search() tidak boleh muncul di tingkat mana pun dalam ekspresi OR. Misalnya, search('error') OR status = 500 tidak diizinkan.

  • Operator OR diperbolehkan untuk kondisi predikat SQL lain yang tidak menyertakan fungsi search(). Misalnya, search('error') AND (status = 500 OR status = 502) diperbolehkan.

Skenario JOIN multi-tabel

Fungsi search() mendukung skenario JOIN multi-LogStore. Setiap subkueri dalam JOIN menerapkan kondisi filter search()-nya sendiri secara independen tanpa saling mengganggu.

Catatan

Setiap subkueri hanya boleh berisi satu fungsi search(). JOIN multi-tabel dapat berisi beberapa fungsi search() karena setiap fungsi search() tersebut termasuk dalam subkueri yang berbeda.

Data contoh

Contoh berikut menggunakan tabel orders (LogStore orders) dan tabel users (LogStore users).

Skema tabel orders (LogStore orders):

Field name

Field type

Description

order_id

long

Order ID

user_id

long

User ID, terkait dengan tabel users

status

text

Order status, seperti completed, pending, atau cancelled

amount

double

Jumlah pesanan

order_type

text

Order type, seperti normal atau vip

Skema tabel users (LogStore users):

Field name

Field type

Description

user_id

long

User ID, primary key

username

text

Username

region

text

Wilayah tempat pengguna berada, seperti hangzhou, shanghai, atau beijing

email

text

Email pengguna

age

long

Usia pengguna

INNER JOIN

Kueri pesanan yang telah selesai (status = completed) dengan pengguna yang sesuai di wilayah hangzhou.

* | SELECT o.order_id, o.status, o.amount, u.username, u.region
    FROM (
        SELECT * FROM orders.log
        WHERE search('status: completed')
    ) o
    JOIN (
        SELECT * FROM users.log
        WHERE search('region: hangzhou')
    ) u
    ON o.user_id = u.user_id
    ORDER BY o.order_id

LEFT JOIN

Kembalikan semua pesanan yang telah selesai dan cocokkan hanya dengan pengguna di wilayah shanghai. Pesanan tanpa pengguna yang cocok akan menampilkan null pada kolom terkait pengguna.

* | SELECT o.order_id, o.status, u.username, u.region
    FROM (
        SELECT * FROM orders.log
        WHERE search('status: completed')
    ) o
    LEFT JOIN (
        SELECT * FROM users.log
        WHERE search('region: shanghai')
    ) u
    ON o.user_id = u.user_id
    ORDER BY o.order_id

Self-join

Pada self-join di LogStore yang sama, terapkan kondisi kueri berbeda pada subkueri dengan alias berbeda.

Contoh berikut menggunakan tabel employees (LogStore employees) dengan skema sebagai berikut:

Field name

Field type

Description

employee_id

long

Employee ID

employee_name

text

Nama pegawai

department

text

Departemen, seperti engineering atau finance

level

text

Tingkat jabatan, seperti junior atau senior

manager_id

long

employee_id dari manajer

Kueri pegawai di departemen engineering beserta manajer tingkat senior mereka:

* | SELECT e.employee_name AS employee, e.department,
           m.employee_name AS manager, m.level AS manager_level
    FROM (
        SELECT * FROM employees.log
        WHERE search('department: engineering')
    ) e
    JOIN (
        SELECT * FROM employees.log
        WHERE search('level: senior')
    ) m
    ON e.manager_id = m.employee_id
    ORDER BY e.employee_name

Batasan

Batas

Deskripsi

Batasan instans tunggal

Setiap subkueri (pernyataan SELECT dasar) hanya boleh berisi satu fungsi search(). Untuk menerapkan beberapa kondisi kueri, gabungkan semuanya ke dalam satu panggilan fungsi search(). Contohnya, gunakan search('error AND timeout').

Batasan operator OR

Fungsi search() tidak dapat digabungkan dengan operator OR di tingkat SQL. Operator OR didukung di dalam fungsi search itu sendiri. Contohnya, search('error OR warning') diperbolehkan.

Batasan mode scan

Fungsi pencarian tidak didukung dalam mode scan.

Konflik input sintaksis kueri

Fungsi search() tidak didukung ketika input sintaksis kueri berisi kondisi filter aktual. Fungsi ini hanya diperbolehkan jika input sintaksis kueri kosong atau berupa *.

Jenis parameter

Parameter fungsi search harus berupa string literal. Nilai dinamis seperti referensi kolom, variabel, atau ekspresi fungsi tidak didukung.

Batasan penggunaan kombinasi

Skenario

Didukung

Contoh

Fungsi search tunggal

Didukung

WHERE search('error AND timeout')

search + AND + kondisi SQL

Didukung

WHERE search('error') AND status = 500

search + AND + (c1 OR c2)

Didukung

WHERE search('error') AND (status = 500 OR status = 502)

Operator OR digunakan di dalam search

Didukung

WHERE search('error OR warning')

search di setiap subkueri JOIN multi-tabel

Didukung

Setiap subkueri beroperasi secara independen, tanpa memengaruhi subkueri lainnya.

Beberapa fungsi search dalam subkueri yang sama

Tidak didukung

Tidak didukungWHERE search('error') AND search('timeout')

Sebagai gantinya, gunakan WHERE search('error AND timeout').

search + OR + kondisi SQL

Tidak didukung

Tidak didukungWHERE search('error') OR status = 500

Praktik terbaik

  • Gabungkan kondisi kueri: Gabungkan semua kondisi pencarian teks lengkap ke dalam satu panggilan fungsi search(). Jangan gunakan beberapa fungsi search() dalam subkueri yang sama.

  • Gunakan kueri spesifik bidang: Gunakan format field: value alih-alih pencarian teks lengkap umum untuk meningkatkan presisi dan performa kueri.

  • Gunakan tipe numerik: Untuk bidang bertipe long atau double, gunakan kueri rentang (field in [min max]) alih-alih pencocokan teks.

  • Gunakan jalur subfield untuk bidang JSON: Untuk bidang bertipe JSON, tentukan jalur subfield yang tepat seperti content.status untuk menghindari pencocokan kabur di tingkat bidang induk.

  • Gabungkan predikat SQL secara efektif: Fungsi search ideal untuk pencarian teks lengkap dan pemfilteran pushdown indeks. Predikat SQL cocok untuk perbandingan numerik yang tepat dan pemeriksaan kondisional. Gabungkan keduanya dengan operator AND untuk menyeimbangkan performa dan fleksibilitas.

FAQ

Error: key (xxx) is not config as key value config

Bidang yang dikueri tidak memiliki indeks bidang. Periksa konfigurasi indeks dan pastikan indeks bidang telah dibuat untuk bidang tersebut.

Error: Multiple search() functions in a single query are not supported

Beberapa fungsi search digunakan dalam subkueri yang sama. Gabungkan kondisi kueri ke dalam satu panggilan search. Misalnya, ubah search('error') AND search('timeout') menjadi search('error AND timeout').

Error: The search() function cannot be combined with OR operator

Fungsi search() dihubungkan dengan kondisi lain menggunakan operator OR. Pindahkan logika OR ke dalam fungsi search. Misalnya, ubah search('error') OR status = 500 menjadi search('error OR status: 500').

Error: The search() function is not supported in scan mode

Mode saat ini adalah mode scan, yang tidak mendukung fungsi search(). Alihkan ke mode indeks untuk menggunakan fungsi ini.