全部产品
Search
文档中心

OpenSearch:Pencarian rentang

更新时间:Jun 26, 2025

Skenario

Banyak skenario bisnis melibatkan pencarian rentang. Sebagai contoh, dalam skenario bisnis online ke offline (O2O), Anda mungkin ingin mencari pedagang dalam rentang geografis tertentu dari lokasi Anda. Anda juga mungkin ingin mencari komoditas dalam rentang harga tertentu atau mengambil sejumlah besar data di latar belakang untuk mencari hasil dalam periode waktu tertentu.

Prosedur

Anda dapat mengikuti langkah-langkah berikut untuk menerapkan pencarian rentang:

1. Saat mendefinisikan skema aplikasi, konfigurasikan tipe bidang untuk bidang yang akan digunakan dalam pencarian rentang.

Tabel berikut menjelaskan tipe bidang yang dapat digunakan untuk pencarian rentang. Konfigurasikan tipe bidang sesuai dengan kebutuhan Anda.

Tipe

Deskripsi

Catatan

INT

Tipe INT64. Bidang dengan tipe INT dapat digunakan untuk melakukan pencarian rentang.

Maksimal empat bidang dengan tipe ini didukung.

TIMESTAMP

Timestamp integer yang lebih besar dari atau sama dengan 0, dalam milidetik. Unit timestamp yang disimpan adalah milidetik. Unit timestamp yang dapat Anda cari adalah detik. Secara default, tiga digit terakhir diatur menjadi 000. Bidang dengan tipe TIMESTAMP dapat digunakan untuk melakukan pencarian rentang.

Maksimal empat bidang dengan tipe ini didukung.

GEO_POINT

Tipe STRING, dalam format lon lat. lon menentukan garis bujur, dan lat menentukan garis lintang. Nilai garis bujur dan lintang harus bertipe DOUBLE dan dipisahkan oleh karakter spasi. Nilai valid untuk parameter lon: [-180,180]. Nilai valid untuk parameter lat: [-90,90].

Maksimal dua bidang dengan tipe ini didukung.

2. Saat mendefinisikan skema indeks, buat indeks untuk bidang dengan tipe bidang yang didefinisikan pada Langkah 1 dan tentukan analisis yang sesuai.

Anda dapat membuat indeks bidang tunggal, tetapi tidak indeks komposit, untuk bidang dengan tipe TIMESTAMP, GEO_POINT, dan INT.

Tabel berikut menjelaskan analisis untuk indeks yang dibuat berdasarkan ketiga tipe bidang tersebut.

Tipe bidang indeks tunggal

Analisis untuk pencarian rentang

Deskripsi analisis

INT

Analisis nilai numerik

Tidak diperlukan analisis. Anda dapat menggunakan analisis ini jika ingin melakukan pencarian rentang berdasarkan indeks tipe data numerik.

TIMESTAMP

Analisis nilai numerik

Tidak diperlukan analisis. Anda dapat menggunakan analisis ini jika ingin melakukan pencarian rentang berdasarkan indeks tipe data numerik.

GEO_POINT

Lokasi geografis

Tidak diperlukan analisis. Anda dapat menggunakan analisis ini jika ingin melakukan pencarian rentang berdasarkan indeks tipe data numerik.

3. Gunakan sintaks pencarian rentang dalam kueri untuk melakukan pencarian rentang.

(1) Pencarian Rentang Tipe INT dan TIMESTAMP

Sintaks pencarian rentang tipe INT sama dengan tipe TIMESTAMP. Sintaks pencarian berikut didukung:

        index:[number1,number2]// number1 <= index <= number2
        index:[number1,number2)//  number1 <= index < number2
        index:(number1,number2]//  number1 < index <= number2
        index:(number1,number2)//  number1 < index < number2
        index:(,number2)// index < number2
        index:(number1,)// index > number1
        index:(,number2]// index <= number2
        index:[number1,)// index >= number1

Catatan: Jangan gunakan tanda kutip tunggal (') atau tanda kutip ganda (") setelah titik dua (:).

Contoh:

Cari "Dresses" dalam rentang harga dari CNY 100 hingga CNY 200 di komoditas:

query=index_text: "Dresses" AND index_price:[100,200]

Cari berita tentang "Beijing" dari 1 Juni 2019 hingga 3 Juni 2019:

query=index_text:'Beijing' AND index_timestamp:[1559318400000,1559577599000]

(2) Pencarian Rentang Tipe GEO_POINT

Anda dapat melakukan pencarian rentang tipe GEO_POINT untuk mencari titik geologi, lingkaran, dan persegi panjang. Gunakan sintaks berikut:

  • Cari titik geologi: query=spatial_index:'point(LON LAT)'

LON menentukan garis bujur, dan LAT menentukan garis lintang. Sebagai contoh, Anda dapat menggunakan query=spatial_index:'point(116.3906 39.92324)' untuk mencari titik geologi dengan koordinat yang sama.

  • Cari titik geografi dalam lingkaran dengan radius beberapa kilometer:

query=spatial_index:'circle(LON LAT,Radius)'

LON menentukan garis bujur. LAT menentukan garis lintang. Radius menentukan jari-jari dalam satuan meter. Jika pencarian rentang dilakukan dalam lingkaran dengan radius kurang dari atau sama dengan 10 kilometer, performa optimal dapat dicapai. Jika radius melebihi 10 kilometer, performa sangat menurun. Sebagai contoh, Anda dapat menggunakan query=spatial_index:'circle(116.5806 39.99624, 1000)' untuk mencari titik geografi dalam lingkaran dengan radius 1.000 meter dekat titik geologi dengan nilai garis bujur dan lintang 116.5806 dan 39.99624.

  • Cari titik geografi dalam persegi panjang:

query=spatial_index:'rectangle(minX minY,maxX maxY)'

Dalam lintang, nilai parameter maxY harus lebih besar dari atau sama dengan nilai parameter minY. Jika tidak, nilai parameter maxY dan minY akan disesuaikan secara otomatis. Parameter minX dan maxX menentukan garis bujur dari barat ke timur. Jika nilai parameter minX dan maxX terbalik, rentang longitudinal berubah. Sebagai contoh, Anda dapat menggunakan rectangle(116.3906 39.92324, 116.3907 39.92325) untuk mencari titik geologi dalam persegi panjang yang dibentuk oleh koordinat tersebut.

Catatan penggunaan

  • Nilai tipe TIMESTAMP berkisar dari 1970-01-01 00:00 hingga 2100-01-01 00:00, presisi hingga milidetik. Unit timestamp yang disimpan adalah milidetik. Unit timestamp yang dapat Anda cari adalah detik. Secara default, tiga digit terakhir diatur menjadi 000. Nilai valid: [0,4102416000000]. Jika nilai lebih besar dari 4102416000000, maka 4102416000000 digunakan. Jika Anda ingin membedakan nilai yang lebih besar dari 4102416000000 dari nilai lainnya, tambahkan klausa filter untuk penyaringan.

  • Jika pencarian kueri dilakukan berdasarkan indeks untuk analisis nilai numerik, nilai kedua dalam interval nilai harus lebih besar dari nilai pertama. Jika tidak, kesalahan sintaks berikut dengan kode kesalahan 6112 akan dikembalikan: Kesalahan klausa kueri.

  • Bidang dengan tipe GEO_POINT memiliki rentang nilai longitudinal dari -180 hingga 180 dan rentang nilai latitudinal dari -90 hingga 90.