ፍለጋን ወደ አፕዎ እንዴት ማከል፦ ከቀላል ማጣሪያዎች እስከ ሙሉ-ጽሑፍ ፍለጋ
ፍለጋን ወደ አፕዎ ለመጨመር በቀላሉ የሚሠራውን ነገር ይጀምሩ፦ የአገልጋይ መንገድን የሚጠራ የፍለጋ ሳጥን፣ ይህም የዳታቤዝ ረድፎችን በጥቂት አምዶች ላይ መጠይቁን በማዛመድ ያጣራል፣ እንዲሁም እንደ ምድብ ወይም ዋጋ ያሉ ማጣሪያዎች። ያ በቂ ካልሆነ — ደረጃ መስጠት፣ የቃላት ማሳጠር (stemming) ወይም ብዙ መዝገቦች ያስፈልጉዎታል — የዳታቤዝዎን ሙሉ-ጽሑፍ ፍለጋ ይጠቀሙ፣ እና ጠንካራ የፊደል ስህተት መቻቻል ወይም ፈጣን ውጤቶች ለትልቅ ዳታ ብቻ ሲፈልጉ ወደ የተስተናገደ የፍለጋ ሞተር ይሂዱ። የትኛውንም ቢመርጡ፣ ፍለጋ ፈቃዶችን ማክበር አለበት፦ ተጠቃሚዎች ማየት የማይፈቀድላቸውን መዝገቦች በፍለጋ ማግኘት የለባቸውም።
ለአፕዎ «ፍለጋ» ማለት ምን ማለት ነው
ፍለጋ የተለያዩ ነገሮችን ይሸፍናል፣ እና አብዛኞቹ አፖች ከአንድ በላይ ያስፈልጋቸዋል፦
- የቁልፍ ቃል ፍለጋ፦ የጽሑፍ ሳጥን — «'garden' የሚለውን የያዙ ዝርዝሮችን ፈልግ»።
- ማጣሪያዎች፦ የተዋቀሩ ምርጫዎች — ምድብ፣ ከተማ፣ የዋጋ ክልል፣ ቀን፣ ሁኔታ።
- መደርደር፦ አዲስ፣ ርካሽ፣ በጣም ተዛማጅ።
- ራስ-ማጠናቀቅ፦ በመጻፍ ጊዜ ጥቆማዎች።
- የፊደል ስህተት መቻቻል፦ «restuarant» አሁንም «restaurant»ን ያገኛል።
ለማውጫ፣ የሥራ ቦታ ወይም ሱቅ፣ ማጣሪያዎች ከጽሑፍ ሳጥኑ ይበልጥ ይሆናሉ። መሣሪያ ከመምረጥዎ በፊት በትክክል የሚያስፈልጉዎትን ይወስኑ።
አማራጮችዎ
| አቀራረብ | እንዴት ይሠራል | ለምን ይጠቅማል | ገደቦች |
|---|---|---|---|
| በአሳሹ ውስጥ ማጣራት | ዝርዝሩን ጫን፣ በJavaScript አጣራ | ትናንሽ ይፋዊ ዝርዝሮች (ጥቂት መቶ ንጥሎች) | ዳታውን ለእያንዳንዱ ጎብኚ ይልካል፤ ለትልቅ ዝርዝር ቀርፋፋ |
| የዳታቤዝ ስርዓተ-ጥለት ማዛመድ | የአገልጋይ መጠይቅ «ስሙ ጽሑፉን ይዟል»፣ በትንሽ/ትልቅ ፊደል ሳይለይ | ትናንሽና መካከለኛ አፖች፣ የአድሚን መሣሪያዎች | ደረጃ የለውም፤ በትልቅ ሰንጠረዥ ቀርፋፋ ሊሆን ይችላል፤ stemming የለም |
| የዳታቤዝ ሙሉ-ጽሑፍ ፍለጋ | Postgres ቃላትን ያወጣል እና ተዛማጆችን ደረጃ ይሰጣል | ይዘት-ከባድ አብዛኞቹ አፖች | በFuzzy ካልጨመሩ ለፊደል ስህተቶች ደካማ |
| Fuzzy ማዛመድ (trigrams) | Postgres የቁምፊ ቅደም-ተከተሎችን በመመሳሰል ያወዳድራል | ስሞች፣ አጭር መስኮች፣ የፊደል ስህተት መቻቻል | ቅጥያ እና መረጃ ጠቋሚ ያስፈልጋል፤ ማስተካከል ጊዜ ይወስዳል |
| የተስተናገደ የፍለጋ ሞተር | የተለየ አገልግሎት ዳታዎን ይመረምራል (Algolia፣ Meilisearch፣ Typesense፣ Elasticsearch እና ሌሎች) | ትልቅ ካታሎጎች፣ ፈጣን ፍለጋ፣ ከባድ የፊደል ስህተት መቻቻል | ከዳታዎ ጋር የሚመሳሰል ሌላ አገልግሎት፤ መክፈልና ማስጠበቅ |
ዳታዎ ቀድሞ በPostgres ውስጥ ከሆነ፣ የራሱ ሙሉ-ጽሑፍ ፍለጋ ጠንካራ መካከለኛ መንገድ ነው። ጽሑፍን ወደ ቃላት ይከፍላል፣ ወደ ስሮቻቸው ይቀንሳል (ስለዚህ «running» «run»ን ያገኛል)፣ የተለመዱ ቃላትን ይተዋል፣ እና ውጤቶችን ምን ያህል እንደሚዛመዱ ደረጃ ሊሰጥ ይችላል። ትክክለኛ መረጃ ጠቋሚ ሲኖር በትልቅ ሰንጠረዥ ላይ ፈጣን ሆኖ ይቆያል።
የምሳሌ ጥያቄዎች
ቀላል መነሻ፦
በዝርዝሮች ገጹ ላይ የፍለጋ ሳጥን እና ማጣሪያዎች ጨምር። ፍለጋው መጠይቁን ከርዕስና ከመግለጫ ጋር፣ በትንሽ/ትልቅ ፊደል ሳይለይ ማዛመድ አለበት። ማጣሪያዎች፦ ምድብ (ተቆልቋይ)፣ ከተማ (ተቆልቋይ) እና ከፍተኛ ዋጋ። ፍለጋውን በአገልጋዩ ላይ በገጽ-የተከፋፈለ API መንገድ ሥራ፣ በገጽ 20 ውጤቶች። ፍለጋውንና ማጣሪያዎቹን በURL ውስጥ አቆይ ስለዚህ ውጤቶች ሊጋሩ እና የኋላ ቁልፉ ይሠራል። ምንም ካልተዛመደ ወዳጃዊ ባዶ ሁኔታ አሳይ።
ወደ ሙሉ-ጽሑፍ ፍለጋ ማሻሻል፦
የዝርዝር ፍለጋውን ወደ Postgres ሙሉ-ጽሑፍ ፍለጋ ቀይር በርዕስ (ከፍ ያለ ክብደት) እና በመግለጫ ላይ። ትክክለኛውን መረጃ ጠቋሚ ጨምር፣ ውጤቶችን በተዛማጅነት ደረጃ ስጥ፣ እና ያሉትን ማጣሪያዎችና ገጽ-ክፍፍል አቆይ። ምንም ነባር ዳታ አትቀይር።
ለስሞች የፊደል ስህተት መቻቻል ለመጨመር፦
በንግድ ስም ላይ fuzzy ማዛመድ ጨምር ስለዚህ ትናንሽ የፊደል ስህተቶች አሁንም ውጤት ያገኛሉ። ካለ trigram ተመሳሳይነት ተጠቀም፣ በመረጃ ጠቋሚ፣ እና ከሌለ አሁን ያለውን ፍለጋ እንደ መመለሻ ተጠቀም።
ደረጃ በደረጃ
- ሰዎች የሚፈልጉትን ዘርዝሩ። የትኞቹ መስኮች (ርዕስ፣ መግለጫ፣ መለያዎች፣ ስም)? የትኞቹ ማጣሪያዎች? ከእውነተኛ ተጠቃሚዎች ጥቂቶችን ይጠይቁ ከቻሉ።
- በአገልጋይ ጎን ይጀምሩ። መጠይቁንና ማጣሪያዎቹን የሚወስድ፣ አንድ ገጽ ውጤቶችን የሚመልስ API መንገድ ጨምሩ። ሁሉንም ወደ አሳሹ አትጫኑ።
- ፈቃዶችን በመጠይቁ ውስጥ ይተግብሩ። ተጠቃሚዎች የራሳቸውን መዝገቦች ብቻ ወይም የታተሙትን ብቻ የሚያዩ ከሆነ፣ ይህ ሁኔታ ከፍለጋው ጋር በተመሳሳይ መጠይቅ ውስጥ መሆን አለበት።
- ገጽ-ክፍፍልን ከመጀመሪያው ቀን ጨምሩ — የገጽ ቁጥሮች ወይም «ተጨማሪ ጫን»።
- የፍለጋ ሁኔታን በURL ውስጥ አስቀምጡ (ለምሳሌ
?q=garden&city=leeds)። ሊጋሩ የሚችሉ አገናኞች፣ የሚሠራ የኋላ ቁልፍ፣ እና የፍለጋ ሞተሮች የተጣሩ ገጾችን ለመቃኘት ከፈለጉ። - በመጻፍ ጊዜ ፍለጋን አዘግዩ (debounce)። ከመተየብ ማቆም በኋላ ለጥቂት መቶ ሚሊሰከንዶች ጠብቁ፣ ለእያንዳንዱ ቁልፍ ጥያቄ እንዳትልኩ።
- የሚፈልጉዋቸውና የሚያጣሩዋቸውን አምዶች ካወቁ በኋላ መረጃ ጠቋሚዎች ጨምሩ።
- አሻሽሉ — ሙሉ-ጽሑፍ ፍለጋ፣ ከዚያ fuzzy ማዛመድ፣ ከዚያ የተስተናገደ ሞተር — ቀለል ያለው እርምጃ እውነተኛ ተጠቃሚዎችን ሲያሳጣ ብቻ።
- በእውነተኛ መልክ ያለው ዳታ ሞክሩ፦ መቶዎች ወይም ሺዎች ረድፎች፣ እንግዳ ቁምፊዎች፣ ባዶ መጠይቆች፣ በጣም ረጅም መጠይቆች፣ የምትደግፏቸው ሌሎች ቋንቋዎች።
የተለመዱ ስህተቶች
- ሙሉ ሰንጠረዡን ወደ አሳሹ መጫን። ለ50 ንጥሎች ጥሩ ነው፣ ለ50,000 ያሰቃያል፣ እና ተጠቃሚው ማየት የሌለበትን እያንዳንዱን መዝገብ ይገልጣል።
- ፈቃዶችን የማያከብር ፍለጋ። ፍለጋ የተለመደ መፍሰስ ነው፦ የግል ወይም ረቂቅ መዝገብ ይታያል ምክንያቱም የፍለጋ መጠይቁ «የራሴ ብቻ» ወይም «የታተመ ብቻ» ሁኔታን ረስቶታል።
- ኤስኪውኤልን ከተጠቃሚ ግብዓት መገንባት። ሁልጊዜ የተሰየሙ መለኪያዎችን (parameterised queries) ተጠቀሙ። AI ገንቢ ብዙውን ጊዜ ያደርገዋል፣ ግን ሕብረቁምፊዎች ሲጣበቁ ካዩ ያረጋግጡ።
- ባዶ ሁኔታ አለመኖር። «ምንም ውጤት የለም» ከምክር ጋር (ማጣሪያዎችን አጽዳ፣ ፊደሎቹን ፈትሽ) ሰዎች እንዳይሄዱ ይከላከላል።
- መረጃ ጠቋሚዎች አለመኖር። ፍለጋ በሙከራ ዳታ ጥሩ ይመስላል፣ እውነተኛ ዳታ ሲያድግ ግን ይቀንሳል።
- በቀጥታ ወደ የፍለጋ አገልግሎት መዝለል። ከዚያ ዳታዎን ሁለተኛ ቅጂ ማመሳሰል፣ መሰረዞችን መያዝ፣ እና ሌላ የቁልፍ ስብስብ ማስጠበቅ አለብዎት — ብዙ ጊዜ የሚታይ ጥቅም ሳይኖር።
- ሞባይልን መርሳት። ማጣሪያዎች በስልክ ላይ መግባት አለባቸው፤ የማጣሪያ መሳቢያ ወይም የሚታጠፍ ፓናል ከጎን አሞሌ ብዙ ጊዜ ይሻላል።
ዝርዝር
- የሚፈለጉ መስኮችና ማጣሪያዎች ይታወቃሉ
- ፍለጋው በአገልጋዩ ላይ ይሠራል እና ገጽ-የተከፋፈሉ ውጤቶችን ይመልሳል
- መጠይቁ ከቀሪው አፕ ተመሳሳይ ፈቃዶችን ያስገድዳል
- የተጠቃሚ ግብዓት እንደ መለኪያ ይላካል፣ ፈጽሞ ወደ SQL አይገጠምም
- የፍለጋ ሁኔታ በURL ውስጥ ይኖራል
- መተየብ ተዘግይቷል (debounced)
- የሚፈለጉና የሚጣሩ አምዶች መረጃ ጠቋሚ አላቸው
- ባዶ፣ ውጤት-የሌለው እና ስህተት ሁኔታዎች ግልጽ ናቸው
- በእውነተኛ የዳታ መጠን እና ግራ በሚያጋቡ ግብዓቶች ተፈትኗል
በMythex ፍለጋ መጨመር
በMythex ላይ በተገነባ አፕ ውስጥ ዳታ ብዙ ጊዜ በፕሮጀክቱ የራሱ Postgres ዳታቤዝ ውስጥ ይኖራል፣ ስለዚህ ከላይ ባሉት ጥያቄዎች መጀመር ይችላሉ፦ በመጀመሪያ ስርዓተ-ጥለት ማዛመድ፣ ደረጃ መስጠት ሲፈልጉ ደግሞ Postgres ሙሉ-ጽሑፍ ፍለጋ። የተስተናገደ የፍለጋ ሞተር ከፈለጉ፣ የራስዎን አካውንትና ቁልፍ ያምጡ፣ በፕሮጀክት ሚስጥር ያስቀምጡ፣ እና ወኪሉ ከአገልጋዩ ላይ እንዲጠቁም እና እንዲጠይቅ ይጠይቁ፣ በማንኛውንም API ያዋህዱ ውስጥ እንደተገለጸው።
ፍለጋ የብዙ አፖች ልብ ነው፦ ፍለጋ ከቀሩት ምርቱ ጋር እንዴት እንደሚስማማ ለማየት የማውጫ ድር ጣቢያ እንዴት መገንባት፣ የሥራ ሰሌዳ እንዴት መገንባት እና የገበያ ቦታ እንዴት መገንባት ይመልከቱ።
ጥያቄዎች
ፍለጋን ወደ አፕ ለመጨመር በጣም ቀላሉ መንገድ ምንድን ነው?
ዳታዎ በዳታቤዝ ውስጥ ከሆነ፣ በጥቂት አምዶች ላይ ትንሽ/ትልቅ ፊደል ሳይለይ ማዛመድ የሚያጣራ የአገልጋይ መንገድ ለመጀመር በጣም ቀላሉ ነው። በአሳሹ ውስጥ አስቀድሞ የተጫነ ትንሽ ዝርዝር ከሆነ፣ በአሳሹ ውስጥ ማጣራት እንኳን ቀላል ነው።
ለፍለጋ Algolia ወይም Elasticsearch ያስፈልገኛልን?
ብዙ ጊዜ በመጀመሪያ አያስፈልጉም። Postgres ሙሉ-ጽሑፍ ፍለጋ የቃላት ማዛመድን፣ ደረጃ መስጠትንና ከሺዎች እስከ ሚሊዮኖች ረድፎችን በደንብ ይይዛል። የተስተናገደ ሞተር የሚጠቅመው ጠንካራ የፊደል ስህተት መቻቻል፣ በትልቅ ዳታ ላይ በመጻፍ ጊዜ ፈጣን ውጤቶች፣ ወይም የላቀ የተዛማጅነት ማስተካከያ ሲፈልጉ ነው።
ለምን ፍለጋዬ በፊደል ስህተቶች ውጤት አያገኝም?
መሠረታዊ ማዛመድና መደበኛ ሙሉ-ጽሑፍ ፍለጋ ቃላቱን እንደተጻፉ (ወይም ስሮቻቸውን) ይፈልጋሉ፣ ስለዚህ የተሳሳተ ፊደል ይጎድላል። Fuzzy ማዛመድ ያስፈልግዎታል፣ ለምሳሌ Postgres ውስጥ trigram ተመሳሳይነት ወይም የፊደል ስህተትን የሚታገስ የፍለጋ ሞተር።
ፍለጋ በአሳሹ ወይም በአገልጋዩ ላይ መሮጥ አለበት?
ለትንሽ ይፋዊ ዝርዝር ካልሆነ በቀር በአገልጋዩ ላይ። የአገልጋይ ፍለጋ ይመዝናል፣ ፈቃዶችን ያከብራል፣ እና ሙሉ ዳታዎን ለእያንዳንዱ ጎብኚ አይልክም።