Selain mengindeks teks, indeks penelusuran menyediakan cara yang efisien untuk mengindeks angka. Fungsi ini terutama digunakan untuk meningkatkan kueri penelusuran teks lengkap dengan kondisi pada kolom numerik. Halaman ini menjelaskan pengindeksan angka untuk kueri kesetaraan dan ketidaksetaraan, serta pengindeksan array angka.
Membuat token angka
Anda menggunakan fungsi TOKENIZE_NUMBER
untuk membuat indeks numerik. Untuk mengetahui detailnya,
lihat TOKENIZE_NUMBER
.
Nomor indeks untuk kueri kesetaraan dan ketidaksetaraan
Spanner mendukung angka pengindeksan untuk kesetaraan dan ketidaksetaraan.
Penelusuran kesetaraan cocok dengan angka. Penelusuran rentang dan ketidaksetaraan cocok dengan angka
dalam rentang tertentu. Anda menetapkan nilai ini di
parameter comparison_type
TOKENIZE_NUMBER
:
- Persamaan:
comparison_type=>"equality"
- Ketidaksetaraan dan kesetaraan:
comparison_type=>"all"
Dalam kedua kasus tersebut, angka asli (baik bilangan bulat maupun floating point) akan melalui proses tokenisasi, yang secara konseptual mirip dengan tokenisasi teks lengkap. Fungsi ini menghasilkan kumpulan token yang kemudian dapat digunakan kueri untuk menemukan dokumen yang cocok dengan kondisi angka.
Pengindeksan persamaan hanya menghasilkan satu token, yang mewakili angka. Mode
ini direkomendasikan jika kueri hanya memiliki kondisi dalam bentuk field = @p
dalam klausa WHERE
.
Pengindeksan ketidaksetaraan dan kesetaraan dapat mempercepat berbagai kondisi dalam
klausa WHERE
kueri. Hal 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 di indeks penelusuran yang mendasarinya.
Spanner dapat menghasilkan banyak token untuk setiap angka 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 untuk memastikan keseimbangan yang sesuai antara penyimpanan disk dan waktu pencarian.
Tokenisasi array
Selain nilai skalar, TOKENIZE_NUMBER
mendukung tokenisasi
array angka.
Saat TOKENIZE_NUMBER
digunakan dengan kolom ARRAY
, Anda harus menentukan comparison_type=>"equality"
. Kueri rentang tidak didukung dengan
array angka.
Misalnya, perhatikan skema berikut:
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 selanjutnya
- Pelajari tokenisasi dan tokenizer Spanner.
- Pelajari indeks penelusuran.
- Pelajari partisi indeks.