全部产品
Search
文档中心

OpenSearch:Konversi sintaks Solr

更新时间:Jun 26, 2025

Skema

OpenSearch mendukung berbagai tipe data dan analizer untuk memenuhi kebutuhan dalam sebagian besar skenario. Perhatikan hal berikut:

  • Tipe data yang didukung: bidang bertipe INT, INT_ARRAY, FLOAT, FLOAT_ARRAY, DOUBLE, DOUBLE_ARRAY, LITERAL, LITERAL_ARRAY, TEXT, dan SHORT_TEXT.

  • DynamicField: Bidang dinamis tidak didukung. OpenSearch memungkinkan Anda memodifikasi skema aplikasi, sehingga Anda dapat secara dinamis menambahkan atau mengubah bidang.

  • CopyField: Penyalinan bidang tidak didukung. Oleh karena itu, Anda dapat menggabungkan bidang tabel terlebih dahulu.

  • Maksimum 256 bidang diperbolehkan. Jika lebih dari 256 bidang perlu ditambahkan untuk aplikasi OpenSearch, Anda dapat menggabungkan bidang yang digunakan untuk kueri non-rentang menjadi satu bidang bertipe ARRAY. Ini dapat mengurangi jumlah total bidang yang ditambahkan untuk aplikasi.

  • patternTokenizer: OpenSearch mendukung analizer kustom untuk analisis. Namun, pembatas default adalah \t. Dalam hal ini, Anda harus mengonversi pembatas asli menjadi \t.

  • LOCATION: Tipe bidang ini dikonversi menjadi dua bidang bertipe FLOAT atau DOUBLE, yang digunakan untuk menyimpan nilai lintang dan bujur.

  • BOOLEAN: Tipe bidang ini dikonversi menjadi bidang bertipe INT, dengan nilai 0 atau 1.

  • DATE: Tipe bidang ini dikonversi menjadi bidang bertipe INT. Setelah Anda mendorong bidang tipe ini dari sumber data ke aplikasi OpenSearch, bidang tersebut secara otomatis dikonversi menjadi timestamp dalam satuan milidetik. Jika Anda mendorong bidang ke aplikasi OpenSearch dengan memanggil operasi API, Anda harus secara manual mengonversinya.

  • Payload analyzer: Tipe analizer ini tidak didukung.

  • Bitwise analyzer: Tipe analizer ini tidak didukung.

  • Paoding analyzer: Tipe analizer ini menggunakan analizer dasar Cina dari OpenSearch.

Sintaks pencarian

OpenSearch mendukung fitur seperti kueri, penyaringan, statistik, agregasi, dan pengurutan.

  • q: wajib. Parameter ini setara dengan kueri di OpenSearch. Tabel berikut menjelaskan aturan konversi spesifik.

Aturan Konversi q

: tidak didukung.

Indeks rentang dikonversi menjadi rentang yang difilter.

+A ==> A

-A ==> Jenis konversi ini tidak didukung.

A AND B ==> A AND B

A AND -B ==> A ANDNOT B

A OR B ==> A OR B

A OR +B ==> A RANK B

A AND B OR C ==> A AND B RANK C. Contoh: Hongfushi AND Apple OR Shandong.

A OR B AND C ==> B AND C RANK A. Contoh: Hongfushi OR Apple AND Shandong.

A AND B OR +C ==> A AND B AND C. Contoh: Hongfushi AND Apple OR +Shandong.

A OR +B AND C ==> B AND C RANK A. Contoh: Hongfushi OR +Apple AND Shandong.

+A OR B AND C ==> A AND B AND C. Contoh: +Hongfushi OR Apple AND Shandong.

A AND B OR -C ==> (A AND B) ANDNOT C. Contoh: Hongfushi AND Apple OR -Shandong.

A AND -B OR C ==> A ANDNOT B RANK C. Contoh: Apple AND -Hongfushi OR Shandong.

-A AND B OR C ==> B ANDNOT A RANK C. Contoh: -Hongfushi AND Apple OR Shandong.

A OR B AND -C ==> B ANDNOT C RANK A. Contoh: Hongfushi OR Apple AND -Shandong.

A OR -B AND C ==> C ANDNOT B RANK A. Contoh: Hongfushi OR -Shandong AND Apple.

-A OR B AND C ==> (B AND C) ANDNOT A. Contoh: -Hongfushi OR Shandong AND Apple.

A OR B OR -C == A OR -C OR B == -C OR A OR B ==> (A OR B) ANDNOT C

A AND B OR C AND D ==> A AND B AND C AND D

  • fq: menyaring dokumen yang diambil. Ini memengaruhi pengambilan dokumen tetapi tidak memengaruhi perhitungan skor kecocokan. Bidang filter digunakan untuk kueri non-kabur, sedangkan bidang kueri digunakan untuk kueri kabur. Jangan tentukan bidang ini saat menggunakan fitur pengurutan.

  • fl: Anda dapat menggunakan parameter fetch_fields OpenSearch untuk menentukan nilai balikan.

  • hl: mengonfigurasi ringkasan dan tag HTML di Konsol OpenSearch.

  • start dan rows: setara dengan start dan hit dalam klausa config.

  • wt: setara dengan format dalam klausa config.

  • df: bidang default dari kueri.

  • sort: field desc => -field: mengurutkan hasil dalam urutan menurun berdasarkan jenis bidang. field asc => +field: mengurutkan hasil dalam urutan naik berdasarkan jenis bidang. score => sort=RANK: mengurutkan hasil yang diurutkan dalam urutan naik.

  • facet: atribut indeks yang harus dikonfigurasi untuk bidang.

Aturan Konversi Statistik

facet.field => Parameter group_key dalam klausa agregat OpenSearch.

facet.limit => Parameter max_group dalam klausa agregat OpenSearch. Nilai defaultnya adalah 1.000.

facet.mincount => Tidak didukung. Anda harus memproses semua hasil secara manual.

facet.offset => Tidak didukung. Anda harus mengonfigurasi paginasi untuk semua hasil secara manual.

facet.sort => Tidak didukung. Anda harus mengurutkan semua hasil secara manual.

facet=true&facet.field=price&facet.limit=200 ==> aggregate=group_key:price,agg_fun:count(),max_group:200

  • group: tidak didukung. Anda dapat menggunakan klausa distinct dengan klausa sort untuk mengurutkan data dalam beberapa skenario sederhana.

  • stats: Beberapa fiturnya setara dengan fitur klausa agregat di OpenSearch. Namun, agg_func hanya mendukung min, max, count, dan avg. Tidak mendukung missing, sumOfSquares, mean, stddev, distinctValue, atau countDistinct.

Fitur pencarian

  • Paginasi Mendalam: OpenSearch menyediakan dua antarmuka kueri: search dan scroll. Search adalah skenario kueri umum, dengan maksimal 5.000 hasil yang dapat dikembalikan. Pembalikan halaman didukung, dengan maksimal 500 hasil per halaman. Scroll adalah skenario ekspor data, di mana puluhan juta catatan data dapat diekspor. Pengurutan tidak didukung, namun hasil yang dikembalikan dapat dianalisis lebih lanjut.

  • Akurasi Hasil Statistik: Untuk memastikan performa pengambilan yang lebih baik, OpenSearch melakukan pengambilan sampel dan estimasi dalam banyak kasus, yang dapat menyebabkan hasil statistik tidak akurat.

  • Jumlah Total Hasil Pencarian: Untuk memastikan performa pencarian, OpenSearch memperkirakan jumlah total hasil yang akan dikembalikan untuk kueri tanpa memedulikan jumlah total data.

  • Banyak Operator OR dalam Kueri: Panjang string kueri bisa mencapai 1 KB setelah encoding. Jika terlalu banyak operator OR digunakan, kesalahan terjadi dan tidak ada hasil yang dikembalikan. Dalam hal ini, kami sarankan Anda meningkatkan batas atas panjang string kueri atau melakukan beberapa kueri secara bersamaan dan menggabungkan hasil yang dikembalikan.