Keresés hozzáadása az appodhoz: az egyszerű szűrőktől a teljes szövegű keresésig
Ahhoz, hogy keresést adj az appodhoz, kezdd a legegyszerűbb működő megoldással: egy keresőmezővel, amely szerveroldali útvonalat hív, ez pedig az adatbázis-sorokat a lekérdezés néhány oszlopon történő egyeztetésével szűri, a kategóriára vagy az árra vonatkozó szűrőkkel együtt. Ha ez már nem elég – relevancia szerinti rangsorolásra, szótőre keresésre vagy sok rekordra van szükséged –, térj át az adatbázisod teljes szövegű keresésére, és csak akkor válts hosztolt keresőmotorra, ha erős elírás-toleranciára vagy azonnali találatokra van szükséged nagy adatmennyiségen. Bármelyiket is választod, a keresésnek tiszteletben kell tartania a jogosultságokat: a felhasználók soha ne találjanak meg olyan rekordot, amelyet nem láthatnak.
Mit jelent a „keresés” az appodnál
A keresés több különböző dolgot takar, és a legtöbb appnak egynél többre van szüksége:
- Kulcsszavas keresés: egy szövegmező – „keresd azokat a hirdetéseket, amelyek a »kert« szót említik”.
- Szűrők: strukturált választások – kategória, város, árkategória, dátum, állapot.
- Rendezés: legújabb, legolcsóbb, legrelevánsabb.
- Automatikus kiegészítés: javaslatok gépelés közben.
- Elírás-tolerancia: a „restuarant” is megtalálja a „restaurant”-ot.
Egy könyvtárnál, állásportálnál vagy boltnál a szűrők gyakran fontosabbak, mint a szövegmező. Döntsd el, melyekre van valóban szükséged, mielőtt eszközt választasz.
Lehetőségek
| Megközelítés | Hogyan működik | Jó ehhez | Korlátok |
|---|---|---|---|
| Szűrés a böngészőben | Betöltöd a listát, és JavaScripttel szűröd | Kis nyilvános listák (néhány száz elem) | Minden adatot elküld minden látogatónak; nagy listáknál lassú |
| Adatbázis-mintaillesztés | Szerveri lekérdezés: „a név tartalmazza a szöveget”, kis- és nagybetű-érzéketlen | Kis és közepes appok, admin eszközök | Nincs rangsorolás; nagy táblákon lassú lehet; nincs szótövezés |
| Adatbázis teljes szövegű keresése | A Postgres szavakra bontja és rangsorolja az egyezéseket | A legtöbb tartalomgazdag app | Elírásokra gyenge, hacsak nem adsz hozzá fuzzy illesztést |
| Fuzzy illesztés (trigramok) | A Postgres karaktersorozatok hasonlóságát hasonlítja össze | Nevek, rövid mezők, elírás-tolerancia | Bővítmény és index kell; a hangolás időt igényel |
| Hosztolt keresőmotor | Külön szolgáltatás indexeli az adataidat (Algolia, Meilisearch, Typesense, Elasticsearch és mások) | Nagy katalógusok, azonnali keresés, erős elírás-tolerancia | Még egy szolgáltatás, amelyet szinkronban kell tartani, fizetni érte és biztonságban tartani |
Ha az adataid már a Postgresben vannak, annak beépített teljes szövegű keresése erős középutat jelent. A szöveget szavakra bontja, szótövekre redukálja (így a „running” egyezik a „run”-nal), figyelmen kívül hagyja a gyakori szavakat, és rangsorolhatja a találatokat az egyezés minősége szerint. Megfelelő indexszel nagy táblákon is gyors marad.
Példa promptok
Egyszerű kezdés:
Adj egy keresőmezőt és szűrőket a hirdetések oldalához. A keresés a lekérdezést a címmel és a leírással egyezteti, kis- és nagybetű-érzéketlenül. Szűrők: kategória (legördülő), város (legördülő) és maximális ár. A keresést szerveren végezd, lapozható API-útvonalon, oldalanként 20 találattal. A keresés és a szűrők legyenek az URL-ben, hogy az eredmények megoszthatók legyenek, a vissza gomb pedig működjön. Ha semmi nem egyezik, mutass barátságos üres állapotot.
Átállás teljes szövegű keresésre:
Állítsd át a hirdetések keresését Postgres teljes szövegű keresésre a címen (magasabb súllyal) és a leíráson. Adj hozzá a megfelelő indexet, rangsorold a találatokat relevancia szerint, és tartsd meg a meglévő szűrőket és lapozást. Ne változtass meglévő adatokon.
Elírás-tolerancia neveknél:
Adj hozzá fuzzy illesztést a cégnévre, hogy a kis elírások is találatot adjanak. Ha elérhető, használj trigram-hasonlóságot, indexszel, és ha nem, térj vissza a jelenlegi kereséshez.
Lépésről lépésre
- Sorold fel, mit keresnek az emberek. Mely mezők (cím, leírás, címkék, név)? Mely szűrők? Ha tudsz, kérdezz meg néhány valódi felhasználót.
- Kezdd szerveroldalon. Adj hozzá egy API-útvonalat, amely a lekérdezést és a szűrőket fogadja, és egy oldalnyi találatot ad vissza. Ne tölts be mindent a böngészőbe.
- Alkalmazd a jogosultságokat a lekérdezésben. Ha a felhasználók csak a saját rekordjaikat vagy csak a közzétetteket látják, ez a feltétel ugyanabba a lekérdezésbe tartozik, mint a keresés.
- Adj lapozást az elejétől. Oldalszámok vagy „több betöltése”.
- Tedd a keresési állapotot az URL-be (például
?q=garden&city=leeds). A megosztható linkek, a működő vissza gomb, és a keresőrobotok is bejárhatják a szűrt oldalakat, ha ezt szeretnéd. - Késleltesd a gépelés közbeni keresést. Néhány száz milliszekundumot várj a gépelés befejezése után, mielőtt lekérdeznél, hogy ne menjen kérés minden billentyűleütésre.
- Adj indexeket, amint tudod, mely oszlopokra szűrsz és keresel.
- Fejlessz tovább: teljes szövegű keresés, majd fuzzy illesztés, majd hosztolt motor – csak akkor, ha az egyszerűbb lépés valódi felhasználóknál már nem elég.
- Teszteld valósághű adatokkal: több száz vagy több ezer sorral, furcsa karakterekkel, üres lekérdezésekkel, nagyon hosszú lekérdezésekkel, és más nyelveken, ha támogatod őket.
Gyakori hibák
- Az egész tábla betöltése a böngészőbe. Ötven elemnél rendben van, ötvenezernél fájdalmas, és minden rekordot kiteszel – még azokat is, amelyeket a felhasználó nem láthat.
- Jogosultságokat figyelmen kívül hagyó keresés. A keresés gyakori szivárgási pont: egy privát vagy piszkozat-rekord megjelenik, mert a lekérdezésből kimaradt a „csak az enyém” vagy „csak a közzétett” feltétel.
- SQL építése nyers felhasználói bemenetből. Mindig paraméterezett lekérdezéseket használj. Az MI-alapú építők általában így tesznek, de nézd meg, ha stringeket látsz összefűzve.
- Nincs üres állapot. A „nincs találat” üzenet javaslattal (szűrők törlése, a helyesírás ellenőrzése) megakadályozza, hogy az emberek elhagyják az oldalt.
- Nincsenek indexek. A keresés tesztadatokkal rendben van, de ahogy nő a valódi adat, lelassul.
- Rögtön keresőszolgáltatáshoz nyúlni. Ekkor az adatodnak egy második példányát kell szinkronban tartanod, kezelned a törléseket, és egy újabb kulcskészletet biztonságban tartanod – gyakran látható haszon nélkül.
- A mobil elfelejtése. A szűrőknek elférniük kell a telefonon; a szűrőfiók vagy összecsukható panel általában jobb, mint az oldalsáv.
Ellenőrzőlista
- Tudod, mely mezők kerülnek keresésbe, és mely szűrők léteznek
- A keresés a szerveren fut, és lapozott eredményeket ad vissza
- A lekérdezés ugyanazokat a jogosultságokat érvényesíti, mint az app többi része
- A felhasználói bemenet paraméterként kerül át, soha nem fűződik SQL-be
- A keresési állapot az URL-ben van
- A gépelés késleltetve van
- A keresett és szűrt oszlopok indexelve vannak
- Az üres, a nincs-találat és a hiba állapotok egyértelműek
- Tesztelve valósághű adatmennyiséggel és rendetlen bemenettel
Keresés hozzáadása a Mythexszel
A Mythexen épített appokban az adatok általában a projekt saját Postgres-adatbázisában élnek, így a fenti promptokkal lehet kezdeni: először mintaillesztés, majd Postgres teljes szövegű keresés, amikor rangsorolásra van szükséged. Ha hosztolt keresőmotort szeretnél, hozd a saját fiókodat és kulcsodat, tárold projekt-titokként, és kérd meg az ügynököt, hogy a szerveren indexelje és kérdezze le, ahogy az Integrate any API recept leírja.
A keresés sok app szíve: a könyvtárwebhely építése, az állásportál építése és a piactér építése útmutatók mutatják be, hogyan illeszkedik a keresés a termék többi részéhez.
Kérdések
Mi a legegyszerűbb módja a keresés hozzáadásának egy appban?
Ha az adataid adatbázisban vannak, a legegyszerűbb kezdet egy szerveroldali útvonal, amely kis- és nagybetű-érzéketlen egyezéssel szűri a sorokat néhány oszlopon. Egy kis listánál, amely már be van töltve a böngészőbe, a szűrés a böngészőben még ennél is egyszerűbb.
Kell Algolia vagy Elasticsearch a kereséshez?
Kezdetben általában nem. A Postgres teljes szövegű keresése jól kezeli a szóillesztést, a rangsorolást, és a több ezer-millió soros adatállományt. Hosztolt keresőmotor akkor éri meg, ha erős elírás-toleranciára, azonnali találatokra a nagy adatmennyiségen, vagy összetett relevancia-hangolásra van szükséged.
Miért nem talál a keresésem elírással?
Az alap illesztés és a szabványos teljes szövegű keresés a beírt szavakat (vagy azok tőalakját) keresi, így az elírás elsiklik. Fuzzy illesztésre van szükséged, például trigram-hasonlóságra a Postgresben, vagy olyan keresőmotorra, amely tolerálja az elírásokat.
A böngészőben vagy a szerveren fusson a keresés?
A szerveren bármi olyan esetben, ami egy kis nyilvános listánál több. A szerveroldali keresés skálázódik, betartja a jogosultságokat, és nem küldi el az egész adatállományodat minden látogatónak.