Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
Halaman ini menjelaskan apa yang dimaksud dengan penelusuran teks lengkap dan cara kerjanya.
Penelusuran teks lengkap memungkinkan Anda membuat aplikasi yang dapat menelusuri tabel untuk menemukan kata, frasa, atau angka, bukan hanya menelusuri kecocokan persis di kolom terstruktur. Penelusuran teks lengkap menampilkan data yang di-commit dan konsisten secara transaksional terbaru ke aplikasi Anda. Kemampuan penelusuran teks lengkap Spanner juga mencakup koreksi ejaan, mengotomatiskan deteksi bahasa input penelusuran, dan memberi peringkat hasil penelusuran.
Spanner otomatis memperluas penelusuran teks untuk menyertakan pencocokan kata yang mendekati.
Anda harus membuat indeks penelusuran pada kolom yang ingin Anda sediakan
untuk penelusuran teks lengkap. Spanner menganalisis data dalam kolom tersebut untuk mengidentifikasi setiap kata yang akan ditambahkan ke indeks penelusuran.
Spanner memperbarui indeks penelusuran dengan data baru atau yang diubah segera setelah
data tersebut di-commit dalam database.
Jenis penelusuran teks lengkap
Penelusuran teks dasar: Menelusuri konten menggunakan seluruh atau sebagian kata atau frasa untuk menerima hasil yang andal. Contoh predikat kueri:
Mencocokkan semua kata [tricolor rat terrier]
Kata atau frasa persis ["rat terrier"]
Salah satu kata berikut [miniatur OR standar]
Kata dalam jarak dekat [world AROUND(3) cup]
Substring [start*]
Penelusuran numerik: Melakukan penelusuran kesetaraan dan ketidaksetaraan numerik.
Penelusuran kesamaan cocok dengan angka. Penelusuran rentang dan ketidaksetaraan mencocokkan
angka dalam rentang tertentu.
Penelusuran berbasis n-gram: Mencocokkan kata-kata dengan variasi ejaan, termasuk kata benda dan nama diri. Jenis penelusuran ini juga membantu mencocokkan teks kueri dengan nama yang salah eja, nama dengan ejaan alternatif, dan teks dengan variasi ejaan lainnya.
Penelusuran Soundex: Mencocokkan kata-kata yang terdengar serupa.
Fitur penelusuran teks lengkap
Penelusuran teks lengkap Spanner memiliki fitur berikut:
Hasil penelusuran yang diberi peringkat: Menghitung skor untuk mengukur seberapa cocok kueri dengan dokumen (misalnya, memberikan bobot yang lebih besar untuk column_A). Gunakan
ekspresi SQL untuk menyesuaikan peringkat.
Cuplikan: Menyoroti teks yang cocok dalam hasil penelusuran.
Dukungan global: Mendukung tokenisasi secara otomatis dalam berbagai bahasa, termasuk segmentasi CJK. Penentuan bahasa secara manual memungkinkan Anda melakukan penyesuaian tambahan.
Tata kelola: Menemukan setiap kemunculan kata tertentu.
Koreksi ejaan: Secara otomatis mengoreksi kata yang salah eja dalam kueri agar cocok dengan kata yang ejaannya benar dalam penyimpanan. Misalnya, jika pengguna menelusuri "girafe", penelusuran akan menemukan dokumen dengan "giraffe".
Penambahan sinonim kontekstual, termasuk kata henti: Secara otomatis menambahkan sinonim yang relevan secara kontekstual untuk meningkatkan ingatan. Misalnya, "rumah" cocok dengan "rumah ini" dan "gambar kucing" cocok dengan "gambar anak kucing".
Terjemahan angka kontekstual ke dan dari teks: Mencocokkan versi tekstual angka dengan representasi numerik dan sebaliknya. Misalnya, "lima kucing" cocok dengan "5 kucing".
Konversi jamak otomatis: Mencocokkan "cat" dengan "cats".
Konsep penelusuran teks lengkap
Penelusuran teks lengkap memiliki konsep utama berikut:
Dokumen mengacu pada data yang dapat ditelusuri dalam baris tertentu.
Token mengacu pada setiap kata dalam dokumen yang disimpan dalam indeks penelusuran.
Proses tokenisasi membagi dokumen menjadi token.
Tokenizer adalah fungsi SQL yang digunakan untuk tokenisasi.
Contoh kasus penggunaan untuk penelusuran teks lengkap
Untuk memahami penelusuran teks lengkap, mari kita lihat aplikasi yang menggunakan database untuk menyimpan lagu setiap penyanyi. Setiap baris adalah satu lagu. Setiap
lagu berisi kolom seperti judul, lirik, penyanyi, dan album. Aplikasi ini menggunakan penelusuran teks lengkap untuk memungkinkan pengguna menelusuri lagu menggunakan kueri bahasa alami:
Penelusuran mendukung kueri yang menggunakan operator OR, seperti Prince OR
Camille. Aplikasi dapat langsung memasukkan input pengguna akhir dari kotak penelusuran ke fungsi SQL
SEARCH (menggunakan sintaksis rquery). Untuk mengetahui informasi selengkapnya, lihat Membuat kueri indeks penelusuran.
Spanner menggunakan indeks penelusuran untuk mencari dokumen yang cocok di berbagai kolom. Misalnya, aplikasi dapat mengeluarkan kueri untuk menelusuri "cry" di judul, dengan "so cold" di lirik, dan "Prince" sebagai penyanyi.
Penggunaan lain untuk indeks penelusuran
Indeks penelusuran memiliki berbagai kegunaan selain penelusuran teks lengkap, seperti
berikut:
Mengindeks elemen dalam kolom array. Pertimbangkan aplikasi yang menggunakan kolom array untuk menyimpan tag yang terkait dengan item. Dengan indeks penelusuran, aplikasi dapat secara efisien mencari baris yang berisi tag tertentu. Untuk mengetahui informasi selengkapnya, lihat Tokenisasi array.
Menemukan data yang berada di persimpangan sekumpulan kondisi kueri. Misalnya, Anda dapat menggunakan serangkaian atribut arbitrer
(warna, ukuran, merek, rating, dan sebagainya) untuk menelusuri produk dalam
katalog.
Menggunakan kondisi penelusuran numerik, sendiri atau bersama dengan kondisi teks lengkap. Beberapa contoh saat indeks penelusuran berguna untuk penelusuran numerik:
Jika digabungkan dengan aplikasi teks lengkap. Misalnya, untuk menemukan email dengan subjek Gambar dan ukuran lebih besar dari 1 MB.
Jika merupakan bagian dari irisan kondisi yang dijelaskan sebelumnya.
Misalnya, untuk menemukan produk yang color = "yellow" AND size = 14 AND
rating >= 4.5.
Saat menelusuri persimpangan kolom numerik. Misalnya, pertimbangkan tabel yang menyimpan waktu mulai dan akhir acara. Indeks penelusuran dapat secara efisien menerapkan kueri yang mencari peristiwa yang terjadi pada waktu tertentu: start_time <= @p AND
end_time > @p.
Untuk mengetahui informasi selengkapnya, lihat
Indeks numerik.
Langkah-langkah penelusuran teks lengkap
Di Spanner, penelusuran teks lengkap memerlukan langkah-langkah berikut:
Lakukan tokenisasi dokumen menggunakan fungsi tokenisasi Spanner, seperti
TOKENIZE_SUBSTRING.
Untuk mengetahui informasi selengkapnya, lihat
Tokenisasi.
Buat indeks penelusuran untuk menyimpan token menggunakan pernyataan DDL CREATE SEARCH
INDEX. Untuk mengetahui informasi selengkapnya, lihat Mengindeks
penelusuran.
Buat kueri dokumen dalam indeks penelusuran menggunakan fungsi Spanner
SEARCH. Untuk mengetahui informasi selengkapnya, lihat Ringkasan
kueri.
Tidak ada biaya tambahan dari Spanner saat Anda menggunakan penelusuran teks lengkap, meskipun penerapan penelusuran teks lengkap meningkatkan biaya karena kebutuhan akan resource komputasi dan penyimpanan tambahan.
Untuk mengetahui informasi selengkapnya, lihat Harga Spanner.
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Sulit dipahami","hardToUnderstand","thumb-down"],["Informasi atau kode contoh salah","incorrectInformationOrSampleCode","thumb-down"],["Informasi/contoh yang saya butuhkan tidak ada","missingTheInformationSamplesINeed","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 2025-08-11 UTC."],[],[],null,["# Full-text search overview\n\n| **Note:** This feature is available with the Spanner Enterprise edition and Enterprise Plus edition. For more information, see the [Spanner editions overview](/spanner/docs/editions-overview).\n\n\u003cbr /\u003e\n\nThis page describes what full-text search is and how it works.\n\nA full-text search lets you build an application that can search a table to find\nwords, phrases, or numbers, instead of just searching for exact matches in\nstructured fields. Full-text searches return the latest\ntransactionally-consistent committed data to your application. Spanner\nfull-text search capabilities also include making spelling corrections,\nautomating language detection of search input, and ranking search results.\nSpanner automatically expands text searches to include\napproximate word matching.\n\nYou need to create a search index on any columns that you want to make available\nfor full-text searches. Spanner analyzes the\ndata in those columns to identify individual words to add to the search index.\nSpanner updates the search index with new or modified data as soon as\nit's committed in the database.\n\nTypes of full-text search\n-------------------------\n\n- **Basic text search** : Searches for content using the entire or part of a word or phrase to reliably receive results. Example query predicates:\n - Matching all words \\[tricolor rat terrier\\]\n - Exact word or phrases \\[\"rat terrier\"\\]\n - Any of these words \\[miniature OR standard\\]\n - Word within close proximity \\[world AROUND(3) cup\\]\n - Substring \\[start\\*\\]\n- **Numeric search**: Performs numeric equality and inequality searches. Equality searches match a number. Range and inequality searches match a number within a specific range.\n- **n-gram-based search**: Matches words with spelling variations, including proper nouns and names. This type of search also helps to match query text with misspelled names, names with alternate spellings, and text with other spelling variations.\n- **Soundex searches**: Matches similar-sounding words.\n\nFull-text search features\n-------------------------\n\nSpanner full-text search has the following features:\n\n- **Ranked search results**: Computes a score to gauge how well a query matches a document (for example, giving a heavier weight for column_A). Use SQL expressions to customize ranking.\n- **Snippets**: Highlights the matching text in the search result.\n- **Global support** : Automatically supports tokenization in different languages, including [CJK](https://en.wikipedia.org/wiki/CJK_characters) segmentation. Manual specification of language lets you perform additional fine-tuning.\n- **Governance**: Finds every occurrence of specific words.\n- **Spelling correction**: Automatically corrects misspelled words in queries to match the correctly-spelled word in storage. For example, if the user searches for \"girafe\", the search finds documents with \"giraffe\".\n- **Contextual synonym addition, including stop words**: Automatically adds contextually-relevant synonyms to increase recall. For example, \"the house\" matches \"this house\" and \"cat picture\" matches \"kitty picture\".\n- **Contextual number translation to and from text**: Matches the textual version of a number to the numeric representation and vice-versa. For example, \"five cats\" matches \"5 cats\".\n- **Automatic plural conversion**: Matches \"cat\" to \"cats\".\n\nFull-text search concepts\n-------------------------\n\nFull-text search has the following key concepts:\n\n- A *document* refers to the searchable data in a given row.\n- A *token* refers to each word of a document that's stored in a search index.\n- A *tokenization* process splits a document into tokens.\n- A *tokenizer* is a SQL function used for tokenization.\n- An *inverted index* stores tokens. Use SQL queries to search the inverted index.\n\nUse case example for full-text search\n-------------------------------------\n\nTo understand full-text search, let's take a look at an application that\nuses a database to store songs for each singer. Each row is a single song. Each\nsong contains columns like title, lyrics, singer, and album. The application\nuses full-text search to let a user search for a song using natural language\nqueries:\n\n- The search supports queries that use the `OR` operator, like `Prince OR\n Camille`. Applications can directly feed the end user input from the search box into the SQL [`SEARCH`](/spanner/docs/full-text-search/query-overview#query_a_search_index) function (using the rquery syntax). For more information, see [Query a\n search\n index](/spanner/docs/full-text-search/query-overview#query_a_search_index).\n- Spanner uses search indexes to look for matching documents across different fields. For example, an application can issue a query to search for \"cry\" in the title, with \"so cold\" in the lyrics, and \"Prince\" as the singer.\n\nOther uses for search indexes\n-----------------------------\n\nSearch indexes have a variety of uses in addition to full-text search, such as\nthe following:\n\n- Indexing elements in array columns. Consider an application that uses an\n array column to store tags associated with an item. With search indexes, the\n application can efficiently look up rows containing a specific tag. For more\n information, see\n [Array tokenization](/spanner/docs/full-text-search/numeric-indexes#array-tokenization).\n\n \u003cbr /\u003e\n\n- Finding data that resides in the intersection of a set\n of query conditions. For example, you can use an arbitrary set of attributes\n (color, size, brand, rating, and so on) to search for a product in a\n catalog.\n\n- Using numeric search conditions, alone or in combination with full-text\n conditions. Some examples for when a search index is useful for numeric\n searches:\n\n - When it's combined with a full-text application. For example, to find an email with the subject **Picture** and size greater than 1 MB.\n - When it's part of an intersection of conditions described previously. For example, to find products where `color = \"yellow\" AND size = 14 AND\n rating \u003e= 4.5`.\n - When searching for the intersection of numeric columns. For example, consider a table storing event start and end times. Search indexes can efficiently implement a query that looks for events that took place at a particular point in time: `start_time \u003c= @p AND\n end_time \u003e @p`.\n\n For more information, see\n [Numeric indexes](/spanner/docs/full-text-search/numeric-indexes).\n\nFull-text search steps\n----------------------\n\nIn Spanner, full-text search requires the following steps:\n\n1. Tokenize a document using the Spanner tokenizer functions, such as [`TOKENIZE_SUBSTRING`](/spanner/docs/reference/standard-sql/search_functions#tokenize_substring). For more information, see [Tokenization](/spanner/docs/full-text-search/tokenization).\n2. Create a search index to hold the tokens using the [`CREATE SEARCH\n INDEX`](/spanner/docs/reference/standard-sql/data-definition-language#create-search-index) DDL statement. For more information, see [Search\n indexes](/spanner/docs/full-text-search/search-indexes).\n3. Query documents in the search index using the Spanner [`SEARCH`](/spanner/docs/reference/standard-sql/search_functions#search_fulltext) function. For more information, see [Query\n overview](/spanner/docs/full-text-search/query-overview).\n4. Rank the results of the query using the Spanner [`SCORE`](/spanner/docs/reference/standard-sql/search_functions#score) function. For more information, see [Rank search\n results](/spanner/docs/full-text-search/ranked-search).\n\nLimitations\n-----------\n\n- Full-text search doesn't support [Assured Workloads](/assured-workloads/docs/overview).\n\nPricing\n-------\n\nThere are no additional charges from Spanner when you use\nfull-text search, although the implementation of full-text search\nincreases costs due to the need for additional compute and storage resources.\n\nFor more information, see [Spanner pricing](/spanner/pricing).\n\nWhat's next\n-----------\n\n- Learn about [tokenization and Spanner tokenizers](/spanner/docs/full-text-search/tokenization).\n- Learn about [search indexes](/spanner/docs/full-text-search/search-indexes).\n- Learn about [full-text search queries](/spanner/docs/full-text-search/query-overview)."]]