brief: | i18n.site አሁን አገልጋይ አልባ የሙሉ ጽሑፍ ፍለጋን ይደግፋል።
ይህ መጣጥፍ በ IndexedDB የተሰራ የተገለበጠ ኢንዴክስ፣ ቅድመ ቅጥያ ፍለጋ፣ የቃላት ክፍፍል ማመቻቸት እና ባለብዙ ቋንቋ ድጋፍን ጨምሮ የንፁህ የፊት-መጨረሻ የሙሉ-ጽሑፍ ፍለጋ ቴክኖሎጂን ትግበራ ያስተዋውቃል።
ከነባር መፍትሄዎች ጋር ሲነጻጸር የi18n.site ንጹህ የፊት-ፍጻሜ ሙሉ ጽሁፍ ፍለጋ በመጠን እና በፍጥነት አነስተኛ እና መካከለኛ መጠን ላላቸው እንደ ሰነዶች እና ብሎጎች ላሉ ድረ-ገጾች ተስማሚ ነው እና ከመስመር ውጭ ይገኛል።
ከበርካታ ሳምንታት የዕድገት & በኋላ markdown i18n.site
ይህ መጣጥፍ የ i18n.site
ንፁህ የፊት-ፍጻሜ የፍለጋ ውጤቱን ለማየት ቴክኒካዊ አተገባበርን ያካፍላል i18n.site
ኮድ ክፍት : ፈልግ ከርነል / በይነተገናኝ በይነገጽ
ለአነስተኛ እና መካከለኛ መጠን ያላቸው ንፁህ የማይንቀሳቀሱ ድረ-ገጾች እንደ ሰነዶች/የግል ብሎጎች፣ በራስ-የተሰራ የሙሉ ጽሑፍ ፍለጋ ጀርባ መገንባት በጣም ከባድ ነው፣ እና ከአገልግሎት ነፃ የሆነ የሙሉ ጽሑፍ ፍለጋ የበለጠ የተለመደ ምርጫ ነው።
አገልጋይ አልባ የሙሉ ጽሑፍ ፍለጋ መፍትሄዎች በሁለት ሰፊ ምድቦች ይከፈላሉ፡-
በመጀመሪያ፣ ተመሳሳይ algolia.com
እንደነዚህ ያሉ አገልግሎቶች በፍለጋ መጠን ላይ ተመስርተው ክፍያ ይጠይቃሉ እና ብዙውን ጊዜ እንደ ድረ-ገጽ ተገዢነት ባሉ ጉዳዮች በዋናው ቻይና ውስጥ ለተጠቃሚዎች አይገኙም።
ከመስመር ውጭ ጥቅም ላይ ሊውል አይችልም, በበይነመረብ ላይ ጥቅም ላይ ሊውል አይችልም, እና ከፍተኛ ገደቦች አሉት. ይህ ጽሑፍ ብዙም አይወያይም።
ሁለተኛው ንጹህ የፊት-መጨረሻ ሙሉ-ጽሑፍ ፍለጋ ነው።
በአሁኑ ጊዜ፣ የተለመዱ የንፁህ የፊት-መጨረሻ ሙሉ-ጽሑፍ ፍለጋዎች lunrjs እና ElasticLunr.js (በ lunrjs
ሁለተኛ ደረጃ እድገት ላይ የተመሰረቱ) ያካትታሉ።
lunrjs
ኢንዴክሶችን ለመገንባት ሁለት መንገዶች አሉ, እና ሁለቱም የራሳቸው ችግሮች አሏቸው.
አስቀድሞ የተገነቡ የመረጃ ጠቋሚ ፋይሎች
መረጃ ጠቋሚው ከሁሉም ሰነዶች ውስጥ ቃላትን ስለያዘ, መጠኑ ትልቅ ነው. ሰነድ ሲታከል ወይም ሲሻሻል አዲስ የመረጃ ጠቋሚ ፋይል መጫን አለበት። የተጠቃሚውን የመቆያ ጊዜ ይጨምራል እና ብዙ የመተላለፊያ ይዘት ያጠፋል.
ሰነዶችን ይጫኑ እና በበረራ ላይ ኢንዴክሶችን ይገንቡ
ኢንዴክስን መገንባት በስሌት የተጠናከረ ተግባር ሲሆን መረጃ ጠቋሚውን በደረሱ ቁጥር እንደገና መገንባት ግልጽ የሆነ መዘግየት እና ደካማ የተጠቃሚ ተሞክሮ ያስከትላል።
ከ lunrjs
በተጨማሪ ሌሎች የሙሉ ጽሑፍ ፍለጋ መፍትሄዎች አሉ፣ ለምሳሌ :
ለመፈለግ በሕብረቁምፊዎች መካከል ያለውን ተመሳሳይነት ያሰሉ fusejs
የዚህ መፍትሔ አፈጻጸም እጅግ በጣም ደካማ ነው እና ለሙሉ ጽሑፍ ፍለጋ መጠቀም አይቻልም (ይመልከቱ Fuse.js ረጅም መጠይቅ ከ 10 ሰከንድ በላይ ይወስዳል፣ እንዴት ማመቻቸት ይቻላል? )።
TinySearch ፣ ለመፈለግ Bloom ማጣሪያን ይጠቀሙ፣ ለቅድመ-ቅጥያ ፍለጋ (ለምሳሌ፣ goo
አስገባ፣ ፍለጋ good
፣ google
) መጠቀም አይቻልም፣ እና ተመሳሳይ የማጠናቀቂያ ውጤት ማምጣት አይቻልም።
በነባር መፍትሄዎች ድክመቶች ምክንያት, i18n.site
አዲስ ንጹህ የፊት-መጨረሻ ሙሉ-ጽሑፍ ፍለጋ መፍትሄ አዘጋጅቷል, እሱም የሚከተሉት ባህሪያት አሉት :
gzip
ነው (ለማነፃፀር የ lunrjs
መጠን 25KB
6.9KB
).indexedb
ላይ የተመሠረተ የተገለበጠ መረጃ ጠቋሚ ይገንቡ።ከዚህ በታች, i18n.site
ቴክኒካዊ አተገባበር ዝርዝሮች በዝርዝር ይተዋወቃሉ.
የቃል ክፍፍል የአሳሹን ቤተኛ ቃል ክፍልፋይ Intl.Segmenter
ይጠቀማል፣ እና ሁሉም ዋና አሳሾች ይህንን በይነገጽ ይደግፋሉ።
ክፍል coffeescript
ኮድ የሚለው ቃል እንደሚከተለው ነው።
SEG = new Intl.Segmenter 0, granularity: "word"
seg = (txt) =>
r = []
for {segment} from SEG.segment(txt)
for i from segment.split('.')
i = i.trim()
if i and !'| `'.includes(i) and !/\p{P}/u.test(i)
r.push i
r
export default seg
export segqy = (q) =>
seg q.toLocaleLowerCase()
ውስጥ፡
/\p{P}/
ከስርዓተ ነጥብ ምልክቶች ጋር የሚዛመድ መደበኛ አገላለጽ ነው፡- ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _
{ | } . .</p><ul><li>
split('.')ምክንያቱም
Firefoxየአሳሽ ቃል ክፍፍል ክፍል
. ` ስለሌለው ነው.
በ IndexedDB
ውስጥ 5 የእቃ ማከማቻ ጠረጴዛዎች ተፈጥረዋል :
word
: id -doc
: id - url - የሰነድ ስሪት ቁጥርdocWord
id ብዛት id - :prefix
ቅድመ : - ቃል idrindex
: ቃል id - ሰነድ id : የመስመር ቁጥሮችበሰነድ url
እና በስሪት ቁጥር ver
ድርድር ውስጥ ይለፉ እና ሰነዱ በሰንጠረዥ doc
ውስጥ መኖሩን ይፈልጉ. ከሌለ, የተገለበጠ መረጃ ጠቋሚ ይፍጠሩ. በተመሳሳይ ጊዜ, ላልተላለፉ ሰነዶች የተገለበጠውን መረጃ ጠቋሚ ያስወግዱ.
በዚህ መንገድ, የመጨመሪያ መረጃ ጠቋሚ ሊደረስበት እና የስሌቱ መጠን ይቀንሳል.
በፊት-መጨረሻ መስተጋብር ውስጥ ለመጀመሪያ ጊዜ ሲጫኑ መዘግየትን ለማስወገድ የጠቋሚው የመጫኛ ሂደት አሞሌ ሊታይ ይችላል "የሂደት አሞሌ ከአኒሜሽን ጋር፣ በነጠላ ላይ የተመሰረተ progress + ንጹህ css ትግበራ" እንግሊዝኛ / ቻይንኛ ።
ፕሮጀክቱ idb የ IndexedDB
IndexedDB ማንበብ እና መፃፍ የማይመሳሰሉ ናቸው። ኢንዴክስ በሚፈጥሩበት ጊዜ ኢንዴክስ ለመፍጠር ሰነዶች በአንድ ጊዜ ይጫናሉ።
በውድድር አጻጻፍ ምክንያት የሚፈጠረውን ከፊል የውሂብ መጥፋት ለማስቀረት ከዚህ በታች ያለውን coffeescript
ኮድ በመመልከት ing
መሸጎጫ በማንበብ እና በመጻፍ መካከል በማከል የተወዳዳሪ ጽሁፎችን ለመጥለፍ ይችላሉ።
pusher = =>
ing = new Map()
(table, id, val)=>
id_set = ing.get(id)
if id_set
id_set.add val
return
id_set = new Set([val])
ing.set id, id_set
pre = await table.get(id)
li = pre?.li or []
loop
to_add = [...id_set]
li.push(...to_add)
await table.put({id,li})
for i from to_add
id_set.delete i
if not id_set.size
ing.delete id
break
return
rindexPush = pusher()
prefixPush = pusher()
ፍለጋው በመጀመሪያ በተጠቃሚው የገቡትን ቁልፍ ቃላት ይከፋፍላል.
ክፍልፋይ ከሚለው ቃል N-2
N
ቃላቶች N-1
እንገምታለን 1
የሚታየው የፍለጋ ውጤቶቹ በመጀመሪያ የጥያቄውን ትክክለኛነት ያረጋግጣሉ፣ እና ከዚያ በኋላ የተጫኑት ውጤቶች (የጭነቱን ተጨማሪ ቁልፍ ጠቅ ያድርጉ) የማስታወሻውን መጠን ያረጋግጣሉ።
የምላሽ ፍጥነትን ለማሻሻል ፍለጋው በፍላጎት መጫንን ለመተግበር yield
ጄነሬተር ይጠቀማል እና ውጤቱ በተጠየቀ limit
ይመለሳል።
ከ yield
በኋላ በፈለጉ ቁጥር የ IndexedDB
መጠይቅን እንደገና መክፈት እንደሚያስፈልግዎት ልብ ይበሉ።
ተጠቃሚው በሚተይብበት ጊዜ የፍለጋ ውጤቶችን ለማሳየት ለምሳሌ wor
ሲገባ wor
እንደ words
እና work
ያሉ ቅድመ ቅጥያ ያላቸው ቃላት ይታያሉ።
የፍለጋ ከርነል ከቃላት ክፍፍል በኋላ ለመጨረሻው ቃል prefix
ሠንጠረዥን ይጠቀማል እና ሁሉንም ቃላቶች ከእሱ ጋር ቅድመ ቅጥያ ለማግኘት እና በቅደም ተከተል ይፈልጉ።
የፀረ-ሻክ ተግባር debounce
በተጨማሪም የፊት-መጨረሻ መስተጋብር (እንደሚከተለው ይተገበራል) የተጠቃሚውን የግቤት ቀስቃሽ ፍለጋዎች ድግግሞሽ ለመቀነስ እና የስሌቱን መጠን ለመቀነስ ያገለግላል።
export default (wait, func) => {
var timeout;
return function(...args) {
clearTimeout(timeout);
timeout = setTimeout(func.bind(this, ...args), wait);
};
}
የመረጃ ጠቋሚው ሰንጠረዥ ዋናውን ጽሑፍ አያከማችም, ቃላቶቹን ብቻ, ይህም የማከማቻውን መጠን ይቀንሳል.
የፍለጋ ውጤቶችን ማድመቅ ዋናውን ጽሑፍ እንደገና መጫን ያስፈልገዋል፣ እና service worker
ማዛመድ ተደጋጋሚ የአውታረ መረብ ጥያቄዎችን ያስወግዳል።
በተመሳሳይ ጊዜ፣ service worker
ሁሉንም መጣጥፎች ስለሚሸጎጥ፣ አንዴ ተጠቃሚው ፍለጋ ካደረገ፣ ፍለጋውን ጨምሮ መላው ድር ጣቢያ ከመስመር ውጭ ይገኛል።
i18n.site
's ንጹህ የፊት-መጨረሻ ፍለጋ መፍትሄ ለ MarkDown
ሰነዶች የተመቻቸ ነው።
የፍለጋ ውጤቶችን በሚያሳዩበት ጊዜ የምዕራፉ ስም ይታያል እና ክሊክ ሲደረግ ምዕራፉ ይዳሰሳል.
የተገለበጠ የሙሉ ጽሁፍ ፍለጋ በፊት መጨረሻ ላይ ብቻ ተተግብሯል፣ ምንም አገልጋይ አያስፈልግም። ለአነስተኛ እና መካከለኛ መጠን ያላቸው ድረ-ገጾች እንደ ሰነዶች እና የግል ብሎጎች በጣም ተስማሚ ነው.
i18n.site
ክፍት ምንጭ በራሱ የዳበረ ንፁህ የፊት-መጨረሻ ፍለጋ፣ መጠኑ አነስተኛ እና ፈጣን ምላሽ፣ አሁን ያለውን የንፁህ የፊት-መጨረሻ የሙሉ ጽሑፍ ፍለጋ ጉድለቶችን የሚፈታ እና የተሻለ የተጠቃሚ ተሞክሮ ይሰጣል።