Indeks pencarian mempercepat pengambilan indeks Lastpoint dan menyediakan kemampuan kueri multi-dimensi serta analisis statistik. Topik ini menjelaskan cara menggunakan Tablestore SDK for Java untuk mengambil data dalam indeks Lastpoint melalui indeks pencarian.
Catatan Penggunaan
Fitur indeks Lastpoint didukung oleh Tablestore SDK for Java V5.17.1 atau versi lebih baru. Untuk menggunakan fitur ini, gunakan Tablestore SDK for Java V5.17.1 atau versi terbaru.
Untuk informasi tentang cara mengunduh versi baru Tablestore SDK for Java, lihat Riwayat Versi Tablestore SDK for Java.
Prasyarat
Sebuah indeks Lastpoint telah dibuat untuk tabel deret waktu. Untuk informasi lebih lanjut, lihat Buat indeks Lastpoint.
Prosedur
1. Buat indeks pencarian
Kode sampel berikut memberikan contoh cara membuat indeks pencarian untuk indeks Lastpoint. Untuk informasi tentang skenario sampel dan data, lihat Lampiran.
Dalam contoh ini, nilai dari bidang _tags adalah array string yang terdiri dari tag. Kami sarankan Anda menyetel tipe bidang yang dipetakan di indeks pencarian ke array Kata Kunci (Keyword), yang memudahkan untuk menanyakan tag dalam bidang _tags.
private static void createSearchIndex(SyncClient client) {
CreateSearchIndexRequest createSearchIndexRequest = new CreateSearchIndexRequest();
createSearchIndexRequest.setTableName("");
createSearchIndexRequest.setIndexName("");
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
new FieldSchema("_#h", FieldType.KEYWORD).setIndex(true).setEnableSortAndAgg(true),
new FieldSchema("_m_name", FieldType.KEYWORD).setIndex(true).setEnableSortAndAgg(true),
new FieldSchema("_data_source", FieldType.KEYWORD).setIndex(true).setEnableSortAndAgg(true),
new FieldSchema("_tags", FieldType.KEYWORD).setIndex(true).setEnableSortAndAgg(true).setIsArray(true),
new FieldSchema("_time", FieldType.LONG).setIndex(true).setEnableSortAndAgg(true),
new FieldSchema("gps", FieldType.GEO_POINT).setIndex(true).setEnableSortAndAgg(true),
new FieldSchema("speed", FieldType.DOUBLE).setIndex(true).setEnableSortAndAgg(true),
new FieldSchema("status", FieldType.KEYWORD).setIndex(true).setEnableSortAndAgg(true),
new FieldSchema("total_mileage", FieldType.DOUBLE).setIndex(true).setEnableSortAndAgg(true),
new FieldSchema("remaining_mileage", FieldType.DOUBLE).setIndex(true).setEnableSortAndAgg(true)
));
createSearchIndexRequest.setIndexSchema(indexSchema);
client.createSearchIndex(createSearchIndexRequest);
}2. Ambil data menggunakan indeks pencarian
Kode sampel berikut memberikan contoh cara menggunakan fitur kueri rentang indeks pencarian.
Dalam contoh ini, indeks pencarian digunakan untuk mengambil baris di mana nilai bidang speed lebih besar dari 20,0 dalam indeks Lastpoint.
private static void rangeQuery(SyncClient client) {
SearchQuery searchQuery = new SearchQuery();
RangeQuery rangeQuery = new RangeQuery(); // Setel jenis kueri ke RangeQuery.
rangeQuery.setFieldName("speed"); // Tentukan bidang yang sesuai.
rangeQuery.greaterThan(ColumnValue.fromDouble(20.0)); // Tentukan kondisi kueri untuk bidang tersebut. Hanya baris di mana nilai bidang lebih besar dari 20.0 yang memenuhi kondisi kueri.
searchQuery.setGetTotalCount(true);
searchQuery.setQuery(rangeQuery);
// Tentukan bahwa baris yang memenuhi kondisi kueri diurutkan berdasarkan kolom speed secara menurun.
FieldSort fieldSort = new FieldSort("speed");
fieldSort.setOrder(SortOrder.DESC);
searchQuery.setSort(new Sort(Arrays.asList((Sort.Sorter)fieldSort)));
searchQuery.setGetTotalCount(true); // Tentukan bahwa jumlah total baris yang memenuhi kondisi kueri dikembalikan.
SearchRequest searchRequest = new SearchRequest("", "", searchQuery);
// Anda dapat mengonfigurasi parameter columnsToGet untuk menentukan kolom yang ingin Anda kembalikan atau tentukan bahwa semua kolom dikembalikan. Jika Anda tidak mengonfigurasi parameter ini, hanya kolom kunci utama yang dikembalikan.
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAll(true); // Tentukan bahwa semua kolom dikembalikan.
searchRequest.setColumnsToGet(columnsToGet);
SearchResponse resp = client.search(searchRequest);
System.out.println("TotalCount: " + resp.getTotalCount()); // Cetak jumlah total baris yang cocok, bukan jumlah baris yang dikembalikan.
System.out.println("Row: " + resp.getRows());
}FAQ
Referensi
Fitur inti yang disediakan oleh indeks pencarian mencakup kueri berdasarkan kolom kunci utama atau non-kunci utama, kueri Boolean, kueri geo, pencarian teks lengkap, kueri fuzzy, kueri awalan, kueri bersarang, runtuh (distinct), pengurutan, kueri cocok semua, dan agregasi. Untuk informasi lebih lanjut, lihat Fitur.
Lampiran
Dalam skenario Internet of Vehicles (IoV), sensor melaporkan data deret waktu kendaraan ke cloud. Pengguna dapat menyimpan, menanyakan, dan menganalisis data deret waktu untuk memenuhi persyaratan bisnis, seperti laporan status kendaraan, penempatan kendaraan, manajemen lalu lintas, dan pencerminan layar jalur kendaraan.
Tabel berikut menunjukkan data sampel dalam tabel deret waktu.
Dalam contoh ini, bidang _m_name, _data_source, dan _tags adalah pengenal deret waktu, yang menentukan nama pengukuran, sumber data, dan informasi tag deret waktu, masing-masing. Bidang _time menentukan waktu pelaporan data. Bidang gps, speed, status, total_mileage, dan remaining_mileage adalah data deret waktu dalam deret waktu, yang menentukan koordinat GPS kendaraan, kecepatan kendaraan, status kendaraan, total jarak tempuh kendaraan, dan jarak tempuh tersisa kendaraan, masing-masing.
_m_name | _data_source | _tags | _time | gps | speed | status | total_mileage | remaining_mileage |
Platform A | sensor1 | ["region=hangzhou","car_model=sedan","number_plate=ZheA D7512*","color=white"] | 1.730.422.800.000.000 | 30.245853,120.178564 | 0 | Idle | 20.000 | 450 |
Platform A | sensor1 | ["region=hangzhou","car_model=sedan","number_plate=ZheA D7512*","color=white"] | 1.730.423.400.000.000 | 30.245853,120.178564 | 0 | Idle | 20.000 | 450 |
Platform A | sensor2 | ["region=hangzhou","car_model=suv","number_plate=ZheC 72B2*","color=black"] | 1.730.779.200.000.000 | 30.245278,120.150269 | 50 | Active | 15.000 | 300 |
Platform A | sensor2 | ["region=hangzhou","car_model=suv","number_plate=ZheC 72B2*","color=black"] | 1.730.779.800.000.000 | 30.245853,120.213654 | 80 | Active | 15.050 | 250 |
Platform B | sensor3 | ["region=hangzhou","car_model=sedan","number_plate=ZheB 121*9","color=blue"] | 1.730.862.000.000.000 | 30.246013,120.124470 | 60 | Active | 18.200 | 300 |
Platform B | sensor3 | ["region=hangzhou","car_model=sedan","number_plate=ZheB 121*9","color=blue"] | 1.730.862.600.000.000 | 30.246022,120.124460 | 0 | Idle | 18.230 | 270 |
Tablestore secara otomatis menyinkronkan data titik terbaru dalam deret waktu di tabel deret waktu ke indeks Lastpoint. Tabel berikut menunjukkan data sampel dalam indeks Lastpoint.
_#h | _m_name | _data_source | _tags | _time | gps | speed | status | total_mileage | remaining_mileage |
4c#Platform A#07 | Platform A | sensor1 | ["region=hangzhou","car_model=sedan","number_plate=ZheA D7512*","color=white"] | 1.730.423.400.000.000 | 30.245853,120.178564 | 0 | Idle | 20.000 | 450 |
25#Platform A#ae | Platform A | sensor2 | ["region=hangzhou","car_model=suv","number_plate=ZheC 72B2*","color=black"] | 1.730.779.800.000.000 | 30.245853,120.213654 | 80 | Active | 15.050 | 250 |
b2#Platform B#4b | Platform B | sensor3 | ["region=hangzhou","car_model=sedan","number_plate=ZheB 121*9","color=blue"] | 1.730.862.600.000.000 | 30.246022,120.124460 | 0 | Idle | 18.230 | 270 |