Jinsi ya Kuongeza Utafutaji kwenye App Yako: Kutoka Vichujio Rahisi hadi Full-Text Search
Ili kuongeza utafutaji kwenye app yako, anza na kitu rahisi zaidi kinachofanya kazi: kisanduku cha kutafuta kinachoita route ya seva, ambayo huchuja safu za database yako kwa kulinganisha swali na safu chache, pamoja na vichujio vya vitu kama kategoria au bei. Pale hilo linapokosa kutosha — unahitaji kupanga matokeo kwa umuhimu, kuweka maneno katika mizizi yake au rekodi nyingi — badilika kwenda full-text search ya database yako, na hamia kwenye injini ya utafutaji inayoendeshwa tu ikiwa unahitaji uvumilivu imara wa makosa ya kuandika au matokeo ya papo hapo juu ya data kubwa sana. Chochote unachochagua, utafutaji lazima uheshimu ruhusa: watumiaji wasipate kamwe rekodi ambazo hawaruhusiwi kuziona.
Utafutaji unamaanisha nini kwa app yako
Utafutaji unajumuisha mambo kadhaa tofauti, na app nyingi zinahitaji zaidi ya moja:
- Utafutaji wa maneno muhimu: kisanduku cha maandishi — "tafuta matangazo yanayotaja 'garden'".
- Vichujio: chaguo zilizopangwa — kategoria, jiji, kiwango cha bei, tarehe, hali.
- Kupanga: mpya zaidi, rahisi zaidi, umuhimu zaidi.
- Kukamilisha kiotomatiki: mapendekezo unapoandika.
- Uvumilivu wa makosa ya kuandika: "restuarant" bado inapata "restaurant".
Kwa saraka, bodi ya kazi au duka, vichujio mara nyingi vinajali zaidi ya kisanduku cha maandishi. Amua ni zipi unazozihitaji kweli kabla ya kuchagua zana.
Chaguo zako
| Mbinu | Inavyofanya kazi | Inafaa kwa | Mipaka |
|---|---|---|---|
| Kuchuja kwenye browser | Pakia orodha, uchuje kwa JavaScript | Orodha ndogo za umma (vitu vichache mia) | Hutuma data yote kwa kila mgeni; polepole kwenye orodha kubwa |
| Ulinganishaji wa muundo kwenye database | Swali la seva kama "jina lina maandishi", bila kujali herufi | App ndogo hadi za kati, zana za admin | Hakuna upangaji; inaweza kuwa polepole kwenye majedwali makubwa; hakuna mizizi ya maneno |
| Full-text search ya database | Postgres inaorodhesha maneno na kupanga ulinganifu | App nyingi zenye maudhui mengi | Dhaifu kwa makosa ya kuandika isipokuwa ukiongeza fuzzy matching |
| Fuzzy matching (trigrams) | Postgres inalinganisha mfuatano wa herufi kwa ufanano | Majina, sehemu fupi, uvumilivu wa makosa | Inahitaji extension na index; urekebishaji unachukua muda |
| Injini ya utafutaji inayoendeshwa | Huduma tofauti inaorodhesha data yako (Algolia, Meilisearch, Typesense, Elasticsearch na nyingine) | Katalogi kubwa, utafutaji wa papo hapo, uvumilivu mkubwa wa makosa | Huduma nyingine ya kuweka sawa, kulipia na kuilinda |
Ikiwa data yako tayari iko kwenye Postgres, full-text search yake iliyojengwa ndani ni msingi mzuri wa kati. Inavunja maandishi kuwa maneno, inayapunguza kwenye mizizi (ili "running" ilingane na "run"), inapuuza maneno ya kawaida, na inaweza kupanga matokeo kwa jinsi yanavyolingana vizuri. Kwa index sahihi inabaki haraka kwenye majedwali makubwa.
Mifano ya maagizo
Mwanzo rahisi:
Ongeza kisanduku cha kutafuta na vichujio kwenye ukurasa wa matangazo. Utafutaji ulinganishe swali na kichwa na maelezo, bila kujali herufi. Vichujio: kategoria (dropdown), jiji (dropdown) na bei ya juu zaidi. Fanya utafutaji kwenye seva kwa route ya API yenye kurasa, matokeo 20 kwa kila ukurasa. Weka utafutaji na vichujio kwenye URL ili matokeo yaweze kushirikiwa na kitufe cha nyuma kifanye kazi. Onyesha hali ya kirafiki isiyo na kitu pale hakuna kinacholingana.
Kuboresha hadi full-text search:
Badilisha utafutaji wa matangazo uwe full-text search ya Postgres kwenye kichwa (chenye uzito zaidi) na maelezo. Ongeza index sahihi, panga matokeo kwa umuhimu, na uhifadhi vichujio na kurasa vilivyopo. Usibadilishe data yoyote iliyopo.
Kuongeza uvumilivu wa makosa ya kuandika kwa majina:
Ongeza fuzzy matching kwenye jina la biashara ili makosa madogo ya kuandika bado yapate matokeo. Tumia trigram similarity ikiwepo, pamoja na index, na urudi kwenye utafutaji wa sasa ikiwa haipo.
Hatua kwa hatua
- Orodhesha wanachotafuta watu. Ni sehemu zipi (kichwa, maelezo, tags, jina)? Ni vichujio vipi? Waulize watumiaji halisi wachache ukiweza.
- Anza upande wa seva. Ongeza route ya API inayochukua swali na vichujio, na kurudisha ukurasa mmoja wa matokeo. Usipakie kila kitu kwenye browser.
- Weka ruhusa kwenye swali. Ikiwa watumiaji wanaona rekodi zao pekee, au zilizochapishwa pekee, sharti hilo liwe kwenye swali lilelile la utafutaji.
- Ongeza kurasa tangu siku ya kwanza — namba za kurasa au "pakia zaidi".
- Weka hali ya utafutaji kwenye URL (kwa mfano
?q=garden&city=leeds). Viungo vinavyoweza kushirikiwa, kitufe cha nyuma kinachofanya kazi, na injini za utafutaji zinaweza kutambaa kurasa zilizochujwa ukitaka ziorodheshwe. - Punguza kasi ya utafutaji unapoandika. Subiri milisekunde mia chache baada ya kuacha kuandika kabla ya kuuliza, ili usitume ombi kwa kila herufi.
- Ongeza indexes mara utakapojua safu gani unachuja na kutafuta.
- Boresha hadi full-text search, kisha fuzzy matching, kisha injini inayoendeshwa — tu pale hatua rahisi inaposhindwa watumiaji halisi.
- Jaribu kwa data inayofanana na halisi: safu mia au elfu, herufi za ajabu, maswali matupu, maswali marefu sana, lugha nyingine ikiwa unaziunga mkono.
Makosa ya kawaida
- Kupakia jedwali zima kwenye browser. Ni sawa kwa vitu 50, ni maumivu kwa 50,000, na inafichua kila rekodi — ikijumuisha zile ambazo mtumiaji hapaswi kuziona.
- Utafutaji unaopuuza ruhusa. Utafutaji ni uvujaji wa kawaida: rekodi ya faragha au rasimu inaonekana kwa sababu swali la utafutaji lilisahau sharti la "yangu pekee" au "zilizochapishwa pekee".
- Kujenga SQL kutoka kwa ingizo ghafi la mtumiaji. Tumia kila mara maswali yenye vigezo. Mjenzi wa AI kwa kawaida hufanya hivyo, lakini kagua ukiona mifuatano ikiunganishwa.
- Hakuna hali tupu. "Hakuna matokeo" pamoja na pendekezo (futa vichujio, kagua tahajia) inazuia watu kuondoka.
- Hakuna indexes. Utafutaji unaonekana sawa na data ya majaribio na kupungua kasi data halisi inapokua.
- Kuruka moja kwa moja hadi huduma ya utafutaji. Hapo unalazimika kuweka nakala ya pili ya data yako sawa, kushughulikia kufuta, na kulinda seti nyingine ya funguo — mara nyingi bila faida inayoonekana.
- Kusahau simu. Vichujio vinahitaji kutoshea kwenye simu; droo ya vichujio au paneli inayokunjika kwa kawaida inafanya kazi vizuri kuliko upau wa kando.
Orodha ya ukaguzi
- Unajua sehemu zipi zinatafutwa na vichujio vipi vipo
- Utafutaji unaendeshwa kwenye seva na kurudisha matokeo yenye kurasa
- Swali linatekeleza ruhusa zilezile na sehemu nyingine ya app
- Ingizo la mtumiaji linapitishwa kama vigezo, kamwe halijaunganishwa kwenye SQL
- Hali ya utafutaji inaishi kwenye URL
- Kuandika kumepunguzwa kasi (debounced)
- Safu zinazotafutwa na kuchujwa zina indexes
- Hali za tupu, zisizo na matokeo na makosa ziko wazi
- Imejaribiwa kwa ukubwa halisi wa data na ingizo lisilo safi
Kuongeza utafutaji ukitumia Mythex
Kwenye app iliyojengwa kwenye Mythex, data kwa kawaida inaishi kwenye database ya Postgres ya mradi, kwa hiyo unaweza kuanza na maagizo hapo juu: ulinganishaji wa muundo kwanza, kisha full-text search ya Postgres unapohitaji upangaji. Ikiwa unataka injini ya utafutaji inayoendeshwa, leta akaunti na key yako, uihifadhi kama siri ya mradi, na uombe wakala aorodheshe na kuuliza kutoka kwenye seva, kama ilivyoelezwa kwenye Unganisha API yoyote.
Utafutaji ni kiini cha app nyingi: angalia jinsi ya kujenga tovuti ya saraka, jinsi ya kujenga bodi ya kazi na jinsi ya kujenga soko kuona jinsi inavyokaa pamoja na sehemu nyingine ya bidhaa.
Maswali
Njia rahisi zaidi ya kuongeza utafutaji kwenye app ni ipi?
Ikiwa data yako iko kwenye database, route ya seva inayochuja safu kwa kulinganisha herufi bila kujali ukubwa wa herufi kwenye safu chache ndio mwanzo rahisi zaidi. Kwa orodha ndogo ambayo tayari imepakiwa kwenye browser, kuchuja kwenye browser ni rahisi zaidi.
Je, ninahitaji Algolia au Elasticsearch kwa utafutaji?
Kwa kawaida hapana mwanzoni. Full-text search ya Postgres inashughulikia ulinganishaji wa maneno, upangaji wa matokeo na safu elfu hadi milioni vizuri. Injini ya utafutaji inayoendeshwa inafaa unapohitaji uvumilivu imara wa makosa ya kuandika, matokeo ya papo hapo unapoandika kwenye data kubwa, au urekebishaji wa hali ya juu wa umuhimu wa matokeo.
Kwa nini utafutaji wangu hautafuti matokeo yenye makosa ya kuandika?
Ulinganishaji wa kawaida na full-text search ya kawaida hutafuta maneno kama yalivyoandikwa (au mizizi yake), kwa hiyo kosa la tahajia linakosa. Unahitaji fuzzy matching, kama trigram similarity ya Postgres au injini ya utafutaji yenye uvumilivu wa makosa ya kuandika.
Utafutaji uendeshwe kwenye browser au kwenye seva?
Kwenye seva kwa chochote kinachozidi orodha ndogo ya umma. Utafutaji wa upande wa seva unaweza kukua, unaheshimu ruhusa na hautumi data yako yote kwa kila mgeni.