Vodiči

Kako dodati pretragu u aplikaciju: od jednostavnih filtera do potpune pretrage teksta

Da biste dodali pretragu u aplikaciju, počnite s najjednostavnijim rješenjem koje radi: polje za pretragu koje poziva serversku rutu, a ona filtrira redove baze podataka poređenjem upita s nekoliko kolona, plus filtere za stvari poput kategorije ili cijene. Kad to nije dovoljno — trebate rangiranje relevantnosti, svođenje riječi na korijen ili mnogo zapisa — prijeđite na pretragu teksta u vašoj bazi podataka, a na hostovani pretraživač prelazite tek ako trebate jaku toleranciju na greške ili trenutne rezultate nad vrlo velikim podacima. Šta god izaberete, pretraga mora poštovati dozvole: korisnici nikad ne smiju pronaći zapise koje ne smiju vidjeti.

Šta „pretraga“ znači za vašu aplikaciju

Pretraga obuhvata nekoliko različitih stvari, a većini aplikacija treba više od jedne:

  • Pretraga po ključnim riječima: polje za tekst — „pronađi oglase koji spominju 'vrt'“.
  • Filteri: strukturisani izbori — kategorija, grad, raspon cijene, datum, status.
  • Sortiranje: najnovije, najjeftinije, najrelevantnije.
  • Automatsko dovršavanje: prijedlozi dok kucate.
  • Tolerancija na greške: „restuarant“ i dalje nalazi „restaurant“.

Za imenik, oglase za posao ili prodavnicu filteri često važe više od polja za tekst. Odlučite koje od ovoga zaista trebate prije izbora alata.

Vaše opcije

PristupKako radiDobro zaOgraničenja
Filtriranje u browseruUčitate spisak i filtrirate ga u JavaScriptuMali javni spiskovi (nekoliko stotina stavki)Šalje sve podatke svakom posjetiocu; sporo s velikim spiskovima
Poklapanje uzorka u baziUpit na serveru tipa „naziv sadrži tekst“, bez razlike u velikim i malim slovimaMale do srednje aplikacije, alate za administratoreNema rangiranja; može biti sporo na velikim tabelama; nema svođenja na korijen
Pretraga teksta u baziPostgres indeksira riječi i rangira poklapanjaVećinu aplikacija s puno sadržajaSlabo s greškama u kucanju, osim ako dodate fuzzy poklapanje
Fuzzy poklapanje (trigrami)Postgres poredi nizove znakova po sličnostiImena, kratka polja, tolerancija na greškeTreba ekstenziju i indeks; podešavanje zahtijeva pažnju
Hostovani pretraživačPoseban servis indeksira vaše podatke (Algolia, Meilisearch, Typesense, Elasticsearch i drugi)Velike kataloge, trenutnu pretragu, jaku toleranciju na greškeJoš jedan servis za održavanje sinhronizacije, plaćanje i osiguranje

Ako su vaši podaci već u Postgresu, njegova ugrađena pretraga teksta je dobar srednji put. Ona dijeli tekst na riječi, svodi ih na korijene (pa se „running“ poklapa s „run“), zanemaruje česte riječi i može rangirati rezultate prema tome koliko dobro odgovaraju. S pravim indeksom ostaje brza na velikim tabelama.

Primjeri upita

Jednostavan početak:

Dodaj polje za pretragu i filtere na stranicu oglasa. Pretraga treba da poredi upit s naslovom i opisom, bez razlike u velikim i malim slovima. Filteri: kategorija (padajući meni), grad (padajući meni) i maksimalna cijena. Pretragu radi na serveru preko API rute sa stranicama, 20 rezultata po stranici. Čuvaj pretragu i filtere u URL-u da se rezultati mogu dijeliti i da dugme nazad radi. Prikaži prijateljsko stanje praznog rezultata kad ništa ne odgovara.

Nadogradnja na pretragu teksta:

Prebaci pretragu oglasa na Postgres pretragu teksta nad naslovom (većim prioritetom) i opisom. Dodaj odgovarajući indeks, rangiraj rezultate po relevantnosti i zadrži postojeće filtere i stranice. Ne mijenjaj postojeće podatke.

Dodavanje tolerancije na greške za imena:

Dodaj fuzzy poklapanje po nazivu firme da i mali pravopisni problemi nađu rezultate. Koristi sličnost trigrama ako je dostupna, s indeksom, a ako nije, vrati se na trenutnu pretragu.

Korak po korak

  1. Napišite šta ljudi traže. Koja polja (naslov, opis, oznake, naziv)? Koji filteri? Ako možete, pitajte nekoliko stvarnih korisnika.
  2. Počnite na serveru. Dodajte API rutu koja prima upit i filtere i vraća jednu stranicu rezultata. Ne učitavajte sve u browser.
  3. Primijenite dozvole u upitu. Ako korisnici vide samo svoje zapise ili samo objavljene, taj uslov pripada u isti upit kao pretraga.
  4. Dodajte stranicavanje od prvog dana — brojeve stranica ili „učitaj više“.
  5. Stavite stanje pretrage u URL (na primjer ?q=garden&city=leeds). Linkovi za dijeljenje, ispravno dugme nazad i pretraživači mogu indeksirati filtrirane stranice ako to želite.
  6. Odgodite pretragu dok kucate. Sačekajte nekoliko stotina milisekundi nakon što prestanete kucati prije slanja upita, da ne šaljete zahtjev za svaki pritisak tipke.
  7. Dodajte indekse kad znate po kojim kolonama filtrirate i pretražujete.
  8. Nadograđujte na pretragu teksta, zatim na fuzzy poklapanje, pa na hostovani pretraživač — samo kad jednostavniji korak ne uspijeva kod stvarnih korisnika.
  9. Testirajte s podacima sličnim stvarnima: stotine ili hiljade redova, neobični znakovi, prazni upiti, vrlo dugi upiti, drugi jezici ako ih podržavate.

Česte greške

  • Učitavanje cijele tabele u browser. Dobro za 50 stavki, bolno za 50.000, i izlaže svaki zapis — uključujući one koje korisnik ne smije vidjeti.
  • Pretraga koja ignoriše dozvole. Pretraga je čest izvor curenja: privatan ili nacrt zapisa se pojavi jer upit za pretragu nije uključio uslov „samo moje“ ili „samo objavljeno“.
  • Pravljenje SQL-a od sirovog unosa korisnika. Uvijek koristite parametrizovane upite. AI alat to obično radi, ali provjerite ako vidite da se stringovi lijepe zajedno.
  • Nema stanja praznog rezultata. „Nema rezultata“ uz prijedlog (očistite filtere, provjerite pravopis) sprječava da ljudi odu.
  • Nema indeksa. Pretraga djeluje dobro s test podacima, a usporava kako rastu pravi podaci.
  • Odmah prelazak na servis za pretragu. Tada morate držati drugu kopiju podataka sinhronizovanu, obrađivati brisanja i osiguravati još jedan skup ključeva — često bez vidljive koristi.
  • Zaboravljen telefon. Filteri moraju stati na telefon; fioka s filterima ili sklopivi panel obično radi bolje od bočne trake.

Kontrolna lista

  • Znate koja se polja pretražuju i koji filteri postoje
  • Pretraga radi na serveru i vraća rezultate sa stranicama
  • Upit provodi iste dozvole kao ostatak aplikacije
  • Unos korisnika prosljeđuje se kao parametri, nikad se ne lijepi u SQL
  • Stanje pretrage živi u URL-u
  • Kucanje je odgođeno
  • Pretraživane i filtrirane kolone su indeksirane
  • Stanja praznog, bez rezultata i greške su jasna
  • Testirano s realnim obimom podataka i neurednim unosom

Dodavanje pretrage uz Mythex

U aplikaciji izgrađenoj na Mythexu podaci obično žive u Postgres bazi podataka projekta, pa možete početi s gornjim upitima: prvo poklapanje uzorka, zatim pretraga teksta u Postgresu kad trebate rangiranje. Ako želite hostovani pretraživač, donesite svoj nalog i ključ, sačuvajte ga kao tajnu projekta i zatražite od agenta da indeksira i pretražuje preko servera, kako je opisano u Integrate any API.

Pretraga je srž mnogih aplikacija: pogledajte kako napraviti web imenik, kako napraviti oglasnik za posao i kako napraviti tržnicu za to kako se uklapa u ostatak proizvoda.

Pitanja

Koji je najlakši način za dodavanje pretrage u aplikaciju?

Ako su vaši podaci u bazi, serverska ruta koja filtrira redove pomoću poređenja bez razlike u velikim i malim slovima na nekoliko kolona je najlakši početak. Za mali spisak koji je već učitan u browseru, filtriranje u browseru je još jednostavnije.

Treba li mi Algolia ili Elasticsearch za pretragu?

Obično ne na početku. Postgres pretraga teksta dobro radi s poklapanjem riječi, rangiranjem i hiljadama do milionima redova. Hostovani pretraživač se isplati kad trebate jaku toleranciju na greške, trenutne rezultate dok kucate nad velikim podacima ili napredno podešavanje relevantnosti.

Zašto moja pretraga ne nalazi rezultate kad ima grešaka u kucanju?

Osnovno poklapanje i standardna pretraga teksta traže riječi onako kako su upisane (ili njihove korijene), pa pogrešno napisana riječ promašuje. Trebate fuzzy poklapanje, na primjer sličnost trigrama u Postgresu ili pretraživač s tolerancijom na greške.

Treba li pretraga raditi u browseru ili na serveru?

Na serveru, za sve osim malog javnog spiska. Pretraga na serveru se skalira, poštuje dozvole i ne šalje cijeli skup podataka svakom posjetiocu.

Mythex · Pricing · Izradite bilo šta uz AI · Šabloni za web stranice i aplikacije · Mythex u poređenju · Rječnik izrade aplikacija uz AI · Besplatni alati za izradu aplikacija uz AI · English

English አማርኛ العربية Български বাংলা Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)