Juhendid

Kuidas lisada äppi otsing: lihtsatest filtritest täistekstiotsinguni

Otsingu lisamiseks alusta lihtsaimast toimivast variandist: otsingukast, mis kutsub serveri marsruuti, filtreerib andmebaasi ridu päringu sobitamisega mõnes veerus, ning filtrid nagu kategooria või hind. Kui see ei piisa – vajad tulemuste järjestust, sõnade tüvestamist või palju kirjeid – lülitu andmebaasi täistekstiotsingule ja hostitud otsingumootorini ainult siis, kui vajad tugevat kirjavigade taluvust või kohest tulemust väga suurte andmete puhul. Ükskõik, mida valid, peab otsing arvestama õigustega: kasutajad ei tohi leida kirjeid, mida nad ei tohi näha.

Mida „otsing“ tähendab sinu äpi jaoks

Otsing hõlmab mitut asja ja enamik äppe vajab rohkem kui ühte:

  • Märksõnaotsing: tekstikast – „leia kuulutused, kus mainitakse „aed““.
  • Filtrid: struktureeritud valikud – kategooria, linn, hinnavahemik, kuupäev, staatus.
  • Sorteerimine: uusimad, odavaimad, kõige asjakohasemad.
  • Automaatne täitmine: soovitused kirjutamise ajal.
  • Kirjavigade taluvus: „restoran“ leiab ka siis, kui kirjutatakse „restuaran“.

Kataloogi, tööotsingu või poe puhul on filtrid sageli tekstikastist olulisemad. Otsusta, mida neist tegelikult vajad, enne tööriista valimist.

Su valikud

LähenemineKuidas töötabSobib kõige pareminiPiirangud
Filtreerimine brauserisLaadi nimekiri, filtreeri seda JavaScriptigaVäikesed avalikud nimekirjad (mõni sada kirjet)Saadab kõik andmed igale külastajale; suurte nimekirjadega aeglane
Andmebaasi mustri sobitamineServeripäring „nimi sisaldab teksti“, suurtähtedest hoolimataVäikesed kuni keskmised äpid, admin-tööriistadJärjestust pole; suurtes tabelites võib aeglustuda; tüvestamist pole
Andmebaasi täistekstiotsingPostgres indekseerib sõnad ja järjestab vastedEnamik sisurikkaid äppeKirjavigade puhul nõrk, kui lisad hägusat sobitamist
Hägune sobitamine (trigrammid)Postgres võrdleb tähejadade sarnasustNimed, lühikesed väljad, kirjavigade taluvusVajab laiendust ja indeksit; häälestamine nõuab tähelepanu
Hostitud otsingumootorEraldi teenus indekseerib sinu andmed (Algolia, Meilisearch, Typesense, Elasticsearch ja teised)Suured kataloogid, kohene otsing, tugev kirjavigade taluvusVeel üks teenus sünkroonida, maksta ja turvata

Kui su andmed on juba Postgresis, on selle sisseehitatud täistekstiotsing tugev vahepealne lahendus. See jagab teksti sõnadeks, taandab need tüvedeks (nii et „jooksmine“ leiab „jooksma“), jätab välja tavalised sõnad ja võib tulemusi järjestada vastavuse järgi. Õige indeksiga jääb see suurtes tabelites kiireks.

Näidisjuhised

Lihtne algus:

Lisa nimekirja lehele otsingukast ja filtrid. Otsing peaks sobitama päringut pealkirja ja kirjelduse vastu, suurtähtedest hoolimata. Filtrid: kategooria (rippmenüü), linn (rippmenüü) ja maksimaalne hind. Tee otsing serveris lehtjaotatud API-marsruudi kaudu, 20 tulemust lehe kohta. Hoia otsing ja filtrid URL-is, et tulemusi saaks jagada ja tagasinupp töötaks. Kui midagi ei leita, näita sõbralikku tühja olekut.

Täistekstiotsinguks üleminek:

Lülita nimekirja otsing Postgresi täistekstiotsingule pealkirjal (kaalutud kõrgemalt) ja kirjeldusel. Lisa õige indeks, järjesta tulemused asjakohasuse järgi ning säilita olemasolevad filtrid ja lehtjaotus. Ära muuda olemasolevaid andmeid.

Kirjavigade taluvus nimede jaoks:

Lisa ettevõtte nime järgi hägune sobitamine, et väikesed kirjavead ikka tulemusi leiaksid. Kasuta trigrammide sarnasust, kui see on saadaval, lisa indeks ja kui ei ole, siis kasuta praegust otsingut.

Samm-sammult

  1. Loetle, mida inimesed otsivad. Millised väljad (pealkiri, kirjeldus, sildid, nimi)? Millised filtrid? Küsi mõnelt päris kasutajalt, kui saad.
  2. Alusta serveris. Lisa API-marsruut, mis võtab päringu ja filtrid ning tagastab ühe lehe tulemusi. Ära laadi kõike brauserisse.
  3. Rakenda õigused päringus. Kui kasutajad näevad ainult oma kirjeid või ainult avaldatud kirjeid, peab see tingimus olema samas päringus kui otsing.
  4. Lisa lehtjaotus algusest peale – lehekülgede numbrid või „lae rohkem“.
  5. Hoia otsingu olek URL-is (näiteks ?q=aed&city=leeds). Nii saab linke jagada, tagasinupp töötab ja otsingumootorid saavad filtreeritud lehed indekseerida, kui seda soovid.
  6. Lükka kirjutamise ajal otsingut edasi (debounce). Oota paar sadat millisekundit pärast kirjutamise lõppu enne päringut, et mitte saata päringut iga klahvivajutuse kohta.
  7. Lisa indeksid, kui tead, millistes veergudes filtreerid ja otsid.
  8. Uuenda täistekstiotsinguks, siis hägusaks sobitamiseks, siis hostitud mootoriks – ainult siis, kui lihtsam samm ebaõnnestub päris kasutajate puhul.
  9. Testi realistlike andmetega: sadade või tuhandete ridadega, ebatavaliste märkidega, tühjade päringute, väga pikkade päringute ja teiste keeltega, kui neid toetad.

Levinud vead

  • Kogu tabeli laadimine brauserisse. 50 kirje puhul on see korras, 50 000 puhul valus, ja see paljastab iga kirje – ka need, mida kasutaja ei tohiks näha.
  • Otsing, mis ignoreerib õigusi. Otsing on tavaline lekkekoht: privaatne või mustandkirje ilmub, sest otsingupäringust jäeti välja tingimus „ainult minu“ või „ainult avaldatud“.
  • SQL-i ehitamine kasutaja sisendist. Kasuta alati parameetritega päringuid. AI-äpilooja teeb seda tavaliselt, aga kontrolli, kui näed stringe kokku liimitud.
  • Tühja olekuta jätmine. „Tulemusi ei leitud“ koos soovitusega (tühjenda filtrid, kontrolli kirjapilti) hoiab inimesed lehelt lahkumast.
  • Indeksite puudumine. Otsing tundub testandmetega korras, aga aeglustub, kui päris andmed kasvavad.
  • Kohe otsinguteenuse juurde hüppamine. Siis pead hoidma teist andmekoopiat sünkroonis, käsitlema kustutusi ja turvama veel ühe võtmekomplekti – sageli ilma nähtava kasuta.
  • Mobiili unustamine. Filtrid peavad mahtuma telefoni; filtrisahtel või kokkuklapitav paneel töötab tavaliselt paremini kui külgriba.

Kontrollnimekiri

  • Tead, millised väljad on otsitavad ja millised filtrid olemas on
  • Otsing töötab serveris ja tagastab lehtjaotatud tulemusi
  • Päring jõustab samu õigusi nagu äpi ülejäänud osa
  • Kasutaja sisend antakse parameetritena, mitte ei liimita SQL-i
  • Otsingu olek on URL-is
  • Kirjutamist lükatakse edasi (debounce)
  • Otsitud ja filtreeritud veerud on indekseeritud
  • Tühi, tulemusteta ja veaolek on selged
  • Testitud realistliku andmemahu ja korrapäratu sisendiga

Otsing Mythexis

Mythexi äpis elavad andmed tavaliselt projekti enda Postgres-andmebaasis, nii et saad alustada ülaltoodud juhistega: esmalt mustri sobitamine, siis Postgresi täistekstiotsing, kui vajad järjestust. Kui tahad hostitud otsingumootorit, too oma konto ja võti, salvesta see projekti saladusena ja palu agendil andmed serveris indekseerida ja neist päringuid teha, nagu on kirjeldatud juhendis Integreeri mis tahes API.

Otsing on paljude äppide tuum: vaata, kuidas see sobib tervikusse juhendites kuidas ehitada kataloogi veebisaiti, kuidas ehitada tööpakkumiste lehte ja kuidas ehitada turgu.

Küsimused

Mis on kõige lihtsam viis otsingu lisamiseks äppi?

Kui su andmed on andmebaasis, on lihtsaim algus serveri marsruut, mis filtreerib ridu teatud veergudes suurtähtedest hoolimatu vastega. Väikese nimekirja puhul, mis on juba brauseris laaditud, on filtreerimine brauseris veelgi lihtsam.

Kas otsinguks on vaja Algoliat või Elasticsearchi?

Algul tavaliselt mitte. Postgresi täistekstiotsing käsitleb sõnade sobitamist, järjestamist ja tuhandeid kuni miljoneid ridu hästi. Hostitud otsingumootor on väärt, kui vajad tugevat kirjavigade taluvust, kohest tulemust sisestamise ajal suurte andmete puhul või keerukat tulemuste järjestuse häälestamist.

Miks minu otsing ei leia tulemusi kirjavigadega?

Põhiline sobitamine ja standardne täistekstiotsing otsivad sõnu nii, nagu need sisestati (või nende tüvesid), seega vea korral midagi ei leita. Vaja on hägust sobitamist (fuzzy), näiteks Postgresi trigrammide sarnasust või otsingumootorit, mis taluvad kirjavigu.

Kas otsing peaks töötama brauseris või serveris?

Serveris, kui tegemist on midagi suuremaga kui väike avalik nimekiri. Serveripoolne otsing skaleerub, arvestab õigusi ega saada kogu andmestikku igale külastajale.

Mythex · Pricing · Ehita kõike AI-ga · Veebilehtede ja rakenduste mallid · Mythex võrdluses · Tehisintellektiga rakenduste ehitamise sõnastik · Tasuta tööriistad tehisintellektiga rakenduste ehitamiseks · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) فارسی 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 简体中文 繁體中文(香港) 繁體中文(台灣)