Guider

Så lägger du till sök i din app: från enkla filter till fulltextsökning

För att lägga till sök i din app, börja med det enklaste som fungerar: en sökruta som anropar en serverrutt, som filtrerar databasraderna genom att matcha frågan mot några kolumner, plus filter för saker som kategori eller pris. När det inte räcker, till exempel när du behöver rangordning efter relevans, ordstamning eller många poster, byt till databasens fulltextsökning. Gå bara över till en hostad sökmotor om du behöver stark tolerans för stavfel eller direkta resultat över mycket stora datamängder. Oavsett vilket du väljer måste sökningen respektera behörigheter: användare ska aldrig kunna hitta poster de inte får se.

Vad "sök" betyder för din app

Sök omfattar några olika saker, och de flesta appar behöver mer än ett:

  • Nyckelordssökning: en textruta, "hitta annonser som nämner 'trädgård'".
  • Filter: strukturerade val, till exempel kategori, stad, prisintervall, datum eller status.
  • Sortering: nyast, billigast, mest relevant.
  • Autokomplettering: förslag medan man skriver.
  • Tolerans för stavfel: "restuarang" hittar fortfarande "restaurang".

För en katalog, jobbsida eller butik är filtren ofta viktigare än textrutan. Bestäm vilka av dessa du faktiskt behöver innan du väljer verktyg.

Dina alternativ

MetodSå fungerar denBra förBegränsningar
Filtrera i webbläsarenLadda listan och filtrera den i JavaScriptSmå publika listor (några hundra poster)Skickar all data till varje besökare; långsam med stora listor
Mönstermatchning i databasenServerfråga som "namnet innehåller texten", skiftlägesoberoendeSmå till medelstora appar, adminverktygIngen rangordning; kan bli långsam på stora tabeller; ingen ordstamning
Fulltextsökning i databasenPostgres indexerar ord och rangordnar träffarDe flesta innehållstunga apparSvag mot stavfel om du inte lägger till fuzzy-matchning
Fuzzy-matchning (trigram)Postgres jämför teckenföljder för likhetNamn, korta fält, tolerans för stavfelKräver ett tillägg och ett index; justering tar tid
Hostad sökmotorEn separat tjänst indexerar din data (Algolia, Meilisearch, Typesense, Elasticsearch och andra)Stora kataloger, direkt sökning, hög tolerans för stavfelYtterligare en tjänst att hålla synkad, betala för och säkra

Om din data redan finns i Postgres är dess inbyggda fulltextsökning ett starkt mellanting. Den delar upp text i ord, reducerar dem till stammar (så att "springer" matchar "spring"), ignorerar vanliga ord och kan rangordna resultat efter hur väl de matchar. Med rätt index förblir den snabb på stora tabeller.

Exempelprompter

En enkel start:

Lägg till en sökruta och filter på annonssidan. Sökningen ska matcha frågan mot titel och beskrivning, utan skillnad på versaler och gemener. Filter: kategori (rullista), stad (rullista) och högsta pris. Gör sökningen på servern med en sidindelad API-rutt, 20 resultat per sida. Behåll sökningen och filtren i URL:en så att resultaten kan delas och bakåtknappen fungerar. Visa ett vänligt tomläge när inget matchar.

Uppgradering till fulltextsökning:

Byt annonssökningen till Postgres fulltextsökning på titel (viktad högre) och beskrivning. Lägg till rätt index, rangordna resultat efter relevans och behåll de befintliga filtren och sidindelningen. Ändra ingen befintlig data.

Lägga till tolerans för stavfel i namn:

Lägg till fuzzy-matchning på företagsnamn så att små stavfel ändå ger träffar. Använd trigramlikhet om det finns, med ett index, och gå tillbaka till nuvarande sökning om det inte finns.

Steg för steg

  1. Lista vad folk söker efter. Vilka fält (titel, beskrivning, taggar, namn)? Vilka filter? Fråga några riktiga användare om du kan.
  2. Börja på servern. Lägg till en API-rutt som tar emot frågan och filtren och returnerar en sida med resultat. Ladda inte in allt i webbläsaren.
  3. Tillämpa behörigheter i frågan. Om användare bara ser sina egna poster, eller bara publicerade, hör det villkoret hemma i samma fråga som sökningen.
  4. Lägg till sidindelning från dag ett: sidnummer eller "ladda fler".
  5. Lägg sökstatus i URL:en (till exempel ?q=trädgård&city=leeds). Delbara länkar, en fungerande bakåtknapp och sökmotorer kan indexera filtrerade sidor om du vill att de ska göra det.
  6. Fördröj sökning vid skrivning. Vänta några hundra millisekunder efter att du slutat skriva innan du söker, så att du inte skickar en förfrågan per tangenttryckning.
  7. Lägg till index när du vet vilka kolumner du filtrerar och söker på.
  8. Uppgradera till fulltextsökning, sedan fuzzy-matchning, sedan en hostad motor, men bara när den enklare nivån inte räcker för riktiga användare.
  9. Testa med verklighetsnära data: hundratals eller tusentals rader, konstiga tecken, tomma frågor, mycket långa frågor och andra språk om du stödjer dem.

Vanliga misstag

  • Att ladda hela tabellen i webbläsaren. Det går bra för 50 poster, men är smärtsamt för 50 000, och det exponerar varje post, även de användaren inte borde se.
  • Sök som ignorerar behörigheter. Sök är ett vanligt läckage: en privat post eller ett utkast syns eftersom sökfrågan glömde villkoret "bara mina" eller "bara publicerade".
  • Att bygga SQL av råa användarindata. Använd alltid parametriserade frågor. En AI-byggare gör oftast så, men kontrollera om du ser strängar som limmas ihop.
  • Inget tomläge. "Inga resultat" med ett förslag (rensa filter, kontrollera stavningen) gör att folk inte lämnar sidan.
  • Inga index. Sök känns bra med testdata och blir långsammare när riktig data växer.
  • Att direkt hoppa till en söktjänst. Då måste du hålla en andra kopia av din data synkad, hantera borttagningar och säkra ytterligare en uppsättning nycklar, ofta utan synlig vinst.
  • Att glömma mobilen. Filtren måste få plats på en telefon; en filterlåda eller en hopfällbar panel fungerar oftast bättre än en sidopanel.

Checklista

  • Du vet vilka fält som söks i och vilka filter som finns
  • Sökningen körs på servern och returnerar sidindelade resultat
  • Frågan tillämpar samma behörigheter som resten av appen
  • Användarindata skickas som parametrar, aldrig limmas in i SQL
  • Sökstatus ligger i URL:en
  • Skrivningen är fördröjd
  • Sökta och filtrerade kolumner är indexerade
  • Tomma lägen, lägen utan resultat och felmeddelanden är tydliga
  • Testad med realistiska datamängder och rörig indata

Lägga till sök med Mythex

I en app byggd på Mythex ligger datan oftast i projektets egna Postgres-databas, så du kan börja med prompterna ovan: mönstermatchning först, sedan Postgres fulltextsökning när du behöver rangordning. Om du vill ha en hostad sökmotor tar du med ditt eget konto och din egen nyckel, sparar den som en projekthemlighet och ber agenten att indexera och söka i den från servern, enligt beskrivningen i Integrate any API.

Sök är kärnan i många appar: se hur man bygger en katalogwebbplats, hur man bygger en jobbsida och hur man bygger en marknadsplats för hur det passar in i resten av produkten.

Frågor

Vad är det enklaste sättet att lägga till sök i en app?

Om din data ligger i en databas är det enklaste starten en serverrutt som filtrerar rader med en skiftlägesoberoende matchning på några kolumner. För en liten lista som redan laddats i webbläsaren är filtrering i webbläsaren ännu enklare.

Behöver jag Algolia eller Elasticsearch för sök?

Oftast inte i början. Postgres fulltextsökning klarar ordmatchning, rangordning och allt från tusentals till miljontals rader väl. En hostad sökmotor är värd det när du behöver stark tolerans för stavfel, direkta resultat medan du skriver över stora datamängder eller avancerad finjustering av relevans.

Varför hittar min sökning inte resultat med stavfel?

Enkel matchning och standardiserad fulltextsökning letar efter orden som de skrivs (eller deras stammar), så ett felstavat ord missar. Du behöver fuzzy-matchning, till exempel trigramlikhet i Postgres eller en sökmotor med tolerans för stavfel.

Ska sökningen köras i webbläsaren eller på servern?

På servern för allt utöver en liten publik lista. Sökning på servern skalar, respekterar behörigheter och skickar inte hela din datamängd till varje besökare.

Mythex · Pricing · Bygg vad som helst med AI · Mallar för webbplatser och appar · Mythex jämfört · Ordlista för apputveckling med AI · Gratis verktyg för apputveckling med AI · English

English አማርኛ العربية Български বাংলা Bosanski 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 Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)