Kueri Boolean mengambil baris dari tabel data dengan menggabungkan beberapa subkueri. Tablestore hanya mengembalikan baris yang memenuhi kondisi gabungan tersebut. Subkueri dapat berupa jenis apa pun, termasuk kueri Boolean lainnya.
Prasyarat
-
Instans OTSClient telah diinisialisasi. Untuk informasi selengkapnya, lihat Initialize an OTSClient instance.
-
Tabel data telah dibuat dan data telah ditulis ke dalam tabel tersebut. Untuk informasi selengkapnya, lihat Membuat tabel data dan Menulis data.
-
Indeks pencarian telah dibuat untuk tabel data tersebut. Untuk informasi selengkapnya, lihat Create a search index.
Parameter
|
Parameter |
Deskripsi |
|
table_name |
Nama tabel data. |
|
index_name |
Nama indeks pencarian. |
|
must_queries |
Operator AND. Tablestore hanya mengembalikan baris yang memenuhi semua kondisi subkueri. |
|
must_not_queries |
Operator NOT. Tablestore hanya mengembalikan baris yang tidak memenuhi satupun kondisi subkueri. Ketika beberapa subkueri ditentukan, parameter ini setara dengan NOT(A OR B): suatu baris dikecualikan jika memenuhi salah satu subkueri. |
|
filter_queries |
Filter yang diterapkan dengan logika AND. Tablestore hanya mengembalikan baris yang memenuhi semua kondisi filter. Berbeda dengan |
|
should_queries |
Operator OR. Tablestore mengembalikan baris yang memenuhi minimal jumlah tertentu dari kondisi subkueri. Skor relevansi suatu baris meningkat seiring dengan bertambahnya jumlah kondisi Gunakan |
|
minimum_should_match |
Jumlah minimum kondisi |
Contoh
Contoh berikut menunjukkan cara menggunakan setiap klausa kueri Boolean. Semua contoh memanggil $otsClient->search($request) dengan QueryTypeConst::BOOL_QUERY sebagai jenis kueri.
AND
Gunakan must_queries untuk mewajibkan semua kondisi. Contoh berikut mengembalikan baris di mana bidang keyword bernilai "keyword" DAN bidang long berada dalam rentang [100, 101).
$request = array(
'table_name' => 'php_sdk_test',
'index_name' => 'php_sdk_test_search_index',
'search_query' => array(
'offset' => 0,
'limit' => 2,
'get_total_count' => true,
'query' => array(
'query_type' => QueryTypeConst::BOOL_QUERY,
'query' => array(
'must_queries' => array(
array(
'query_type' => QueryTypeConst::TERM_QUERY,
'query' => array(
'field_name' => 'keyword',
'term' => 'keyword'
)
),
array(
'query_type' => QueryTypeConst::RANGE_QUERY,
'query' => array(
'field_name' => 'long',
'range_from' => 100,
'include_lower' => true,
'range_to' => 101,
'include_upper' => false
)
)
),
)
),
'sort' => array(
array(
'field_sort' => array(
'field_name' => 'keyword',
'order' => SortOrderConst::SORT_ORDER_ASC
)
),
)
),
'columns_to_get' => array(
'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED,
'return_names' => array('keyword', 'long')
)
);
$response = $otsClient->search($request);
OR
Gunakan should_queries dengan minimum_should_match untuk mencocokkan salah satu kondisi. Contoh berikut mengembalikan baris di mana bidang keyword bernilai "keyword" ATAU bidang long berada dalam rentang [100, 101).
$request = array(
'table_name' => 'php_sdk_test',
'index_name' => 'php_sdk_test_search_index',
'search_query' => array(
'offset' => 0,
'limit' => 2,
'get_total_count' => true,
'query' => array(
'query_type' => QueryTypeConst::BOOL_QUERY,
'query' => array(
'should_queries' => array(
array(
'query_type' => QueryTypeConst::TERM_QUERY,
'query' => array(
'field_name' => 'keyword',
'term' => 'keyword'
)
),
array(
'query_type' => QueryTypeConst::RANGE_QUERY,
'query' => array(
'field_name' => 'long',
'range_from' => 100,
'include_lower' => true,
'range_to' => 101,
'include_upper' => false
)
)
),
'minimum_should_match' => 1
)
),
'sort' => array(
array(
'field_sort' => array(
'field_name' => 'keyword',
'order' => SortOrderConst::SORT_ORDER_ASC
)
),
)
),
'columns_to_get' => array(
'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED,
'return_names' => array('keyword', 'long')
)
);
$response = $otsClient->search($request);
NOT
Gunakan must_not_queries untuk mengecualikan baris yang memenuhi salah satu kondisi. Contoh berikut mengecualikan baris di mana bidang keyword bernilai "keyword" ATAU bidang long berada dalam rentang [100, 101) — yaitu, NOT(kondisi A ATAU kondisi B).
$request = array(
'table_name' => 'php_sdk_test',
'index_name' => 'php_sdk_test_search_index',
'search_query' => array(
'offset' => 0,
'limit' => 2,
'get_total_count' => true,
'query' => array(
'query_type' => QueryTypeConst::BOOL_QUERY,
'query' => array(
'must_not_queries' => array(
array(
'query_type' => QueryTypeConst::TERM_QUERY,
'query' => array(
'field_name' => 'keyword',
'term' => 'keyword'
)
),
array(
'query_type' => QueryTypeConst::RANGE_QUERY,
'query' => array(
'field_name' => 'long',
'range_from' => 100,
'include_lower' => true,
'range_to' => 101,
'include_upper' => false
)
)
),
)
),
'sort' => array(
array(
'field_sort' => array(
'field_name' => 'keyword',
'order' => SortOrderConst::SORT_ORDER_ASC
)
),
)
),
'columns_to_get' => array(
'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED,
'return_names' => array('keyword', 'long')
)
);
$response = $otsClient->search($request);
filter_queries
Gunakan filter_queries ketika Anda memerlukan logika AND tanpa perhitungan skor relevansi. Contoh berikut mengembalikan baris yang memenuhi kedua kondisi tanpa memberi skor berdasarkan jumlah kondisi yang dipenuhi.
$request = array(
'table_name' => 'php_sdk_test',
'index_name' => 'php_sdk_test_search_index',
'search_query' => array(
'offset' => 0,
'limit' => 2,
'get_total_count' => true,
'query' => array(
'query_type' => QueryTypeConst::BOOL_QUERY,
'query' => array(
'filter_queries' => array(
array(
'query_type' => QueryTypeConst::TERM_QUERY,
'query' => array(
'field_name' => 'keyword',
'term' => 'keyword'
)
),
array(
'query_type' => QueryTypeConst::RANGE_QUERY,
'query' => array(
'field_name' => 'long',
'range_from' => 100,
'include_lower' => true,
'range_to' => 101,
'include_upper' => false
)
)
),
)
),
'sort' => array(
array(
'field_sort' => array(
'field_name' => 'keyword',
'order' => SortOrderConst::SORT_ORDER_ASC
)
),
)
),
'columns_to_get' => array(
'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED,
'return_names' => array('keyword', 'long')
)
);
$response = $otsClient->search($request);
Kueri Gabungan
Sarangkan kueri Boolean untuk membangun logika kompleks. Contoh berikut mencocokkan baris yang memenuhi: (col2 < 4 OR col3 < 5) OR (col2 = 4 AND (col3 = 5 OR col3 = 6)).
$request = array(
'table_name' => 'php_sdk_test',
'index_name' => 'php_sdk_test_index',
'search_query' => [
'offset' => 0,
'limit' => 10,
'get_total_count' => false,
'query' => [
'query_type' => QueryTypeConst::BOOL_QUERY,
'query' => [
// Kombinasi akhir: (col2 < 4 or col3 < 5) or (col2 = 4 and (col3 = 5 or col3 = 6))
'should_queries' => [
[
'query_type' => QueryTypeConst::BOOL_QUERY,
'query' => [
// Kombinasi 1: col2 < 4 or col3 < 5
'should_queries' => [
[
'query_type' => QueryTypeConst::RANGE_QUERY,
// Kondisi 1: col2 < 4
'query' => [
'field_name' => 'col2',
'range_to' => 4
]
],
[
'query_type' => QueryTypeConst::RANGE_QUERY,
// Kondisi 2: col3 < 5
'query' => [
'field_name' => 'col3',
'range_to' => 5
]
]
]
]
],
[
'query_type' => QueryTypeConst::BOOL_QUERY,
// Kombinasi 2: (col2 = 4 and (col3 = 5 or col3 = 6))
'query' => [
'must_queries' => [
[
'query_type' => QueryTypeConst::TERM_QUERY,
// Kondisi 3: col2 = 4
'query' => [
'field_name' => 'col2',
'term' => 4
]
],
[
'query_type' => QueryTypeConst::BOOL_QUERY,
// Kombinasi 3: (col3 = 5 or col3 = 6)
'query' => [
'should_queries' => [
[
'query_type' => QueryTypeConst::TERM_QUERY,
// Kondisi 4: col3 = 5
'query' => [
'field_name' => 'col3',
'term' => 5
]
],
[
'query_type' => QueryTypeConst::TERM_QUERY,
// Kondisi 5: col3 = 6
'query' => [
'field_name' => 'col3',
'term' => 6
]
]
],
'minimum_should_match' => 1
]
]
]
]
]
],
'minimum_should_match' => 1
]
]
],
// Anda dapat mengonfigurasi parameter columns_to_get untuk menentukan kolom yang dikembalikan atau menentukan bahwa semua kolom dikembalikan. Jika Anda tidak mengonfigurasi parameter ini, hanya kolom kunci primer yang dikembalikan.
'columns_to_get' => [
//'return_type' => ColumnReturnTypeConst::RETURN_ALL // Menentukan bahwa semua kolom dikembalikan.
// Menentukan bahwa kolom tertentu dikembalikan.
'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED,
'return_names' => array('col1', 'col2')
]
);
$response = $otsClient->search($request);
FAQ
Referensi
Saat menggunakan indeks pencarian 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 metode kueri yang berbeda untuk mengkueri data dari berbagai dimensi sesuai kebutuhan bisnis Anda.
Jika Anda ingin mengurutkan atau melakukan pagination pada baris yang memenuhi kondisi kueri, Anda dapat menggunakan fitur pengurutan dan paging. Untuk informasi selengkapnya, lihat Sorting and paging.
Jika Anda ingin melipat (collapse) set hasil berdasarkan kolom tertentu, Anda dapat menggunakan fitur collapse (distinct). Dengan demikian, data jenis tertentu hanya muncul sekali dalam hasil kueri. Untuk informasi selengkapnya, lihat Collapse (distinct).
Jika Anda 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 selengkapnya, lihat Aggregation dan SQL query.
Jika Anda ingin dengan cepat mendapatkan semua baris yang memenuhi kondisi kueri tanpa perlu mengurutkan baris tersebut, Anda dapat memanggil operasi ParallelScan dan ComputeSplits untuk menggunakan fitur pemindaian paralel. Untuk informasi selengkapnya, lihat Parallel scan.