OpenSearch memungkinkan Anda mencari orang atau lokasi di sekitar. Topik ini menjelaskan cara melakukan pencarian berdasarkan koordinat tertentu untuk meningkatkan efisiensi dan mengurutkan hasil pencarian.
Solusi
Konfigurasikan bidang tipe GEO_POINT pada skema aplikasi dan indeks lokasi geografis untuk pengambilan data.
Aktifkan Plugin pemrosesan data untuk bidang tipe GEO_POINT.
Gunakan sintaks uji pencarian dan urutkan hasilnya.
Prosedur
1. Konfigurasikan skema aplikasi.
Masuk ke konsol OpenSearch, temukan aplikasi yang ingin dikonfigurasi, dan klik Konfigurasikan di kolom Tindakan. Pada langkah Skema Aplikasi, tambahkan bidang lon dan lat bertipe DOUBLE untuk garis bujur dan lintang. Tambahkan juga bidang company_lon_lat bertipe GEO_POINT. Nama bidang dapat disesuaikan dengan kebutuhan. Pada langkah Skema Indeks, pilih Analisis Lokasi Geografis sebagai Metode Analisis untuk bidang company_lon_lat dan tambahkan bidang ini sebagai atribut. Untuk informasi lebih lanjut tentang pembuatan aplikasi di konsol OpenSearch, lihat Bangun aplikasi.
2. Konfigurasikan sumber data.
Saat mengonfigurasi pemetaan bidang, gunakan Plugin StringCatenateExtractor untuk bidang company_lon_lat guna menggabungkan nilai bidang lon dan lat menggunakan spasi sebagai pembatas.
Catatan: Bidang pemetaan untuk company_lon_lat dapat diabaikan.
Untuk informasi lebih lanjut tentang Plugin, lihat Gunakan Plugin Pemrosesan Data.
3. Jalankan uji pencarian.
Contoh kueri: query=name:'Alibaba' AND company_lon_lat:'circle(116.5806 39.99624, 1000)'. Deskripsi: Cari dokumen Alibaba dalam radius 1.000 meter dari lokasi sumber dengan koordinat (116.5806, 39.99624). Sintaks: query=spatial_index:'circle(LON LAT,Radius)'.
LON menentukan garis bujur, LAT menentukan garis lintang, dan Radius menentukan jari-jari pencarian dalam meter. Untuk hasil terbaik, disarankan menetapkan radius dalam 10 kilometer dari lokasi sumber.
Untuk informasi lebih lanjut tentang fitur dan sintaks, lihat Pencarian Rentang.
4. Tambahkan ekspresi pengurutan halus.
Dalam contoh ini, koordinat ditentukan menggunakan klausa kvpairs berikut:
kvpairs=longtitude_in_query:120.34256, latitude_in_query:30.56982
Hasil pencarian diurutkan berdasarkan jarak menggunakan ekspresi pengurutan halus berikut:
-distance(longitude_in_doc,latitude_in_doc,longtitude_in_query, latitude_in_query, distance_value)
Sintaks:
distance(location1, location2, outputname, defaultvalue)
Parameter yang dapat disertakan dalam klausa searcher_cache:
location1: nama bidang bertipe GEO_POINT.
location2: nama bidang yang disetel dalam klausa kvpairs pada string kueri. Nilai bidang tersebut memiliki format yang sama dengan bidang bertipe GEO_POINT: Garis Bujur Garis Lintang.
outputname: nilai pengembalian. Parameter ini opsional dan dapat digunakan untuk mendapatkan jarak yang dihitung dalam hasil pencarian.
defaultvalue: nilai jarak yang dikembalikan jika parameter location1 tidak valid. Parameter ini opsional, dengan nilai default 100.000 jika tidak ditentukan.
Deskripsi: Dalam contoh ini, parameter long_lat_in_query ditentukan menggunakan klausa kvpairs. Contoh: kvpairs=long_lat_in_query:120.34256 30.56982.