Ikhtisar
Setelah membuat Kamus Intervensi untuk Analisis Bobot Istilah, Anda dapat menentukan kamus tersebut saat membuat atau memodifikasi aturan analisis kueri. Dengan cara ini, Anda dapat melakukan intervensi dalam analisis bobot istilah. OpenSearch menyediakan kamus bawaan untuk menganalisis bobot istilah. Berikut adalah langkah-langkah yang dapat Anda ikuti untuk melakukan intervensi dalam analisis bobot istilah:
Buat Kamus Intervensi untuk Analisis Bobot Istilah. Untuk membuat kamus intervensi, masuk ke Konsol OpenSearch. Di panel navigasi sebelah kiri, pilih Pusat Algoritma Pencarian > Konfigurasi Pengambilan. Di halaman Konfigurasi Dasar, klik Manajemen Kamus di panel sebelah kiri. Di halaman Manajemen Kamus, klik Buat. Di panel Buat Kamus Analisis Kueri, masukkan nama untuk kamus intervensi, pilih tipe kamus, lalu klik Simpan. Setelah pembuatan selesai, kamus intervensi akan muncul dalam daftar kamus.
Tambahkan dan Kelola Entri Intervensi dalam Kamus Intervensi. Temukan kamus yang telah dibuat dalam daftar kamus dan klik Kelola Entri di kolom Tindakan untuk membuka halaman Kelola Entri. Di halaman ini, tambahkan dan kelola entri intervensi sesuai kebutuhan. Anda dapat menentukan kueri pencarian dalam entri intervensi dan memilih analizer untuk membagi kueri pencarian menjadi istilah. Analizer yang didukung meliputi analizer umum, analizer E-commerce, analizer konten TI, serta analizer kustom yang dikembangkan berdasarkan salah satu dari tipe analizer ini. Kemudian, tentukan tingkat prioritas tinggi, sedang, atau rendah untuk setiap istilah.
Gunakan Kamus Intervensi. Setelah menambahkan entri intervensi ke kamus intervensi, Anda dapat mengaitkan kamus intervensi dengan aturan analisis kueri pada aplikasi sesuai kebutuhan.
Uji dan Publikasikan Kamus Intervensi. Setelah kamus intervensi dikaitkan dengan aturan analisis kueri, disarankan untuk melakukan uji pencarian sebelum menerapkan aturan tersebut ke lingkungan daring. Ini memastikan performa pencarian yang diharapkan.
Aturan intervensi
Kueri pencarian intervensi digunakan untuk melakukan intervensi dalam kueri pencarian aktual berdasarkan aturan berikut:
Aturan 1: Jika kueri pencarian aktual sepenuhnya atau sebagian cocok dengan kueri pencarian intervensi, entri intervensi ini lebih diutamakan daripada entri intervensi lainnya. Jika kueri pencarian aktual sebagian cocok dengan kueri pencarian intervensi, jumlah istilah yang cocok tidak boleh melebihi lima.
Aturan 2: Jika istilah dalam kueri pencarian intervensi cocok dengan istilah yang paling dekat dengan awal kueri pencarian aktual, kueri pencarian intervensi ini memiliki prioritas lebih tinggi.
Aturan 3: Jika satu atau lebih istilah dari dua kueri pencarian intervensi cocok dengan istilah yang sama dalam kueri pencarian aktual, kueri pencarian intervensi yang berisi lebih banyak istilah yang cocok dengan istilah dalam kueri pencarian aktual mendapat prioritas. Maksimal lima istilah yang cocok didukung. Sebagai contoh, kueri pencarian "mysqldatabase" berisi dua istilah, yaitu "mysql" dan "database".
Aturan 4: Saat mengaitkan kamus intervensi untuk analisis bobot istilah dengan aturan analisis kueri, Anda dapat menentukan apakah akan mengabaikan spasi dalam kueri pencarian.
Contoh
Contoh kueri pencarian intervensi:
manajemen izin database: Kueri pencarian ini dapat dibagi menjadi tiga istilah, yaitu database, izin, dan manajemen. Bobot ketiga istilah tersebut adalah 7, 4, dan 1 secara berurutan.
MySQL database: Kueri pencarian ini dapat dibagi menjadi dua istilah, yaitu MySQL dan database. Bobot kedua istilah tersebut adalah 7 dan 1 secara berurutan.
izin database: Kueri pencarian ini dapat dibagi menjadi dua istilah, yaitu database dan izin. Bobot kedua istilah tersebut adalah 4 dan 1 secara berurutan.
manajemen izin database MySQL dalam lingkungan Linux: Kueri pencarian ini dapat dibagi menjadi delapan istilah, yaitu MySQL, database, izin, manajemen, dalam, the, Linux, dan lingkungan. Bobot kedelapan istilah tersebut adalah 7, 4, 1, 1, 1, 1, 7, dan 1. Jumlah istilah dalam kueri pencarian ini melebihi lima.
Kueri pencarian aktual:
manajemen izin database MySQL: Kueri pencarian intervensi "MySQL database" berlaku berdasarkan Aturan 2.
manajemen izin database SQL Server: Kueri pencarian intervensi "manajemen izin database" berlaku berdasarkan Aturan 3.
konfigurasi izin database: Kueri pencarian intervensi "izin database" berlaku berdasarkan Aturan 2.
konfigurasikan izin database: Tidak ada kueri pencarian intervensi yang cocok.
manajemen izin database MySQL dalam lingkungan Linux: Kueri pencarian intervensi "manajemen izin database MySQL dalam lingkungan Linux" berlaku berdasarkan Aturan 1.
instruksi tentang manajemen izin database MySQL dalam lingkungan Linux: Kueri pencarian aktual ini sebagian cocok dengan kueri pencarian intervensi "manajemen izin database MySQL dalam lingkungan Linux". Namun, jumlah istilah yang cocok setelah analisis melebihi lima. Akibatnya, kueri pencarian intervensi tidak berlaku.
konfigurasi izin database MySQL: Kueri pencarian intervensi "MySQL database" dan "izin database" berlaku.
Saat OpenSearch melakukan intervensi dalam kueri pencarian, kueri pencarian tersebut dapat dimodifikasi menjadi dua versi. Versi pertama digunakan untuk mengambil dokumen berdasarkan istilah yang bobotnya 7 atau 4. Versi kedua digunakan untuk pencarian ulang. Secara default, pencarian ulang hanya diperlukan jika tidak ada hasil pencarian yang dikembalikan menggunakan versi pertama. Untuk meningkatkan jumlah dokumen yang diambil, pencarian ulang dilakukan hanya berdasarkan istilah yang bobotnya 7 dalam versi kedua.
Kode Kesalahan 6612: term_weight makeup data fail. Kesalahan ini menunjukkan bahwa tidak ada kueri pencarian intervensi yang berlaku.
Saat menambahkan entri intervensi ke kamus intervensi untuk analisis bobot istilah, Anda dapat mengonfigurasi analizer model khusus hanya untuk aplikasi eksklusif.
Contoh
Skenario: Anda telah membuat aturan analisis kueri dengan kemampuan analisis bobot istilah untuk aplikasi OpenSearch layanan panduan belanja E-commerce Anda. Setelah menerapkan aturan ini ke aplikasi daring, hasil pencarian yang dikembalikan tidak memuaskan. Untuk menyelesaikan masalah, intervensi dalam analisis bobot istilah diimplementasikan.
Deskripsi Masalah: Pengguna memasukkan kueri pencarian data permission management. Setelah analisis bobot istilah, klausa kueri ditulis ulang sebagai default:'permission' RANK default:'data' RANK default:'management'. Namun, pengguna ingin memperoleh hasil untuk "data", bukan "permission" dalam kueri pencarian.
Penyebab: Kamus bawaan untuk analisis bobot istilah tidak dapat memenuhi persyaratan.
Solusi: Buat Kamus Intervensi untuk Analisis Bobot Istilah dan kaitkan kamus intervensi dengan aturan analisis kueri pada aplikasi daring.
Prosedur:
Masuk ke Konsol OpenSearch. Di panel navigasi sebelah kiri, pilih Pusat Algoritma Pencarian > Konfigurasi Pengambilan. Di halaman Konfigurasi Dasar, klik Manajemen Kamus di panel sebelah kiri. Di halaman Manajemen Kamus, klik Buat.

Di panel Buat Kamus Analisis Kueri, masukkan nama untuk kamus intervensi dan atur parameter Tipe Kamus ke Term Weight.

Temukan kamus intervensi yang telah dibuat dan klik Kelola Entri di kolom Tindakan. Di halaman yang muncul, klik Tambah Entri Intervensi. Di panel Tambah Entri Intervensi, masukkan kueri pencarian, atur parameter Tipe Analizer ke Analizer Bawaan atau Analizer Kustom, lalu tentukan bobot untuk setiap istilah. Anda dapat memilih tipe analizer berdasarkan tipe analizer yang digunakan oleh indeks yang ditentukan dalam aturan analisis kueri yang ingin Anda gunakan.
Jika analizer model khusus digunakan untuk indeks yang ditentukan dalam aturan analisis kueri, atur parameter Tipe Analizer ke Analizer Model Khusus, pilih nama aplikasi Anda dari daftar drop-down Pilih Instansi, lalu pilih analizer model khusus.

Di halaman Konfigurasi Aturan Analisis Kueri, kaitkan kamus intervensi yang telah dibuat untuk analisis bobot istilah dengan aturan analisis kueri. Jangan terapkan aturan ke aplikasi daring dalam langkah ini.

Anda dapat menentukan apakah akan mengabaikan spasi dalam kueri pencarian selama intervensi dalam analisis bobot istilah. Secara default, spasi tidak diabaikan. Sebagai contoh, kueri pencarian aktual adalah "sql database". Kueri pencarian intervensi adalah "sqldatabase". Jika Anda memilih untuk mengabaikan spasi, intervensi dilakukan berdasarkan bobot istilah yang ditentukan untuk kueri pencarian intervensi. Jika Anda memilih untuk tidak mengabaikan spasi, intervensi tidak dilakukan.
Lakukan uji pencarian. Dalam contoh ini, bobot istilah "data" lebih tinggi daripada istilah "permission".

Gunakan SDK untuk membuat kamus intervensi untuk analisis bobot istilah
Dependensi Maven untuk SDK Java
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-opensearch</artifactId>
<version>0.7.0</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.0</version>
</dependency>Demo SDK untuk Java
public class TestTermWeightingInQueryProcessor {
private static DefaultAcsClient client;
public static void main(String[] args) throws Exception {
String regionId = "cn-hangzhou"; // region Id
IClientProfile profile = DefaultProfile.getProfile(regionId, "{ak}", "{secret}");
DefaultProfile.addEndpoint(regionId, regionId, "Opensearch", "opensearch." + regionId + ".aliyuncs.com");
DefaultAcsClient client = new DefaultAcsClient(profile);
String dictionaryName = "Nama kamus intervensi"; // Nama kamus intervensi yang ingin Anda buat.
String appName = "Nama aplikasi"; // Nama aplikasi yang ingin Anda gunakan.
int versionId = 1234; // ID versi aplikasi.
// System.out.println("Daftar kamus intervensi");
// listInterventionDictionaries();
Thread.sleep(10000);
System.out.println("Buat kamus intervensi: " + dictionaryName);
createDictionary(dictionaryName);
//
// Thread.sleep(10000);
// System.out.println("Deskripsikan kamus intervensi");
// describeInterventionDictionary(dictionaryName);
//
// Thread.sleep(10000);
// System.out.println("Daftar entri kamus intervensi sebelum");
// listEntries(dictionaryName);
Thread.sleep(10000);
System.out.println("Posting entri kamus ditambahkan");
postEntries(dictionaryName, "add");
Thread.sleep(10000);
System.out.println("Daftar entri kamus intervensi setelah ditambahkan");
listEntries(dictionaryName);
Thread.sleep(10000);
System.out.print("Set kamus intervensi ke qp");
setQueryProcessor(appName, versionId, dictionaryName);
// Lanjutkan dengan hati-hati. Uji aturan analisis kueri dalam uji pencarian. Jangan jadikan aturan analisis kueri sebagai default sampai memenuhi persyaratan Anda.
Thread.sleep(10000);
System.out.println("Set query processor default");
setDefaultQueryProcessor(appName, versionId, dictionaryName);
// Thread.sleep(10000);
// System.out.println("Hapus kamus");
// deleteDictionary(dictionaryName);
}
public static void listInterventionDictionaries() throws ClientException {
ListInterventionDictionariesRequest listInterventionDictionariesRequest = new ListInterventionDictionariesRequest();
listInterventionDictionariesRequest.setPageSize(50);
HttpResponse response = client.doAction(listInterventionDictionariesRequest);
System.out.println(response.getHttpContentString());
}
public static void createDictionary(String dictionaryName) throws UnsupportedEncodingException, ClientException {
CreateInterventionDictionaryRequest request = new CreateInterventionDictionaryRequest();
String body = "{\"name\": \"" + dictionaryName + "\", \"type\": \"term_weighting\"}";
request.setHttpContent(body.getBytes("UTF-8"), "UTF-8", FormatType.JSON);
HttpResponse response = client.doAction(request);
System.out.println(response.getHttpContentString());
}
public static void describeInterventionDictionary(String dictionaryName) throws ClientException {
DescribeInterventionDictionaryRequest request = new DescribeInterventionDictionaryRequest();
request.setName(dictionaryName);
HttpResponse response = client.doAction(request);
System.out.println(response.getHttpContentString());
}
public static void listEntries(String dictionaryName) throws ClientException {
ListInterventionDictionaryEntriesRequest request = new ListInterventionDictionaryEntriesRequest();
request.setName(dictionaryName);
HttpResponse response = client.doAction(request);
System.out.println(response.getHttpContentString());
}
public static void postEntries(String dictionaryName, String cmd) throws UnsupportedEncodingException, ClientException {
PushInterventionDictionaryEntriesRequest request = new PushInterventionDictionaryEntriesRequest();
request.setName(dictionaryName);
// Ganti kueri pencarian berikut dengan yang ingin Anda intervensi. Dalam contoh ini, bobot istilah adalah 7, 4, dan 1 dalam urutan menurun.
String body = "[{\n" +
" \"word\": \"data permission management\",\n" +
" \"cmd\": \"" + cmd + "\",\n" +
" \"tokens\": [\n" +
" {\n" +
" \"token\": \"data\",\n" +
" \"weight\": 7\n" +
" },\n" +
" {\n" +
" \"token\": \"permission\",\n" +
" \"weight\": 4\n" +
" },\n" +
" {\n" +
" \"token\": \"management\",\n" +
" \"weight\": 1\n" +
" }\n" +
" ]\n" +
"}]";
request.setHttpContent(body.getBytes("UTF-8"), "UTF-8", FormatType.JSON);
HttpResponse response = client.doAction(request);
System.out.println(response.getHttpContentString());
}
public static void deleteDictionary(String dictionaryName) throws ClientException {
RemoveInterventionDictionaryRequest request = new RemoveInterventionDictionaryRequest();
request.setName(dictionaryName);
HttpResponse response = client.doAction(request);
System.out.println(response.getHttpContentString());
}
public static void setQueryProcessor(String appName, int versionId, String dictionaryName) throws UnsupportedEncodingException, ClientException {
CreateQueryProcessorRequest request = new CreateQueryProcessorRequest();
request.setAppGroupIdentity(appName);
request.setAppId(versionId);
String body = "{\"name\":\""+ dictionaryName +"\",\"domain\":\"GENERAL\",\"indexes\":[\"default\"],\"processors\":[{\"name\":\"term_weighting\",\"useSystemDictionary\":true, \"interventionDictionary\":\""+dictionaryName+"\"}]}";
request.setHttpContent(body.getBytes("UTF-8"), "UTF-8", FormatType.JSON);
HttpResponse response = client.doAction(request);
System.out.println(response.getHttpContentString());
}
public static void setDefaultQueryProcessor(String appName, int versionId, String dictionaryName) throws UnsupportedEncodingException, ClientException {
ModifyQueryProcessorRequest request = new ModifyQueryProcessorRequest();
request.setAppGroupIdentity(appName);
request.setAppId(versionId);
request.setName(dictionaryName);
String body = "{\"active\":true}";
request.setHttpContent(body.getBytes("UTF-8"), "UTF-8", FormatType.JSON);
HttpResponse response = client.doAction(request);
System.out.println(response.getHttpContentString());
}
public static void deleteQueryProcessor(String appName, int versionId, String dictionaryName) throws ClientException {
RemoveQueryProcessorRequest request = new RemoveQueryProcessorRequest();
request.setAppGroupIdentity(appName);
request.setAppId(versionId);
request.setName(dictionaryName);
HttpResponse response = client.doAction(request);
System.out.println(response.getHttpContentString());
}
public static void listQueryProcessors(String appName, int versionId) throws ClientException {
ListQueryProcessorsRequest request = new ListQueryProcessorsRequest();
request.setAppGroupIdentity(appName);
request.setAppId(versionId);
HttpResponse response = client.doAction(request);
System.out.println(response.getHttpContentString());
}
}Untuk informasi lebih lanjut tentang struktur data entri intervensi, lihat InterventionDictionaryEntry.
Jika bahasa Inggris termasuk dalam kueri, harap gunakan semua huruf kecil dalam bahasa Inggris.
Untuk informasi lebih lanjut tentang struktur data aturan analisis kueri, lihat QueryProcessor.