Kuinka lisätä haku sovellukseesi: yksinkertaisista suodattimista koko tekstin hakuun
Kun haluat lisätä haun sovellukseesi, aloita yksinkertaisimmalla toimivalla: hakukenttä, joka kutsuu palvelinreittiä. Reitti suodattaa tietokannan rivejä vertaamalla hakua muutamaan sarakkeeseen, ja lisäksi tarjolla on suodattimia, kuten kategoria tai hinta. Kun tämä ei riitä — tarvitset relevanssijärjestystä, sanojen taivutusten käsittelyä tai paljon tietueita — siirry tietokantasi koko tekstin hakuun, ja siirry hostattuun hakupalveluun vain, jos tarvitset vahvaa kirjoitusvirheiden sietoa tai välittömiä tuloksia hyvin suurella datalla. Mitä ikinä valitset, haun täytyy noudattaa oikeuksia: käyttäjät eivät saa koskaan löytää tietueita, joihin heillä ei ole pääsyä.
Mitä "haku" tarkoittaa sovelluksellesi
Haku kattaa useita eri asioita, ja useimmat sovellukset tarvitsevat useampaa kuin yhtä:
- Avainsanahaku: tekstikenttä — "etsi ilmoituksia, joissa mainitaan 'puutarha'".
- Suodattimet: rakenteelliset valinnat — kategoria, kaupunki, hintaväli, päivämäärä, tila.
- Lajittelu: uusin, halvin, relevanttein.
- Automaattinen täydennys: ehdotuksia kirjoittaessa.
- Kirjoitusvirheiden sietokyky: "ravintloa" löytää yhä "ravintola"-sanan.
Hakemistolle, työpaikkasivustolle tai kaupalle suodattimet ovat usein tekstikenttää tärkeämpiä. Päätä, mitä näistä todella tarvitset, ennen kuin valitset työkalun.
Vaihtoehtosi
| Lähestymistapa | Toimintatapa | Sopii | Rajoitukset |
|---|---|---|---|
| Suodatus selaimessa | Lataa lista, suodata JavaScriptillä | Pienet julkiset listat (muutama sata kohdetta) | Lähettää kaiken datan jokaiselle kävijälle; hidas isoilla listoilla |
| Tietokannan kaavahaku | Palvelinkysely "nimi sisältää tekstin", kirjainkoosta riippumaton | Pienet ja keskisuuret sovellukset, hallintatyökalut | Ei järjestystä; voi hidastua suurilla tauluilla; ei taivutusten käsittelyä |
| Tietokannan koko tekstin haku | Postgres indeksoi sanat ja järjestää osumat | Sisältörikkaat sovellukset | Heikko kirjoitusvirheiden kanssa, ellei lisää sumeaa vertailua |
| Sumea vertailu (trigrammit) | Postgres vertaa merkkijonojen samankaltaisuutta | Nimet, lyhyet kentät, kirjoitusvirheiden sieto | Vaatii laajennuksen ja indeksin; viritys vie aikaa |
| Hostattu hakupalvelu | Erillinen palvelu indeksoi datasi (Algolia, Meilisearch, Typesense, Elasticsearch ja muut) | Suuret katalogit, välitön haku, vahva kirjoitusvirheiden sieto | Toinen palvelu synkronoitavaksi, maksettavaksi ja suojattavaksi |
Jos datasi on jo Postgresissä, sen sisäänrakennettu koko tekstin haku on vahva välimuoto. Se jakaa tekstin sanoiksi, pelkistää ne varsiksi (jolloin "juokseminen" löytää "juosta"), jättää yleiset sanat pois ja voi järjestää tulokset sen mukaan, kuinka hyvin ne osuvat. Oikealla indeksillä se pysyy nopeana suurillakin tauluilla.
Esimerkkikehotteet
Yksinkertainen alku:
Lisää hakukenttä ja suodattimet ilmoitussivulle. Haun pitää vertaa hakua otsikkoon ja kuvaukseen kirjainkoosta riippumatta. Suodattimet: kategoria (pudotusvalikko), kaupunki (pudotusvalikko) ja enimmäishinta. Tee haku palvelimella sivutettuna API-reittinä, 20 tulosta sivulla. Pidä haku ja suodattimet URL-osoitteessa, jotta tuloksia voi jakaa ja takaisin-painike toimii. Näytä selkeä tyhjä tila, kun mikään ei täsmää.
Koko tekstin hakuun siirtyminen:
Vaihda ilmoitushaku Postgresin koko tekstin hakuun otsikon (painotettu korkeammalle) ja kuvauksen päälle. Lisää oikea indeksi, järjestä tulokset relevanssin mukaan ja säilytä nykyiset suodattimet ja sivutus. Älä muuta olemassa olevaa dataa.
Kirjoitusvirheiden sietoa nimille:
Lisää sumea vertailu yrityksen nimeen, jotta pienet kirjoitusvirheet löytävät yhä tuloksia. Käytä trigrammien samankaltaisuutta, jos saatavilla, indeksin kanssa, ja palaa nykyiseen hakuun, jos se ei ole käytettävissä.
Vaihe vaiheelta
- Listaa, mitä ihmiset hakevat. Mitä kenttiä (otsikko, kuvaus, tagit, nimi)? Mitä suodattimia? Kysy muutamalta oikealta käyttäjältä, jos voit.
- Aloita palvelimelta. Lisää API-reitti, joka ottaa haun ja suodattimet ja palauttaa yhden sivun tuloksia. Älä lataa kaikkea selaimeen.
- Sovella oikeudet kyselyyn. Jos käyttäjät näkevät vain omat tietueensa tai vain julkaistut, se ehto kuuluu samaan kyselyyn kuin haku.
- Lisää sivutus alusta asti — sivunumerot tai "lataa lisää".
- Pidä haun tila URL-osoitteessa (esimerkiksi
?q=puutarha&city=leeds). Jaettavat linkit, toimiva takaisin-painike ja hakukoneet voivat indeksoida suodatetut sivut, jos haluat. - Viivästä haku kirjoitettaessa. Odota muutama sata millisekuntia kirjoittamisen lopettamisen jälkeen ennen kyselyä, ettei jokaisesta näppäinpainalluksesta lähde pyyntöä.
- Lisää indeksit, kun tiedät, mitä sarakkeita suodatat ja haet.
- Päivitä koko tekstin hakuun, sitten sumeaan vertailuun, sitten hostattuun palveluun — vain kun yksinkertaisempi vaihe ei riitä oikeille käyttäjille.
- Testaa realistisella datalla: sadoilla tai tuhansilla riveillä, erikoismerkeillä, tyhjillä kyselyillä, hyvin pitkillä kyselyillä ja muilla kielillä, jos tuet niitä.
Yleisimmät virheet
- Koko taulun lataaminen selaimeen. Hyvä 50 kohteelle, tuskallinen 50 000 kohteelle, ja se paljastaa jokaisen tietueen — myös ne, joita käyttäjän ei pitäisi nähdä.
- Haku, joka ohittaa oikeudet. Haku on yleinen vuotokohta: yksityinen tai luonnostila-tietue näkyy, koska hakukyselystä puuttui ehto "vain minun" tai "vain julkaistut".
- SQL:n rakentaminen käyttäjän syötteestä. Käytä aina parametroituja kyselyitä. Tekoälysovellusrakentaja yleensä tekee niin, mutta tarkista, jos näet merkkijonojen liittämistä yhteen.
- Ei tyhjää tilaa. "Ei tuloksia" ja ehdotus (tyhjennä suodattimet, tarkista oikeinkirjoitus) estää ihmisiä poistumasta.
- Ei indeksejä. Haku tuntuu hyvältä testidatalla ja hidastuu, kun oikea data kasvaa.
- Hostattuun hakupalveluun hyppääminen heti. Silloin sinulla on toinen kopio datasta synkronoitavana, poistot käsiteltävinä ja toinen joukko avaimia suojattavana — usein ilman näkyvää hyötyä.
- Mobiilin unohtaminen. Suodattimien täytyy mahtua puhelimeen; suodatinlaatikko tai taitettava paneeli toimii yleensä paremmin kuin sivupalkki.
Tarkistuslista
- Tiedät, mitkä kentät haetaan ja mitä suodattimia on
- Haku toimii palvelimella ja palauttaa sivutettuja tuloksia
- Kysely noudattaa samoja oikeuksia kuin muu sovellus
- Käyttäjän syöte välitetään parametreina, ei liitetä SQL:ään
- Haun tila on URL-osoitteessa
- Kirjoittaminen viivästetään
- Haetut ja suodatetut sarakkeet on indeksoitu
- Tyhjä, ei-tuloksia ja virhetila ovat selkeitä
- Testattu realistisilla datamäärillä ja sotkuisella syötteellä
Haun lisääminen Mythexillä
Mythexilla rakennetussa sovelluksessa data on yleensä projektin omassa Postgres-tietokannassa, joten voit aloittaa yllä olevilla kehotteilla: ensin kaavahaku, sitten Postgresin koko tekstin haku, kun tarvitset järjestystä. Jos haluat hostatun hakupalvelun, tuo oma tilisi ja avaimesi, tallenna avain projektin salaisuutena ja pyydä agenttia indeksoimaan ja kyselemään sitä palvelimelta, kuten kuvataan ohjeessa Integroi mikä tahansa API.
Haku on monen sovelluksen ydin: katso kuinka rakentaa hakemistosivusto, kuinka rakentaa työpaikkasivusto ja kuinka rakentaa markkinapaikka, jotta näet, miten se sopii muun tuotteen kanssa.
Kysymykset
Mikä on helpoin tapa lisätä haku sovellukseen?
Jos datasi on tietokannassa, helpoin alku on palvelinreitti, joka suodattaa rivejä kirjainkoosta riippumattomalla vertailulla muutamaan sarakkeeseen. Pienelle listalle, joka on jo ladattu selaimeen, suodatus selaimessa on vielä yksinkertaisempaa.
Tarvitsenko Algoliaa tai Elasticsearchia hakuun?
Yleensä et tarvitse alussa. Postgresin koko tekstin haku hoitaa sanahaun, järjestyksen ja tuhansista miljooniin riveihin hyvin. Hostattu hakupalvelu kannattaa, kun tarvitset vahvaa kirjoitusvirheiden sietoa, välittömiä tuloksia kirjoittaessa suurella datamäärällä tai edistyneitä relevanssiasetuksia.
Miksi hakuni ei löydä tuloksia kirjoitusvirheillä?
Perushaku ja tavallinen koko tekstin haku etsivät sanoja juuri kirjoitetussa muodossa (tai niiden varteen), joten väärin kirjoitettu sana ei löydy. Tarvitset sumeaa vertailua, kuten Postgresin trigrammasamankaltaisuutta, tai hakupalvelun, jossa on kirjoitusvirheiden sieto.
Pitäisikö haun toimia selaimessa vai palvelimella?
Palvelimella kaikessa, mikä on enemmän kuin pieni julkinen lista. Palvelinhaku skaalautuu, noudattaa oikeuksia eikä lähetä koko datajoukkoasi jokaiselle kävijälle.