Saat menggunakan indeks pencarian untuk mengquery data, Anda dapat menerapkan metode pengurutan yang telah ditentukan sebelumnya atau menentukan metode sendiri. Dengan cara ini, baris-baris yang memenuhi kondisi query akan dikembalikan sesuai dengan urutan yang telah ditentukan. Jika respons mencakup banyak baris, Anda dapat menemukan data yang diperlukan dengan mengonfigurasi parameter limit dan offset atau menggunakan token.
Skenario
Kategori | Metode | Fitur | Skenario |
Pengurutan | Tentukan metode pengurutan saat membuat indeks pencarian | Secara default, data dalam indeks pencarian diurutkan berdasarkan pengaturan pra-pengurutan yang ditentukan oleh parameter IndexSort. Pengaturan ini menentukan urutan default hasil query. | |
Tentukan metode pengurutan saat mengquery data | Pengurutan berdasarkan skor relevansi kata kunci berbasis BM25 (ScoreSort) | Gunakan ScoreSort untuk mengurutkan hasil query berdasarkan skor relevansi kata kunci berbasis BM25. Metode ini cocok untuk skenario seperti pencarian teks lengkap. | |
Gunakan PrimaryKeySort untuk mengurutkan hasil query berdasarkan nilai kunci utama. Metode ini cocok untuk skenario di mana Anda ingin mengurutkan data berdasarkan pengenal unik. | |||
Pengurutan berdasarkan nilai satu atau lebih kolom (FieldSort) | Gunakan FieldSort untuk mengurutkan hasil query berdasarkan nilai satu atau lebih kolom. Metode ini cocok untuk skenario seperti e-commerce dan jejaring sosial. | ||
Gunakan GeoDistanceSort untuk mengurutkan hasil query berdasarkan jarak dari lokasi tertentu. Metode ini cocok untuk industri seperti pemetaan dan logistik. | |||
Paging | Tentukan metode paging saat mengquery data | Jika jumlah baris dalam respons kurang dari 100.000, gunakan metode ini untuk melompat ke halaman tertentu. | |
Dengan fitur ini, data dikembalikan halaman demi halaman dan hanya mendukung paging mundur. Untuk paging maju, simpan cache dan gunakan token sebelumnya karena token valid selama query. |
Pra-pengurutan indeks
Secara default, data dalam indeks pencarian diurutkan berdasarkan pengaturan pra-pengurutan yang ditentukan oleh parameter IndexSort. Saat menggunakan indeks pencarian untuk mengquery data, pengaturan pra-pengurutan menentukan urutan default hasil yang dikembalikan.
Saat membuat indeks pencarian, Anda dapat menentukan pengaturan pra-pengurutan dengan mengonfigurasi parameter IndexSort. Jika tidak ditentukan, data diurutkan berdasarkan nilai kunci utama.
Anda dapat menentukan PrimaryKeySort atau FieldSort sebagai metode pra-pengurutan untuk indeks pencarian. PrimaryKeySort mengurutkan data berdasarkan nilai kunci utama, sedangkan FieldSort mengurutkan data berdasarkan nilai field.
Indeks pencarian yang berisi bidang Nested tidak mendukung pra-pengurutan indeks.
Untuk memodifikasi pengaturan parameter IndexSort pada indeks pencarian yang ada, modifikasi skema indeks pencarian secara dinamis. Lihat Modifikasi skema indeks pencarian secara dinamis.
Tentukan metode pengurutan saat mengquery data
Pengurutan hanya dapat dilakukan untuk bidang dengan parameter enable_sort_and_agg disetel ke true.
Anda dapat menentukan metode pengurutan untuk setiap query. Query berbasis indeks pencarian mendukung beberapa metode pengurutan, yang dapat digunakan berdasarkan prioritas.
ScoreSort
Gunakan ScoreSort untuk mengurutkan hasil query berdasarkan skor relevansi kata kunci berbasis BM25. Metode ini cocok untuk pencarian teks lengkap.
Sebelum menggunakan ScoreSort, konfigurasikan parameternya. Jika tidak, hasil query akan diurutkan berdasarkan pengaturan pra-pengurutan IndexSort.
Bidang tipe FuzzyKeyword tidak digunakan untuk pengurutan, dan pengaturan bobot tidak berlaku untuk bidang tersebut.
'sort' => array(
array(
'score_sort' => array(
'order' => SortOrderConst::SORT_ORDER_DESC
)
),
)PrimaryKeySort
Gunakan PrimaryKeySort untuk mengurutkan hasil query berdasarkan nilai kunci utama.
'sort' => array(
array(
'pk_sort' => array(
'order' => SortOrderConst::SORT_ORDER_ASC
)
),
)FieldSort
Gunakan FieldSort untuk mengurutkan hasil query berdasarkan nilai satu atau lebih kolom tertentu.
'sort' => array(
array(
'field_sort' => array(
'field_name' => 'keyword',
'order' => SortOrderConst::SORT_ORDER_ASC,
'mode' => SortModeConst::SORT_MODE_AVG,
)
),
)GeoDistanceSort
Gunakan GeoDistanceSort untuk mengurutkan hasil query berdasarkan lokasi geografis.
'sort' => array(
array(
'geo_distance_sort' => array(
'field_name' => 'geo',
'order' => SortOrderConst::SORT_ORDER_ASC,
'distance_type' => GeoDistanceTypeConst::GEO_DISTANCE_PLANE,
'points' => array('0.6,0.6')
)
),
)Kombinasi beberapa metode pengurutan
Gabungkan beberapa metode pengurutan untuk menentukan urutan hasil query.
'sort' => array(
array(
'field_sort' => array(
'field_name' => 'keyword',
'order' => SortOrderConst::SORT_ORDER_ASC,
'mode' => SortModeConst::SORT_MODE_AVG,
)
),
array(
'pk_sort' => array(
'order' => SortOrderConst::SORT_ORDER_ASC
)
),
)Tentukan metode paging
Konfigurasikan parameter limit dan offset atau gunakan token untuk paging baris dalam respons.
Konfigurasikan parameter limit dan offset
Jika jumlah total baris dalam respons kurang dari 100.000, konfigurasikan parameter limit dan offset untuk paging. Jumlah nilai parameter limit dan offset tidak boleh melebihi 100.000, dengan nilai maksimum parameter limit sebesar 100.
Untuk meningkatkan nilai maksimum parameter limit, lihat Bagaimana cara meningkatkan nilai parameter limit menjadi 1000?
Jika tidak menentukan nilai untuk parameter limit dan offset, nilai default digunakan: 10 untuk limit dan 0 untuk offset.
$request = array(
'table_name' => 'php_sdk_test',
'index_name' => 'php_sdk_test_search_index',
'search_query' => array(
'offset' => 10,
'limit' => 10,
'get_total_count' => true,
'query' => array(
'query_type' => QueryTypeConst::MATCH_ALL_QUERY
),
'sort' => array(
array(
'field_sort' => array(
'field_name' => 'keyword',
'order' => SortOrderConst::SORT_ORDER_ASC
)
),
),
'token' => null,
),
'columns_to_get' => array(
'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED,
'return_names' => array('col1', 'col2')
)
);
$response = $otsClient->search($request);Gunakan token
Gunakan token untuk paging tanpa batasan kedalaman paging.
Jika Tablestore tidak dapat membaca semua data yang memenuhi kondisi query, Tablestore mengembalikan next_token. Gunakan next_token untuk melanjutkan pembacaan data berikutnya.
Secara default, hanya mendukung paging mundur saat menggunakan token. Namun, Anda dapat menyimpan cache dan menggunakan token sebelumnya untuk paging maju karena token valid selama query.
Saat menggunakan token, metode pengurutan sama dengan metode yang digunakan dalam permintaan sebelumnya. Tablestore mengurutkan data berdasarkan parameter IndexSort secara default atau berdasarkan metode yang Anda tentukan. Anda tidak dapat menentukan metode pengurutan atau mengonfigurasi parameter offset saat menggunakan token. Data dikembalikan halaman demi halaman secara berurutan, yang dapat menghasilkan query lambat.
Indeks pencarian yang berisi bidang tipe Nested tidak mendukung IndexSort. Jika Anda memerlukan paging dan menggunakan indeks pencarian yang berisi bidang tipe Nested, tentukan metode pengurutan dalam kondisi query untuk mengembalikan data dalam urutan yang ditentukan. Jika tidak, Tablestore tidak akan mengembalikan next_token ketika hanya sebagian data yang memenuhi kondisi query dikembalikan.
$request = array(
'table_name' => 'php_sdk_test',
'index_name' => 'php_sdk_test_search_index',
'search_query' => array(
'offset' => 0,
'limit' => 10,
'get_total_count' => true,
'query' => array(
'query_type' => QueryTypeConst::FUNCTION_SCORE_QUERY,
'query' => array(
'query' => array(
'query_type' => QueryTypeConst::TERM_QUERY,
'query' => array(
'field_name' => 'keyword',
'term' => 'keyword'
)
),
'field_value_factor' => array(
'field_name' => 'long'
)
)
),
'sort' => array(
array(
'score_sort' => array(
'order' => SortOrderConst::SORT_ORDER_DESC
)
),
)
),
'columns_to_get' => array(
'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED,
'return_names' => array('keyword', 'long')
)
);
$response = $otsClient->search($request);
print "total_hits: " . $response['total_hits'] . "\n";
print json_encode($response['rows'], JSON_PRETTY_PRINT);
while($response['next_token'] != null) {
$request['search_query']['token'] = $response['next_token'];
$request['search_query']['sort'] = null;// Jika next_token termasuk dalam respons, Anda tidak dapat menentukan metode pengurutan karena token mencakup informasi pengurutan.
$response = $otsClient->search($request);
print json_encode($response['rows'], JSON_PRETTY_PRINT);
}FAQ
Referensi
Saat menggunakan indeks pencarian untuk mengquery data, gunakan metode query berikut: term query, terms query, match all query, match query, match phrase query, prefix query, range query, wildcard query, Boolean query, geo query, nested query, dan exists query. Gunakan metode query yang berbeda untuk mengquery data dari berbagai dimensi sesuai kebutuhan bisnis Anda.
Untuk informasi tentang pengurutan dan paging, lihat Pengurutan dan Paging.
Untuk menciutkan set hasil berdasarkan kolom tertentu, gunakan fitur collapse (distinct). Lihat Collapse (distinct).
Untuk menganalisis data dalam tabel, seperti mendapatkan nilai ekstrem, jumlah, atau total jumlah baris, gunakan operasi agregasi atau jalankan pernyataan SQL. Lihat Agregasi dan SQL query.
Untuk mendapatkan semua baris yang memenuhi kondisi query tanpa perlu mengurutkan baris, gunakan fitur pemindaian paralel dengan memanggil operasi ParallelScan dan ComputeSplits. Lihat Pemindaian Paralel.