Cara Tambah Carian pada Aplikasi Anda: Dari Penapis Ringkas hingga Carian Teks Penuh
Untuk menambah carian pada aplikasi anda, mulakan dengan cara paling ringkas yang berfungsi: kotak carian yang memanggil laluan pelayan, yang menapis baris pangkalan data anda dengan memadankan pertanyaan pada beberapa lajur, serta penapis untuk perkara seperti kategori atau harga. Apabila itu tidak mencukupi — anda perlukan pemeringkatan kerelevanan, pelunakan perkataan atau banyak rekod — beralih kepada carian teks penuh pangkalan data anda, dan hanya berpindah kepada enjin carian yang dihoskan jika anda perlukan toleransi salah eja yang kuat atau hasil segera atas data yang sangat besar. Apa pun pilihan anda, carian mesti menghormati kebenaran: pengguna tidak sepatutnya menjumpai rekod yang mereka tidak dibenarkan lihat.
Apa maksud "carian" untuk aplikasi anda
Carian merangkumi beberapa perkara yang berbeza, dan kebanyakan aplikasi memerlukan lebih daripada satu:
- Carian kata kunci: kotak teks — "cari senarai yang menyebut 'taman'".
- Penapis: pilihan berstruktur — kategori, bandar, julat harga, tarikh, status.
- Pengisihan: terbaharu, termurah, paling relevan.
- Auto-lengkap: cadangan semasa menaip.
- Toleransi salah eja: "restoren" masih menjumpai "restoran".
Untuk direktori, papan kerja atau kedai, penapis selalunya lebih penting daripada kotak teks. Tentukan yang mana benar-benar anda perlukan sebelum memilih alat.
Pilihan anda
| Pendekatan | Cara ia berfungsi | Sesuai untuk | Had |
|---|---|---|---|
| Tapis dalam pelayar | Muatkan senarai, tapis dengan JavaScript | Senarai awam kecil (beberapa ratus item) | Menghantar semua data kepada setiap pelawat; perlahan dengan senarai besar |
| Padanan corak pangkalan data | Pertanyaan pelayan seperti "nama mengandungi teks", tidak sensitif huruf besar-kecil | Aplikasi kecil hingga sederhana, alat pentadbir | Tiada pemeringkatan; boleh perlahan pada jadual besar; tiada pelunakan perkataan |
| Carian teks penuh pangkalan data | Postgres mengindeks perkataan dan memberi kedudukan kepada padanan | Kebanyakan aplikasi berkandungan padat | Lemah dengan salah eja melainkan anda tambah padanan kabur |
| Padanan kabur (trigram) | Postgres membandingkan urutan aksara untuk keserupaan | Nama, medan pendek, toleransi salah eja | Memerlukan sambungan dan indeks; penalaan memerlukan usaha |
| Enjin carian yang dihoskan | Perkhidmatan berasingan mengindeks data anda (Algolia, Meilisearch, Typesense, Elasticsearch dan lain-lain) | Katalog besar, carian segera, toleransi salah eja yang tinggi | Satu lagi perkhidmatan untuk diselaraskan, dibayar dan dilindungi |
Jika data anda sudah berada dalam Postgres, carian teks penuh terbina dalamnya ialah jalan tengah yang kukuh. Ia memecahkan teks kepada perkataan, mengurangkannya kepada bentuk asas (supaya "berlari" sepadan dengan "lari"), mengabaikan perkataan lazim, dan boleh memberi kedudukan kepada hasil mengikut sejauh mana ia sepadan. Dengan indeks yang betul, ia kekal pantas pada jadual besar.
Contoh prompt
Permulaan yang ringkas:
Tambah kotak carian dan penapis pada halaman senarai. Carian perlu memadankan pertanyaan dengan tajuk dan perihalan, tidak sensitif huruf besar-kecil. Penapis: kategori (menu juntai), bandar (menu juntai) dan harga maksimum. Buat carian di pelayan dengan laluan API berpenomboran, 20 hasil setiap halaman. Simpan carian dan penapis dalam URL supaya hasil boleh dikongsi dan butang undur berfungsi. Papar keadaan kosong yang mesra apabila tiada yang sepadan.
Meningkatkan kepada carian teks penuh:
Tukar carian senarai kepada carian teks penuh Postgres pada tajuk (diberi berat lebih tinggi) dan perihalan. Tambah indeks yang betul, susun hasil mengikut kerelevanan, dan kekalkan penapis serta penomboran yang sedia ada. Jangan ubah sebarang data sedia ada.
Menambah toleransi salah eja untuk nama:
Tambah padanan kabur pada nama perniagaan supaya salah eja kecil masih menjumpai hasil. Gunakan keserupaan trigram jika ada, dengan indeks, dan kembali kepada carian semasa jika tidak.
Langkah demi langkah
- Senaraikan apa yang dicari orang. Medan mana (tajuk, perihalan, tag, nama)? Penapis mana? Tanya beberapa pengguna sebenar jika boleh.
- Mula di bahagian pelayan. Tambah laluan API yang menerima pertanyaan dan penapis, dan memulangkan satu halaman hasil. Jangan muatkan semuanya ke dalam pelayar.
- Gunakan kebenaran dalam pertanyaan. Jika pengguna hanya melihat rekod mereka sendiri, atau hanya yang diterbitkan, syarat itu mesti berada dalam pertanyaan carian yang sama.
- Tambah penomboran dari hari pertama — nombor halaman atau "muatkan lagi".
- Letakkan keadaan carian dalam URL (contohnya
?q=taman&bandar=leeds). Pautan boleh dikongsi, butang undur berfungsi, dan enjin carian boleh merayapi halaman yang ditapis jika anda mahukannya. - Lambatkan carian semasa menaip (debounce). Tunggu beberapa ratus milisaat selepas berhenti menaip sebelum membuat pertanyaan, supaya anda tidak menghantar permintaan untuk setiap ketukan kekunci.
- Tambah indeks setelah anda tahu lajur mana yang anda tapis dan cari.
- Tingkatkan kepada carian teks penuh, kemudian padanan kabur, kemudian enjin yang dihoskan — hanya apabila langkah yang lebih ringkas gagal kepada pengguna sebenar.
- Uji dengan data yang kelihatan sebenar: ratusan atau beribu baris, aksara pelik, pertanyaan kosong, pertanyaan yang sangat panjang, bahasa lain jika anda menyokongnya.
Kesilapan biasa
- Memuatkan keseluruhan jadual ke dalam pelayar. Tidak mengapa untuk 50 item, tetapi menyusahkan untuk 50,000, dan ia mendedahkan setiap rekod — termasuk yang tidak sepatutnya dilihat pengguna.
- Carian yang mengabaikan kebenaran. Carian adalah kebocoran yang biasa: rekod persendirian atau draf muncul kerana pertanyaan carian terlupa syarat "milik saya sahaja" atau "diterbitkan sahaja".
- Membina SQL daripada input pengguna mentah. Sentiasa gunakan parameter. Pembina AI biasanya berbuat demikian, tetapi semak jika anda nampak rentetan dicantum bersama.
- Tiada keadaan kosong. "Tiada hasil" dengan cadangan (kosongkan penapis, semak ejaan) menghalang orang daripada pergi.
- Tiada indeks. Carian kelihatan baik dengan data ujian dan menjadi perlahan apabila data sebenar bertambah.
- Terus melompat ke perkhidmatan carian. Anda kemudian perlu menyimpan salinan kedua data anda yang diselaraskan, mengendalikan pemadaman, dan melindungi satu set kunci lagi — selalunya tanpa faedah yang kelihatan.
- Terlupa peranti mudah alih. Penapis perlu muat pada telefon; laci penapis atau panel boleh lipat biasanya lebih baik daripada bar sisi.
Senarai semak
- Anda tahu medan mana yang dicari dan penapis mana yang wujud
- Carian berjalan di pelayan dan memulangkan hasil berpenomboran
- Pertanyaan menguatkuasakan kebenaran yang sama seperti bahagian lain aplikasi
- Input pengguna dihantar sebagai parameter, tidak dicantum ke dalam SQL
- Keadaan carian berada dalam URL
- Penaipan dilambatkan (debounce)
- Lajur yang dicari dan ditapis diindeks
- Keadaan kosong, tiada hasil dan ralat adalah jelas
- Diuji dengan jumlah data yang realistik dan input yang tidak kemas
Menambah carian dengan Mythex
Dalam aplikasi yang dibina dengan Mythex, data biasanya berada dalam pangkalan data Postgres milik projek, jadi anda boleh bermula dengan prompt di atas: padanan corak dahulu, kemudian carian teks penuh Postgres apabila anda perlukan pemeringkatan. Jika anda mahukan enjin carian yang dihoskan, gunakan akaun dan kunci anda sendiri, simpannya sebagai rahsia projek, dan minta ejen mengindeks serta membuat pertanyaan daripadanya dari pelayan, seperti yang diterangkan dalam Integrate any API.
Carian adalah teras kepada banyak aplikasi: lihat cara membina laman web direktori, cara membina papan kerja dan cara membina pasaran untuk melihat bagaimana ia sesuai dengan keseluruhan produk.
Soalan lazim
Apakah cara paling mudah untuk menambah carian pada aplikasi?
Jika data anda berada dalam pangkalan data, laluan pelayan yang menapis baris dengan padanan tidak sensitif huruf besar-kecil pada beberapa lajur ialah permulaan yang paling mudah. Untuk senarai kecil yang sudah dimuat dalam pelayar, penapisan dalam pelayar lebih mudah lagi.
Adakah saya perlukan Algolia atau Elasticsearch untuk carian?
Biasanya tidak pada peringkat awal. Carian teks penuh Postgres mengendalikan padanan perkataan, kedudukan dan beribu hingga berjuta baris dengan baik. Enjin carian yang dihoskan berbaloi apabila anda perlukan toleransi salah eja yang kuat, hasil segera ketika menaip merentas data yang besar, atau penalaan kerelevanan yang lanjutan.
Mengapa carian saya tidak menjumpai hasil apabila ada salah eja?
Padanan asas dan carian teks penuh standard mencari perkataan seperti yang ditaip (atau bentuk asasnya), jadi salah eja akan terlepas. Anda perlukan padanan kabur, seperti keserupaan trigram dalam Postgres atau enjin carian dengan toleransi salah eja.
Patutkah carian dijalankan dalam pelayar atau pada pelayan?
Pada pelayan untuk apa-apa yang lebih besar daripada senarai awam yang kecil. Carian di bahagian pelayan boleh diskala, menghormati kebenaran dan tidak menghantar keseluruhan set data anda kepada setiap pelawat.