Gunakan metode CreateSearchIndex untuk membuat indeks pencarian pada tabel data. Satu tabel data dapat memiliki beberapa indeks pencarian. Saat membuat indeks pencarian, tambahkan bidang-bidang yang ingin Anda kueri ke dalam indeks tersebut. Anda juga dapat mengonfigurasi opsi lanjutan, seperti kunci routing kustom dan pengurutan awal.
Prasyarat
Inisialisasi klien Tablestore. Untuk informasi selengkapnya, lihat Initialize Tablestore Client.
Anda telah menyelesaikan pembuatan tabel data yang memenuhi kondisi berikut:
max versions harus bernilai 1.
time to live (TTL) bernilai -1, atau fitur pembaruan pada tabel dinonaktifkan.
Catatan
Saat membuat indeks pencarian, data type suatu bidang dalam indeks harus sesuai dengan tipe data bidang yang bersesuaian di tabel data.
Jika Anda ingin menetapkan TTL tertentu untuk indeks pencarian (nilai selain -1), Anda harus menonaktifkan fitur penulisan UpdateRow pada tabel data. TTL indeks pencarian harus kurang dari atau sama dengan TTL tabel data. Untuk informasi selengkapnya, lihat Lifecycle management.
Parameter
Saat membuat indeks pencarian, tentukan nama tabel (table_name), nama indeks pencarian (index_name), dan skema indeks (schema). Skema mencakup skema bidang (field_schemas), pengaturan indeks (index_setting), dan pengaturan pengurutan awal indeks (index_sort). Tabel berikut menjelaskan parameter-parameter tersebut.
Komponen | Deskripsi |
table_name | Nama tabel data. |
index_name | Nama indeks pencarian. |
field_schemas | Daftar objek field_schema. Setiap field_schema berisi parameter berikut:
|
index_setting | Pengaturan indeks, yang mencakup pengaturan routing_fields. routing_fields (Opsional): Bidang routing kustom. Anda dapat memilih beberapa kolom kunci primer sebagai bidang routing. Biasanya, Anda hanya perlu menetapkan satu bidang. Jika Anda menetapkan beberapa kunci routing, sistem akan menggabungkan nilai-nilainya menjadi satu nilai tunggal. |
index_sort | Pengaturan pengurutan awal indeks, yang mencakup pengaturan sorters. Jika tidak diatur, data akan diurutkan berdasarkan kunci primer secara default. Catatan Indeks yang berisi bidang Nested tidak mendukung indexSort. Tidak ada pengurutan awal yang dilakukan. sorters (Wajib): Metode pengurutan awal untuk indeks. Anda dapat mengurutkan berdasarkan kunci primer atau berdasarkan nilai bidang. Untuk informasi selengkapnya tentang pengurutan, lihat Sorting and pagination.
|
Contoh
Tentukan analyzer saat membuat indeks pencarian
Contoh berikut menunjukkan cara menentukan tokenizer saat membuat indeks pencarian. Indeks pencarian berisi enam bidang: k (Keyword), t (Text), g (Geopoint), ka (Keyword array), la (Long array), dan n (Nested). Bidang n memiliki tiga sub-bidang: nk (Keyword), nl (Long), dan nt (Text).
def create_search_index(client):
# A Keyword field. Create an index and enable statistical aggregation.
field_a = FieldSchema('k', FieldType.KEYWORD, index=True, enable_sort_and_agg=True)
# A Text field. Create an index and use single-word tokenization.
field_b = FieldSchema('t', FieldType.TEXT, index=True, analyzer=AnalyzerType.SINGLEWORD)
# A Text field. Create an index and use fuzzy tokenization.
#field_b = FieldSchema('t', FieldType.TEXT, index=True, analyzer=AnalyzerType.FUZZY,analyzer_parameter=FuzzyAnalyzerParameter(1, 6))
# A Text field. Create an index and use a custom separator (a comma) for tokenization.
#field_b = FieldSchema('t', FieldType.TEXT, index=True, analyzer=AnalyzerType.SPLIT, analyzer_parameter = SplitAnalyzerParameter(","))
# A Geopoint field. Create an index.
field_c = FieldSchema('g', FieldType.GEOPOINT, index=True)
# A Keyword array field. Create an index.
field_d = FieldSchema('ka', FieldType.KEYWORD, index=True, is_array=True)
# A Long array field. Create an index.
field_e = FieldSchema('la', FieldType.LONG, index=True, is_array=True)
# A Nested field that includes three sub-fields: nk (Keyword), nl (Long), and nt (Text).
field_n = FieldSchema('n', FieldType.NESTED, sub_field_schemas=[
FieldSchema('nk', FieldType.KEYWORD, index=True),
FieldSchema('nl', FieldType.LONG, index=True),
FieldSchema('nt', FieldType.TEXT, index=True),
])
fields = [field_a, field_b, field_c, field_d, field_e, field_n]
index_setting = IndexSetting(routing_fields=['PK1'])
index_sort = None # When a search index contains a Nested field, you cannot set index pre-sorting.
#index_sort = Sort(sorters=[PrimaryKeySort(SortOrder.ASC)])
index_meta = SearchIndexMeta(fields, index_setting=index_setting, index_sort=index_sort)
client.create_search_index('<TABLE_NAME>', '<SEARCH_INDEX_NAME>', index_meta)Buat indeks pencarian dan konfigurasikan bidang vektor
Contoh berikut menunjukkan cara membuat indeks pencarian. Indeks pencarian berisi tiga bidang: col_keyword (Keyword), col_long (Long), dan col_vector (Vector). Algoritma pengukuran jarak untuk bidang vektor adalah dot product.
def create_search_index(client):
index_meta = SearchIndexMeta([
FieldSchema('col_keyword', FieldType.KEYWORD, index=True, enable_sort_and_agg=True), # String type
FieldSchema('col_long', FieldType.LONG, index=True), # Numeric type
FieldSchema("col_vector", FieldType.VECTOR, # Vector type
vector_options=VectorOptions(
data_type=VectorDataType.VD_FLOAT_32,
dimension=4, # The vector dimension is 4, and the similarity algorithm is dot product.
metric_type=VectorMetricType.VM_DOT_PRODUCT
)),
])
client.create_search_index(table_name, index_name, index_meta)Aktifkan summary dan highlighting saat membuat indeks pencarian
Contoh berikut menunjukkan cara mengaktifkan fitur summary dan highlighting saat membuat indeks pencarian. Indeks pencarian berisi tiga bidang: k (Keyword), t (Text), dan n (Nested). Bidang n memiliki tiga sub-bidang: nk (Keyword), nl (Long), dan nt (Text). Fitur summary dan highlighting diaktifkan untuk bidang t dan sub-bidang nt dari bidang n.
def create_search_index0905(client):
# A Keyword field. Create an index and enable statistical aggregation.
field_a = FieldSchema('k', FieldType.KEYWORD, index=True, enable_sort_and_agg=True)
# A Text field. Create an index, use single-word tokenization, and enable summary and highlighting for the field.
field_b = FieldSchema('t', FieldType.TEXT, index=True, analyzer=AnalyzerType.SINGLEWORD,
enable_highlighting=True)
# A Nested field that includes three sub-fields: nk (Keyword), nl (Long), and nt (Text). The summary and highlighting feature is enabled for the nt sub-column.
field_n = FieldSchema('n', FieldType.NESTED, sub_field_schemas=[
FieldSchema('nk', FieldType.KEYWORD, index=True),
FieldSchema('nl', FieldType.LONG, index=True),
FieldSchema('nt', FieldType.TEXT, index=True, enable_highlighting=True),
])
fields = [field_a, field_b, field_n]
index_setting = IndexSetting(routing_fields=['id'])
index_sort = None # When a search index contains a Nested field, you cannot set index pre-sorting.
# index_sort = Sort(sorters=[PrimaryKeySort(SortOrder.ASC)])
index_meta = SearchIndexMeta(fields, index_setting=index_setting, index_sort=index_sort)
client.create_search_index('pythontest', 'pythontest_0905', index_meta)FAQ
Differences between range queries using the GetRange and Search operations
Data cannot be found using the Search operation of a search index
Does Tablestore support queries similar to IN and BETWEEN...AND in relational databases?
The "field:xx must enable enable_sort_and_agg" error occurs when you use a search index
Referensi
Setelah membuat indeks pencarian, Anda dapat melakukan kueri data multidimensi menggunakan berbagai jenis kueri, seperti term query, terms query, match all query, match query, match phrase query, prefix query, range query, wildcard query, geo query, Boolean query, vector search, nested query, dan column existence query.
Saat mengkueri data, Anda juga dapat melakukan operasi sorting and pagination, highlighting, atau collapse (deduplication) pada set hasil.
Setelah membuat indeks pencarian, Anda dapat melakukan berbagai operasi manajemen. Operasi tersebut meliputi lifecycle management, dynamically modifying the schema, listing search indexes, querying search index descriptions, dan deleting a search index.
Untuk melakukan analitik data, seperti mencari nilai maksimum atau minimum, menghitung jumlah, atau menghitung jumlah baris, Anda dapat menggunakan fitur statistical aggregation atau fitur SQL query.
Untuk mengekspor data secara cepat ketika urutan seluruh set hasil tidak penting, Anda dapat menggunakan fitur parallel scan.