Saat menggunakan search index untuk mengkueri data, Anda dapat memilih metode sorting bawaan atau menentukan metode sorting sendiri. Dengan demikian, baris-baris yang memenuhi kondisi kueri akan dikembalikan sesuai urutan yang telah ditentukan sebelumnya atau yang Anda spesifikasikan. Jika jumlah baris dalam respons sangat besar, Anda dapat menemukan data yang diperlukan dengan mengonfigurasi parameter limit dan offset atau menggunakan token.
Skenario
|
Category |
Method |
Feature |
Scenario |
|
Sorting |
Tentukan metode sorting saat membuat search index |
Secara default, data dalam search index diurutkan berdasarkan pengaturan presorting yang ditentukan oleh parameter IndexSort. Pengaturan ini menentukan urutan default pengembalian baris-baris yang memenuhi kondisi kueri. |
|
|
Tentukan metode sorting saat mengkueri data |
Sorting berdasarkan skor relevansi kata kunci berbasis BM25 (ScoreSort) |
Anda dapat menggunakan ScoreSort untuk mengurutkan hasil kueri berdasarkan skor relevansi kata kunci berbasis BM25. ScoreSort cocok untuk skenario seperti pencarian teks lengkap (full-text search). |
|
|
Anda dapat menggunakan PrimaryKeySort untuk mengurutkan hasil kueri berdasarkan nilai primary key. PrimaryKeySort cocok untuk skenario di mana Anda ingin mengurutkan data berdasarkan pengenal uniknya. |
|||
|
Sorting berdasarkan nilai satu atau beberapa kolom (FieldSort) |
Anda dapat menggunakan FieldSort untuk mengurutkan hasil kueri berdasarkan nilai satu atau beberapa kolom. FieldSort cocok untuk skenario di mana Anda ingin mengurutkan data berdasarkan properti seperti volume penjualan atau jumlah tampilan halaman. Umumnya, FieldSort digunakan di industri seperti e-commerce, jejaring sosial, dan aset media. |
||
|
Anda dapat menggunakan GeoDistanceSort untuk mengurutkan hasil kueri berdasarkan lokasi geografis. GeoDistanceSort cocok untuk skenario di mana Anda ingin mengurutkan data berdasarkan jarak dari lokasi tertentu. Umumnya, GeoDistanceSort digunakan di industri seperti pemetaan dan logistik. Misalnya, Anda dapat mengurutkan restoran di sekitar suatu lokasi berdasarkan jarak dari lokasi tersebut. |
|||
|
Paging |
Tentukan metode paging saat mengkueri data |
Jika jumlah baris dalam respons kurang dari 100.000, Anda dapat menggunakan metode ini untuk melompat ke halaman tertentu. |
|
|
Jika menggunakan fitur ini, data dikembalikan per halaman dan Anda hanya dapat melakukan paging mundur. Untuk paging maju, Anda dapat menyimpan cache token sebelumnya karena token tetap valid selama proses kueri. |
Index presorting
Secara default, Tablestore mengurutkan data dalam search index berdasarkan urutan sortir yang telah ditentukan sebelumnya, yang disebut index presorting (IndexSort). Saat Anda mengkueri data, IndexSort menentukan urutan default hasil yang dikembalikan.
Saat membuat indeks pencarian, Anda dapat mengkustomisasi IndexSort. Jika pengaturan ini tidak ditentukan, indeks akan menggunakan pengurutan berdasarkan kunci utama secara default.
Index presorting hanya mendukung
PrimaryKeySort(primary key sort) danFieldSort(field sort).Anda tidak dapat menggunakan index presorting untuk search index yang berisi bidang bertipe nested.
Setelah membuat search index, fitur dynamic schema modification memungkinkan Anda memodifikasi pengaturan
IndexSort.
Tentukan metode sorting saat mengkueri data
Sorting hanya dapat dilakukan untuk bidang yang parameter enable_sort_and_agg-nya diatur ke true.
Anda dapat menentukan metode sorting untuk setiap kueri. Search index mendukung empat jenis sorter berikut. Anda juga dapat menggunakan beberapa sorter untuk mengurutkan hasil berdasarkan urutan kriteria tertentu.
ScoreSort
ScoreSort
Mengurutkan hasil kueri berdasarkan skor relevansi, yang dihitung menggunakan algoritma BM25. Metode ini cocok untuk skenario berbasis relevansi, seperti pencarian teks lengkap.
Jika ingin mengurutkan berdasarkan skor relevansi, Anda harus secara eksplisit menentukan
ScoreSort. Jika tidak, Tablestore akan mengurutkan hasil sesuai pengaturanIndexSortpada indeks.Saat menggunakan
ScoreSort, bidang bertipe FuzzyKeyword tidak termasuk dalam proses sorting, dan parameterweighttidak berpengaruh pada bidang-bidang tersebut.
'sort' => array(
array(
'score_sort' => array(
'order' => SortOrderConst::SORT_ORDER_DESC
)
),
)
PrimaryKeySort
Mengurutkan hasil berdasarkan primary key.
'sort' => array(
array(
'pk_sort' => array(
'order' => SortOrderConst::SORT_ORDER_ASC
)
),
)
FieldSort
Anda dapat menggunakan FieldSort untuk mengurutkan hasil kueri berdasarkan nilai satu atau beberapa kolom tertentu.
'sort' => array(
array(
'field_sort' => array(
'field_name' => 'keyword',
'order' => SortOrderConst::SORT_ORDER_ASC,
'mode' => SortModeConst::SORT_MODE_AVG,
)
),
)
GeoDistanceSort
Mengurutkan hasil berdasarkan jarak dari titik 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 sorting
Anda dapat mengurutkan hasil kueri berdasarkan nilai dua kolom dalam urutan tertentu untuk menentukan urutan pengembalian data yang sesuai.
'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
Untuk melakukan paging pada hasil kueri, Anda dapat menggunakan parameter limit dan offset atau token.
Konfigurasi parameter limit dan offset
Offset-based paging
Anda dapat menggunakan offset-based paging ketika jumlah total baris yang akan diambil kurang dari 100.000. Jumlah limit dan offset harus kurang dari atau sama dengan 100.000, dan nilai maksimum untuk limit adalah 100.
Untuk meningkatkan ambang batas limit, lihat Bagaimana cara meningkatkan limit API Search menjadi 1.000?.
Jika Anda tidak mengatur parameter limit dan offset, nilai default limit adalah 10 dan offset adalah 0.
$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
Paging berbasis token direkomendasikan untuk deep paging karena tidak memiliki batas kedalaman.
Jika Tablestore tidak dapat membaca seluruh data yang memenuhi kondisi kueri, Tablestore akan mengembalikan next_token. Anda dapat menggunakan next_token untuk melanjutkan pembacaan data berikutnya.
Secara default, paging berbasis token hanya memungkinkan Anda bergerak maju melalui hasil. Namun, karena token tetap valid selama proses kueri, Anda dapat menyimpan cache token sebelumnya untuk melakukan paging mundur.
Saat melakukan paging dengan token, urutan sortir sama dengan permintaan sebelumnya, baik menggunakan IndexSort default maupun sortir kustom. Oleh karena itu, Anda tidak dapat mengatur parameter Sort saat menggunakan token. Anda juga tidak dapat mengatur offset, karena data hanya dapat dibaca secara berurutan.
$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 disertakan dalam respons, Anda tidak dapat menentukan metode sorting karena token sudah mencakup informasi sorting tersebut.
$response = $otsClient->search($request);
print json_encode($response['rows'], JSON_PRETTY_PRINT);
}
FAQ
Referensi
Saat menggunakan search index untuk mengkueri data, Anda dapat menggunakan metode kueri 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. Anda dapat menggunakan berbagai metode kueri untuk mengkueri data dari berbagai dimensi sesuai kebutuhan bisnis Anda.
Jika ingin mengurutkan atau melakukan paging pada baris-baris yang memenuhi kondisi kueri, Anda dapat menggunakan fitur sorting dan paging. Untuk informasi lebih lanjut, lihat Sorting dan paging.
Jika ingin menciutkan (collapse) set hasil berdasarkan kolom tertentu, Anda dapat menggunakan fitur collapse (distinct). Dengan cara ini, data jenis tertentu hanya muncul sekali dalam hasil kueri. Untuk informasi lebih lanjut, lihat Collapse (distinct).
Jika ingin menganalisis data dalam tabel data, seperti mendapatkan nilai ekstrem, jumlah total, dan jumlah baris, Anda dapat melakukan operasi agregasi atau mengeksekusi pernyataan SQL. Untuk informasi lebih lanjut, lihat Agregasi dan SQL query.
Jika ingin dengan cepat mendapatkan semua baris yang memenuhi kondisi kueri tanpa perlu mengurutkannya, Anda dapat memanggil operasi ParallelScan dan ComputeSplits untuk menggunakan fitur pemindaian paralel. Untuk informasi lebih lanjut, lihat Parallel scan.