Rokasgrāmatas

Kā pievienot meklēšanu lietotnei: no vienkāršiem filtriem līdz pilnteksta meklēšanai

Lai pievienotu meklēšanu lietotnei, sāciet ar vienkāršāko, kas darbojas: meklēšanas lodziņu, kas izsauc servera maršrutu; šis maršruts filtrē jūsu datubāzes rindas, salīdzinot vaicājumu ar dažām kolonnām, un pievieno filtrus, piemēram, kategorijai vai cenai. Kad tas nepietiek — vajag relevances rangu, vārdu sakņu noteikšanu vai daudzus ierakstus —, pārslēdzieties uz datubāzes pilnteksta meklēšanu, un uz hostētu meklētāju pārejiet tikai tad, ja vajag spēcīgu kļūdu toleranci vai tūlītējus rezultātus lielos datos. Neatkarīgi no izvēles meklēšanai jāievēro atļaujas: lietotāji nekad nedrīkst atrast ierakstus, ko nedrīkst redzēt.

Ko "meklēšana" nozīmē jūsu lietotnei

Meklēšana aptver vairākas lietas, un vairumam lietotņu vajag vairāk nekā vienu:

  • Atslēgvārdu meklēšana: teksta lodziņš — "atrast sarakstus, kur minēts 'dārzs'".
  • Filtri: strukturētas izvēles — kategorija, pilsēta, cenas diapazons, datums, statuss.
  • Kārtošana: jaunākais, lētākais, vispiemērotākais.
  • Automātiska pabeigšana: ieteikumi rakstot.
  • Kļūdu tolerance: "restuarant" joprojām atrod "restaurant".

Katalogam, darba sludinājumu vietnei vai veikalam filtri bieži ir svarīgāki par teksta lodziņu. Izlemiet, kuras no šīm funkcijām jums tiešām vajag, pirms izvēlaties rīku.

Jūsu iespējas

PieejaKā darbojasPiemērotaIerobežojumi
Filtrēšana pārlūkāIelādē sarakstu un filtrē to JavaScriptMaziem publiskiem sarakstiem (dažiem simtiem vienumu)Visi dati tiek sūtīti katram apmeklētājam; lēni lieliem sarakstiem
Datubāzes šablona atbilstībaServera vaicājums "nosaukums satur tekstu", reģistrneatkarīgiMazām un vidējām lietotnēm, administratora rīkiemNav ranga; var palēnināties lielās tabulās; nav sakņu noteikšanas
Datubāzes pilnteksta meklēšanaPostgres indeksē vārdus un ranžē atbilstībasVairumam uz saturu balstītu lietotņuVāja pret kļūdām, ja nepievieno neprecīzu atbilstību
Neprecīza atbilstība (trigrammas)Postgres salīdzina rakstzīmju virknes līdzībaiVārdiem, īsiem laukiem, kļūdu toleranceiVajag paplašinājumu un indeksu; pielāgošana prasa laiku
Hostēts meklētājsAtsevišķs serviss indeksē jūsu datus (Algolia, Meilisearch, Typesense, Elasticsearch un citi)Lieliem katalogiem, tūlītējai meklēšanai, spēcīgai kļūdu toleranceiVēl viens serviss, ko uzturēt sinhronā, apmaksāt un nodrošināt

Ja jūsu dati jau atrodas Postgres, tā iebūvētā pilnteksta meklēšana ir spēcīgs vidusceļš. Tā sadala tekstu vārdos, reducē tos līdz saknēm (tā "running" atbilst "run"), ignorē biežus vārdus un var ranžēt rezultātus pēc atbilstības pakāpes. Ar pareizu indeksu tā paliek ātra lielās tabulās.

Piemēru uzvednes

Vienkāršs sākums:

Pievieno meklēšanas lodziņu un filtrus sarakstu lapai. Meklēšanai jāsakrīt ar nosaukumu un aprakstu, reģistrneatkarīgi. Filtri: kategorija (nolaižamais saraksts), pilsēta (nolaižamais saraksts) un maksimālā cena. Meklēšanu veic serverī ar lapotu API maršrutu, 20 rezultāti lapā. Glabā meklēšanu un filtrus URL, lai rezultātus var kopīgot un atpakaļ poga darbojas. Kad nekas neatbilst, rādi draudzīgu tukšu stāvokli.

Atjaunināšana uz pilnteksta meklēšanu:

Pārslēdz sarakstu meklēšanu uz Postgres pilnteksta meklēšanu pēc nosaukuma (augstāks svars) un apraksta. Pievieno pareizo indeksu, ranžē rezultātus pēc relevances un saglabā esošos filtrus un lapošanu. Nemaini nevienu esošo datu.

Kļūdu tolerances pievienošana vārdiem:

Pievieno neprecīzu atbilstību uzņēmuma nosaukumam, lai nelielas kļūdas joprojām atrod rezultātus. Izmanto trigrammu līdzību, ja tā ir pieejama, ar indeksu, un atkāpies līdz pašreizējai meklēšanai, ja nav.

Soli pa solim

  1. Uzskaitiet, ko cilvēki meklē. Kuri lauki (nosaukums, apraksts, tagi, vārds)? Kuri filtri? Ja varat, pajautājiet dažiem reāliem lietotājiem.
  2. Sāciet serverī. Pievienojiet API maršrutu, kas pieņem vaicājumu un filtrus un atgriež vienu lapu rezultātu. Nelādējiet visu pārlūkā.
  3. Piemērojiet atļaujas vaicājumā. Ja lietotāji redz tikai savus ierakstus vai tikai publicētos, šis nosacījums pieder tajā pašā vaicājumā kā meklēšana.
  4. Pievienojiet lapošanu no pirmās dienas — lapu numurus vai "ielādēt vairāk".
  5. Glabājiet meklēšanas stāvokli URL (piemēram, ?q=garden&city=leeds). Kopīgojamas saites, darbojoša atpakaļ poga, un meklētājprogrammas var pārmeklēt filtrētas lapas, ja to vēlaties.
  6. Atlieciet meklēšanu rakstot. Pagaidiet dažus simtus milisekunžu pēc tam, kad pārstājat rakstīt, pirms vaicājuma, lai nesūtītu pieprasījumu katram taustiņam.
  7. Pievienojiet indeksus, kad zināt, pēc kurām kolonnām filtrējat un meklējat.
  8. Uzlabojiet uz pilnteksta meklēšanu, tad uz neprecīzu atbilstību, tad uz hostētu meklētāju — tikai tad, kad vienkāršākais solis neder reāliem lietotājiem.
  9. Testējiet ar reāliem izskatīgiem datiem: simtiem vai tūkstošiem rindu, dīvainām rakstzīmēm, tukšiem vaicājumiem, ļoti gariem vaicājumiem, citām valodām, ja tās atbalstāt.

Biežākās kļūdas

  • Visas tabulas ielādēšana pārlūkā. Labi 50 vienumiem, sāpīgi 50 000, un tas atklāj katru ierakstu — arī tos, ko lietotājs nedrīkst redzēt.
  • Meklēšana, kas ignorē atļaujas. Meklēšana ir bieži sastopams noplūdes avots: privāts vai melnraksta ieraksts parādās, jo vaicājumam pietrūka nosacījuma "tikai manējie" vai "tikai publicētie".
  • SQL veidošana no neapstrādātas lietotāja ievades. Vienmēr izmantojiet parametrizētus vaicājumus. MI veidotājs parasti tos izmanto, bet pārbaudiet, vai nemanāt virknes, ko salīmē kopā.
  • Nav tukša stāvokļa. "Nav rezultātu" ar ieteikumu (notīrīt filtrus, pārbaudīt pareizrakstību) neļauj cilvēkiem aiziet.
  • Nav indeksu. Meklēšana šķiet labi ar testa datiem un palēninās, augot reāliem datiem.
  • Tūlītēja pāreja uz meklēšanas servisu. Tad jums jāuztur otra datu kopija sinhronā, jārisina dzēšana un jānodrošina vēl viens atslēgu komplekts — bieži bez redzama ieguvuma.
  • Mobilo ierīču aizmiršana. Filtriem jāiekļaujas tālrunī; filtru panelis vai saliekams logs parasti darbojas labāk nekā sānjosla.

Kontrolsaraksts

  • Zināt, kuri lauki tiek meklēti un kādi filtri pastāv
  • Meklēšana darbojas serverī un atgriež lapotus rezultātus
  • Vaicājums ievēro tās pašas atļaujas, kas pārējā lietotnē
  • Lietotāja ievade tiek nodota kā parametri, nekad nav salīmēta SQL
  • Meklēšanas stāvoklis atrodas URL
  • Rakstīšana ir atlikta (debounce)
  • Meklētās un filtrētās kolonnas ir indeksētas
  • Tukšie, bez rezultātiem un kļūdu stāvokļi ir skaidri
  • Testēts ar reālistiskiem datu apjomiem un netīru ievadi

Meklēšanas pievienošana ar Mythex

Lietotnē, kas veidota ar Mythex, dati parasti atrodas projekta pašā Postgres datubāzē, tāpēc varat sākt ar iepriekš minētajām uzvednēm: vispirms šablona atbilstība, tad Postgres pilnteksta meklēšana, kad vajadzīgs rangs. Ja vēlaties hostētu meklētāju, izmantojiet savu kontu un atslēgu, glabājiet to kā projekta noslēpumu un lūdziet aģentam indeksēt un vaicāt to no servera, kā aprakstīts Integrate any API.

Meklēšana ir daudzu lietotņu kodols: skatiet kā izveidot katalogu vietni, kā izveidot darba sludinājumu vietni un kā izveidot tirgu, lai redzētu, kā tā ietilpst pārējā produktā.

Jautājumi

Kāds ir vienkāršākais veids, kā pievienot meklēšanu lietotnei?

Ja jūsu dati atrodas datubāzē, vienkāršākais sākums ir servera maršruts, kas filtrē rindas ar reģistrneatkarīgu atbilstību dažās kolonnās. Nelielam sarakstam, kas jau ielādēts pārlūkā, filtrēšana pārlūkā ir vēl vienkāršāka.

Vai meklēšanai man vajag Algolia vai Elasticsearch?

Parasti sākumā nē. Postgres pilnteksta meklēšana labi tiek galā ar vārdu atbilstību, rangu un tūkstošiem līdz miljoniem rindu. Hostēts meklētājs ir vērts, ja vajag spēcīgu kļūdu toleranci, tūlītējus rezultātus, rakstot, lielos datos, vai sarežģītu relevances pielāgošanu.

Kāpēc mana meklēšana neatrod rezultātus ar pareizrakstības kļūdām?

Vienkārša atbilstība un standarta pilnteksta meklēšana meklē vārdus tā, kā tie ierakstīti (vai to saknes), tāpēc kļūda paiet garām. Jums vajag neprecīzu atbilstību, piemēram, trigrammu līdzību Postgres vai meklētāju ar kļūdu toleranci.

Vai meklēšanai jādarbojas pārlūkā vai serverī?

Serverī visam, kas pārsniedz nelielu publisku sarakstu. Servera puses meklēšana mērogojas, ievēro atļaujas un nesūta visus jūsu datus katram apmeklētājam.

Mythex · Pricing · Veidojiet jebko ar AI · Tīmekļa vietņu un lietotņu veidnes · Mythex salīdzinājumā · AI lietotņu veidošanas glosārijs · Bezmaksas rīki lietotņu veidošanai ar 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ų Македонски മലയാളം Монгол मराठी 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 简体中文 繁體中文(香港) 繁體中文(台灣)