Selain mengindeks teks, indeks penelusuran menyediakan cara efisien untuk mengindeks angka. Fungsi ini terutama digunakan untuk meningkatkan kualitas kueri penelusuran teks lengkap dengan kondisi pada kolom numerik. Halaman ini menjelaskan pengindeksan angka untuk kueri kesetaraan dan ketidaksetaraan, serta pengindeksan array angka.
Tokenisasi angka
Tokenizer angka digunakan untuk menghasilkan serangkaian token yang digunakan untuk mempercepat penelusuran perbandingan numerik.
Gunakan fungsi
TOKENIZE_NUMBER
untuk membuat indeks numerik. TOKENIZE_NUMBER mendukung INT64,
FLOAT32, FLOAT64, atau ARRAY dari jenis ini.
Untuk PostgreSQL, gunakan fungsi
spanner.tokenize_number
untuk membuat indeks numerik. spanner.tokenize_number hanya mendukung
jenis bigint.
Nomor indeks untuk kueri kesetaraan dan ketidaksetaraan
Spanner mendukung pengindeksan angka untuk kesetaraan dan ketidaksetaraan.
Penelusuran kesetaraan cocok dengan sebuah angka. Penelusuran rentang dan ketidaksetaraan cocok dengan sebuah angka dalam rentang tertentu. Anda menetapkan nilai ini di parameter
TOKENIZE_NUMBER
comparison_type:
- Kesetaraan:
comparison_type=>"equality" - Ketidaksetaraan dan kesetaraan:
comparison_type=>"all"
Dalam kedua kasus tersebut, angka asli (baik bilangan bulat maupun floating point) akan menjalani proses tokenisasi, yang secara konseptual mirip dengan tokenisasi teks lengkap. Tindakan ini menghasilkan serangkaian token yang kemudian dapat digunakan kueri untuk menemukan dokumen yang cocok dengan kondisi angka.
Pengindeksan kesetaraan hanya menghasilkan satu token, yang merepresentasikan angka tersebut. Mode
ini direkomendasikan jika kueri hanya memiliki kondisi dalam bentuk field = @p
dalam klausa WHERE.
Pengindeksan ketidaksetaraan dan kesetaraan dapat mempercepat kondisi yang lebih beragam dalam
klausa WHERE dari kueri. Ini mencakup field < @p, field <= @p, field > @p, field >= @p, field BETWEEN @p1 and @p2, dan field <> @p selain kondisi kesetaraan. Untuk menerapkan jenis pengindeksan ini, Spanner menghasilkan token dalam indeks penelusuran dasar.
Spanner dapat menghasilkan banyak token untuk setiap nomor yang diindeks,
bergantung pada parameter penyesuaian. Jumlah token bergantung pada parameter yang ditetapkan untuk TOKENIZE_NUMBER, seperti algorithm, min, max, dan granularity. Oleh karena itu, penting untuk mengevaluasi parameter penyesuaian dengan cermat guna memastikan keseimbangan yang tepat antara penyimpanan disk dan waktu pencarian.
Tokenisasi array
Selain nilai skalar,
TOKENIZE_NUMBER
mendukung tokenisasi array angka.
Jika TOKENIZE_NUMBER digunakan dengan kolom ARRAY, Anda harus
menentukan comparison_type=>"equality". Kueri rentang tidak didukung dengan array angka.
CREATE TABLE Albums (
AlbumId STRING(MAX) NOT NULL,
Ratings ARRAY<INT64>,
Ratings_Tokens TOKENLIST
AS (TOKENIZE_NUMBER(Ratings, comparison_type=>"equality")) HIDDEN
) PRIMARY KEY(AlbumId);
CREATE SEARCH INDEX AlbumsIndex ON Albums(Ratings_Tokens);
Kueri berikut menemukan semua album yang memiliki rating 1 atau 2:
SELECT AlbumId
FROM Albums
WHERE ARRAY_INCLUDES_ANY(Ratings, [1, 2])
Kueri berikut menemukan semua album yang diberi rating 1 dan 5:
SELECT AlbumId
FROM Albums
WHERE ARRAY_INCLUDES_ALL(Ratings, [1, 5])
Langkah berikutnya
- Pelajari tokenisasi dan tokenizer Spanner.
- Pelajari indeks penelusuran.
- Pelajari partisi indeks.