Indeks pencarian mendukung tipe data IP, yang menyediakan penyimpanan dan kueri efisien untuk alamat IPv4 dan IPv6 dalam skenario seperti analisis log, keamanan jaringan, dan geolokasi.
Untuk menggunakan tipe data IP pada indeks pencarian, dan hubungi dukungan teknis Tablestore untuk mengaktifkan fitur tersebut.
Cara kerjanya
Untuk menggunakan tipe data IP, Anda dapat memetakan kolom String dari tabel data Anda ke tipe IP di indeks pencarian. Tipe data IP mendukung tiga metode kueri: kueri tepat, kueri rentang, dan kueri komposit. Skema indeks alamat IP khusus menyediakan penyimpanan terpadu dan pengambilan yang efisien untuk IPv4, IPv6, dan format variannya.
Format IP yang didukung
Tipe data IP mendukung berbagai format alamat IP. Tabel berikut menjelaskan format yang didukung.
Format alamat IP | Deskripsi | |
IPv4 | Format alamat IPv4. Terdiri dari empat kelompok angka desimal yang dipisahkan oleh titik (.). |
|
IPv6 | Format alamat IPv6. Terdiri dari delapan kelompok empat digit heksadesimal yang dipisahkan oleh titik dua (:). |
|
Format IPv6 singkat | Mendukung notasi singkat standar untuk alamat IPv6. |
|
Alamat IPv6 yang dipetakan ke IPv4 | Format alamat IPv6 yang dipetakan ke IPv4. Mendukung kueri menggunakan format IPv4. Catatan Sebagai contoh, jika nilai kolom `column_ip` dalam sebuah baris adalah |
|
Skenario kueri
Kueri tipe IP mendukung tiga metode: kueri tepat (cocok persis), kueri rentang, dan kueri komposit. Setiap metode cocok untuk skenario bisnis yang berbeda.
Jenis kueri | Deskripsi | Implementasi | Skema aplikasi |
Kueri Istilah | Mengkueri data yang cocok dengan alamat IP tertentu. | Gunakan kueri tepat dengan alamat IP tertentu. |
|
Kueri rentang | Mengkueri data dalam rentang alamat IP tertentu. |
|
|
Kueri komposit | Mengkueri data berdasarkan kombinasi alamat IP dan dimensi lainnya. | Gunakan fitur kueri komposit. |
|
Menggunakan bidang tipe IP
Anda dapat menggunakan bidang tipe IP dengan Tablestore Java software development kit (SDK) dan Go SDK. Topik ini menggunakan Java SDK sebagai contoh. Pastikan Anda menggunakan versi 5.17.6 atau lebih baru dari Tablestore Java SDK.
Langkah 1: Buat indeks pencarian yang berisi tipe IP
Saat membuat indeks pencarian, petakan bidang String yang ingin digunakan untuk kueri IP ke tipe IP.
private static void createSearchIndex(SyncClient client) {
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(TABLE_NAME);
request.setIndexName(INDEX_NAME);
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
new FieldSchema("Col_Keyword", FieldType.KEYWORD).setIndex(true).setEnableSortAndAgg(true),
// Tetapkan indeks untuk kolom Col_Ip ke tipe IP.
new FieldSchema("Col_Ip", FieldType.IP).setIndex(true).setEnableSortAndAgg(true)
));
request.setIndexSchema(indexSchema);
client.createSearchIndex(request);
}Langkah 2: Tulis data IP ke tabel data
Tulis data alamat IP ke bidang yang telah dikonfigurasikan sebagai tipe IP.
private static void putRow(SyncClient client) {
String[] keywords = { "Router", "Phone", "PC1", "PC2", "Home Bot" };
for (int i = 0; i < 5; i++) {
// Bangun kunci utama.
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_1, PrimaryKeyValue.fromString("pk1" + i));
PrimaryKey primaryKey = primaryKeyBuilder.build();
RowPutChange rowPutChange = new RowPutChange(TABLE_NAME, primaryKey);
// Tambahkan kolom atribut.
rowPutChange.addColumn("Col_Keyword", ColumnValue.fromString(keywords[i]));
// Tambahkan kolom atribut dan tulis alamat IP.
rowPutChange.addColumn("Col_Ip", ColumnValue.fromString("192.168.1." + i));
client.putRow(new PutRowRequest(rowPutChange));
}
}Langkah 3: Verifikasi konfigurasi
Verifikasi kueri IP tepat
/** * Untuk mengkueri alamat IP yang tepat, gunakan TermQuery. */ private static void searchExactIp(SyncClient client) { SearchQuery searchQuery = new SearchQuery(); TermQuery query = QueryBuilders.term("Col_Ip", "192.168.1.1").build(); searchQuery.setQuery(query); searchQuery.setLimit(100); SearchRequest searchRequest = new SearchRequest(TABLE_NAME, INDEX_NAME, searchQuery); SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet(); columnsToGet.setReturnAll(true); searchRequest.setColumnsToGet(columnsToGet); SearchResponse resp = client.search(searchRequest); System.out.println("TotalCount: " + resp.getTotalCount()); System.out.println("Row: " + resp.getRows()); }Verifikasi kueri rentang IP
/** * Untuk mengkueri rentang alamat IP, Anda dapat menggunakan notasi CIDR dalam TermQuery atau menggunakan RangeQuery. */ private static void searchIpSegment(SyncClient client) { SearchQuery searchQuery = new SearchQuery(); // Kueri untuk rentang IP menggunakan notasi CIDR. TermQuery query = QueryBuilders.term("Col_Ip", "192.168.1.1/24").build(); // Sebagai alternatif, gunakan RangeQuery untuk mengkueri rentang IP. // RangeQuery query = QueryBuilders.range("Col_Ip").greaterThanOrEqual("192.168.1.0").lessThanOrEqual("192.168.1.255").build(); searchQuery.setQuery(query); searchQuery.setLimit(100); SearchRequest searchRequest = new SearchRequest(TABLE_NAME, INDEX_NAME, searchQuery); SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet(); columnsToGet.setReturnAll(true); searchRequest.setColumnsToGet(columnsToGet); SearchResponse resp = client.search(searchRequest); System.out.println("TotalCount: " + resp.getTotalCount()); System.out.println("Row: " + resp.getRows()); }
Penggunaan produksi
Rekomendasi kueri rentang
Saat melakukan kueri rentang, kami merekomendasikan Anda menentukan batas atas dan bawah dari rentang alamat IP. Jika tabel data Anda berisi alamat IPv4 dan IPv6, kueri dengan hanya satu kondisi batas untuk alamat IPv4 mungkin mengembalikan alamat IPv6 yang tidak diinginkan.
Rekomendasi notasi CIDR
Untuk kueri rentang IP, kami merekomendasikan menggunakan notasi CIDR, seperti
192.168.1.1/24. Metode ini lebih ringkas dan akurat daripada kueri rentang tradisional dan membantu mencegah kesalahan saat menetapkan kondisi batas.