Kako dodati pretraživanje u svoju aplikaciju: od jednostavnih filtera do potpunog tekstualnog pretraživanja
Za dodavanje pretraživanja u aplikaciju počnite s najjednostavnijim rješenjem koje radi: polje za pretragu koje poziva rutu na poslužitelju, koja filtrira retke baze podataka usporedbom upita s nekoliko stupaca, plus filtere poput kategorije ili cijene. Kada to nije dovoljno, na primjer kada trebate rangiranje relevantnosti, svođenje riječi na korijen ili mnogo zapisa, prijeđite na potpuno tekstualno pretraživanje vaše baze podataka, a hostiranu tražilicu koristite samo ako trebate jaku toleranciju na pogreške ili trenutne rezultate nad vrlo velikim podacima. Što god odaberete, pretraživanje mora poštivati dozvole: korisnici nikada ne smiju pronaći zapise koje ne smiju vidjeti.
Što znači „pretraživanje” za vašu aplikaciju
Pretraživanje obuhvaća nekoliko različitih stvari, a većina aplikacija treba više od jedne:
- Pretraga ključnih riječi: polje za tekst, primjerice „pronađi oglase koji spominju ‚vrt’”.
- Filteri: strukturirani izbori: kategorija, grad, raspon cijena, datum, status.
- Sortiranje: najnovije, najjeftinije, najrelevantnije.
- Automatsko dovršavanje: prijedlozi dok tipkate.
- Tolerancija na pogreške: „restuarant” i dalje pronalazi „restaurant”.
Za imenik, oglasnik za posao ili trgovinu filteri često su važniji od tekstualnog polja. Odlučite što vam stvarno treba prije odabira alata.
Vaše mogućnosti
| Pristup | Kako radi | Dobro za | Ograničenja |
|---|---|---|---|
| Filtriranje u pregledniku | Učitajte popis i filtrirajte ga u JavaScriptu | Mali javni popisi (nekoliko stotina stavki) | Svaki posjetitelj dobije sve podatke; sporo s velikim popisima |
| Podudaranje uzorka u bazi | Upit na poslužitelju „naziv sadrži tekst”, bez razlike između velikih i malih slova | Male do srednje aplikacije, alati za administratore | Nema rangiranja; može biti sporo na velikim tablicama; nema svođenja na korijen |
| Potpuno tekstualno pretraživanje u bazi | Postgres indeksira riječi i rangira podudaranja | Većina aplikacija s puno sadržaja | Slabo s pogreškama u kucanju bez dodavanja neodređenog podudaranja |
| Neodređeno podudaranje (trigrami) | Postgres uspoređuje nizove znakova po sličnosti | Imena, kratka polja, tolerancija na pogreške | Treba proširenje i indeks; podešavanje traje |
| Hostirana tražilica | Zasebna usluga indeksira vaše podatke (Algolia, Meilisearch, Typesense, Elasticsearch i druge) | Velike kataloge, trenutno pretraživanje, jaka tolerancija na pogreške | Još jedna usluga za sinkronizaciju, plaćanje i osiguranje |
Ako su vaši podaci već u Postgresu, njegovo ugrađeno potpuno tekstualno pretraživanje je dobra srednja opcija. Razbija tekst na riječi, svodi ih na korijene (tako se „running” podudara s „run”), zanemaruje česte riječi i može rangirati rezultate prema tome koliko dobro odgovaraju. S pravim indeksom ostaje brzo i na velikim tablicama.
Primjeri uputa
Jednostavan početak:
Dodaj polje za pretragu i filtere na stranicu s oglasima. Pretraga treba podudarati upit s naslovom i opisom, bez razlike između velikih i malih slova. Filteri: kategorija (padajući izbornik), grad (padajući izbornik) i najveća cijena. Pretraživanje radi na poslužitelju kroz API rutu sa straničenjem, 20 rezultata po stranici. Zadrži pretragu i filtere u URL-u kako se rezultati mogu dijeliti i kako gumb natrag radi. Prikaži prijateljsku poruku kada ništa ne odgovara.
Nadogradnja na potpuno tekstualno pretraživanje:
Prebaci pretraživanje oglasa na Postgres potpuno tekstualno pretraživanje po naslovu (s većom težinom) i opisu. Dodaj ispravan indeks, rangiraj rezultate po relevantnosti i zadrži postojeće filtere i straničenje. Ne mijenjaj nijedan postojeći podatak.
Dodavanje tolerancije na pogreške za imena:
Dodaj neodređeno podudaranje po nazivu tvrtke kako bi manje pogreške u kucanju i dalje pronalazile rezultate. Koristi sličnost trigramima ako je dostupna, s indeksom, i vrati se na trenutno pretraživanje ako nije.
Korak po korak
- Popišite što ljudi traže. Koja polja (naslov, opis, oznake, ime)? Koji filteri? Ako možete, pitajte nekoliko stvarnih korisnika.
- Počnite na poslužitelju. Dodajte API rutu koja prima upit i filtere te vraća jednu stranicu rezultata. Ne učitavajte sve u preglednik.
- Primijenite dozvole u upitu. Ako korisnici vide samo svoje zapise ili samo objavljene, to uvjet mora biti u istom upitu kao i pretraga.
- Dodajte straničenje od početka: brojevi stranica ili „učitaj više”.
- Stavite stanje pretrage u URL (primjerice
?q=vrt&city=leeds). Dijeljive poveznice, ispravan gumb natrag i tražilice mogu indeksirati filtrirane stranice ako to želite. - Odgodite pretraživanje dok tipkate. Pričekajte nekoliko stotina milisekundi nakon što prestanete tipkati prije upita, kako ne biste slali zahtjev za svaki pritisak tipke.
- Dodajte indekse kada znate po kojim stupcima filtrirate i pretražujete.
- Nadogradite na potpuno tekstualno pretraživanje, zatim na neodređeno podudaranje, pa na hostiranu tražilicu, ali samo kada jednostavniji korak ne uspije za stvarne korisnike.
- Testirajte s podacima koji izgledaju stvarno: stotine ili tisuće redaka, neobični znakovi, prazni upiti, vrlo dugi upiti, drugi jezici ako ih podržavate.
Česte greške
- Učitavanje cijele tablice u preglednik. Dobro za 50 stavki, boli za 50.000, a izlaže svaki zapis, uključujući one koje korisnik ne smije vidjeti.
- Pretraga koja ignorira dozvole. Pretraga je čest curenje podataka: privatni zapis ili nacrt se pojavi jer upit nije imao uvjet „samo moji” ili „samo objavljeni”.
- Stvaranje SQL-a iz sirovog korisničkog unosa. Uvijek koristite parametrizirane upite. AI alat to obično radi, ali provjerite vidite li nizove koji se lijepe zajedno.
- Nema praznog stanja. „Nema rezultata” s prijedlogom (očisti filtere, provjeri pravopis) sprječava da ljudi odu.
- Nema indeksa. Pretraga izgleda dobro s testnim podacima i usporava kako rastu stvarni podaci.
- Odmah prelazak na uslugu pretraživanja. Tada morate držati drugu kopiju podataka sinkroniziranu, obrađivati brisanja i osiguravati još jedan skup ključeva, često bez vidljive koristi.
- Zaboravljen mobitel. Filteri moraju stati na telefon; izbornik filtera ili sklopivi panel obično radi bolje od bočne trake.
Kontrolni popis
- Znate koja se polja pretražuju i koji filteri postoje
- Pretraga radi na poslužitelju i vraća straničene rezultate
- Upit primjenjuje ista pravila dozvola kao i ostatak aplikacije
- Korisnički unos se prosljeđuje kao parametri, nikada se ne lijepi u SQL
- Stanje pretrage živi u URL-u
- Tipkanje je odgođeno
- Pretraživani i filtrirani stupci su indeksirani
- Prazna stanja, stanja bez rezultata i greške su jasna
- Testirano s realističnim količinama podataka i neurednim unosom
Dodavanje pretraživanja s Mythexom
U aplikaciji izgrađenoj na Mythexu podaci obično žive u Postgres bazi podataka projekta, pa možete započeti s gornjim uputama: najprije podudaranje uzoraka, a zatim potpuno tekstualno pretraživanje Postgresa kada trebate rangiranje. Ako želite hostiranu tražilicu, donesite svoj račun i ključ, spremite ga kao tajnu projekta i zamolite agenta da indeksira i pretražuje s poslužitelja, kako je opisano u Integriraj bilo koji API.
Pretraživanje je srž mnogih aplikacija: pogledajte kako izraditi web imenik, kako izraditi oglasnik za posao i kako izraditi tržnicu da vidite kako se uklapa u ostatak proizvoda.
Pitanja
Koji je najlakši način za dodavanje pretraživanja u aplikaciju?
Ako su vaši podaci u bazi podataka, najlakši početak je ruta na poslužitelju koja filtrira retke usporedbom bez razlike između velikih i malih slova na nekoliko stupaca. Za mali popis koji je već učitan u pregledniku filtriranje u pregledniku je još jednostavnije.
Trebam li Algolia ili Elasticsearch za pretraživanje?
Obično ne na početku. Postgresovo potpuno tekstualno pretraživanje dobro podnosi podudaranje riječi, rangiranje i tisuće do milijune redaka. Hostirana tražilica isplati se kada trebate snažnu toleranciju na pogreške u kucanju, trenutne rezultate dok tipkate nad velikim podacima ili napredno podešavanje relevantnosti.
Zašto moje pretraživanje ne pronalazi rezultate s pogreškama u kucanju?
Osnovno podudaranje i standardno potpuno tekstualno pretraživanje traže riječi kako su upisane (ili njihove korijene), pa pogrešno napisana riječ promaši. Trebate neodređeno podudaranje, primjerice sličnost trigramima u Postgresu ili tražilicu s tolerancijom na pogreške.
Treba li pretraživanje raditi u pregledniku ili na poslužitelju?
Na poslužitelju za sve što nije malen javni popis. Pretraživanje na poslužitelju se skalira, poštuje dozvole i ne šalje cijeli skup podataka svakom posjetitelju.