brief: | i18n.site አሁን አገልጋይ አልባ የሙሉ ጽሑፍ ፍለጋን ይደግፋል።

ይህ መጣጥፍ በ IndexedDB የተሰራ የተገለበጠ ኢንዴክስ፣ ቅድመ ቅጥያ ፍለጋ፣ የቃላት ክፍፍል ማመቻቸት እና ባለብዙ ቋንቋ ድጋፍን ጨምሮ የንፁህ የፊት-መጨረሻ የሙሉ-ጽሑፍ ፍለጋ ቴክኖሎጂን ትግበራ ያስተዋውቃል።

ከነባር መፍትሄዎች ጋር ሲነጻጸር የi18n.site ንጹህ የፊት-ፍጻሜ ሙሉ ጽሁፍ ፍለጋ በመጠን እና በፍጥነት አነስተኛ እና መካከለኛ መጠን ላላቸው እንደ ሰነዶች እና ብሎጎች ላሉ ድረ-ገጾች ተስማሚ ነው እና ከመስመር ውጭ ይገኛል።


ንጹህ የፊት-መጨረሻ የተገለበጠ ሙሉ-ጽሑፍ ፍለጋ

ቅደም ተከተል

ከበርካታ ሳምንታት የዕድገት & በኋላ markdown i18n.site

ይህ መጣጥፍ የ i18n.site ንፁህ የፊት-ፍጻሜ የፍለጋ ውጤቱን ለማየት ቴክኒካዊ አተገባበርን ያካፍላል i18n.site

ኮድ ክፍት : ፈልግ ከርነል / በይነተገናኝ በይነገጽ

አገልጋይ አልባ የሙሉ ጽሑፍ ፍለጋ መፍትሄዎች አጠቃላይ እይታ

ለአነስተኛ እና መካከለኛ መጠን ያላቸው ንፁህ የማይንቀሳቀሱ ድረ-ገጾች እንደ ሰነዶች/የግል ብሎጎች፣ በራስ-የተሰራ የሙሉ ጽሑፍ ፍለጋ ጀርባ መገንባት በጣም ከባድ ነው፣ እና ከአገልግሎት ነፃ የሆነ የሙሉ ጽሑፍ ፍለጋ የበለጠ የተለመደ ምርጫ ነው።

አገልጋይ አልባ የሙሉ ጽሑፍ ፍለጋ መፍትሄዎች በሁለት ሰፊ ምድቦች ይከፈላሉ፡-

በመጀመሪያ፣ ተመሳሳይ algolia.com

እንደዚህ ያሉ አገልግሎቶች በፍለጋ መጠን ላይ ተመስርተው ክፍያ ይጠይቃሉ፣ እና እንደ ድረ-ገጽ ማክበር ባሉ ጉዳዮች ብዙ ጊዜ በዋናው ቻይና ላሉ ተጠቃሚዎች አይገኙም።

ከመስመር ውጭ ጥቅም ላይ ሊውል አይችልም, በበይነመረብ ላይ ጥቅም ላይ ሊውል አይችልም, እና ከፍተኛ ገደቦች አሉት. ይህ ጽሑፍ ብዙም አይወያይም።

ሁለተኛው ንጹህ የፊት-መጨረሻ ሙሉ-ጽሑፍ ፍለጋ ነው።

በአሁኑ ጊዜ፣ የተለመዱ የንፁህ የፊት-መጨረሻ ሙሉ-ጽሑፍ ፍለጋዎች lunrjs እና ElasticLunr.js (በ lunrjs ሁለተኛ ደረጃ እድገት ላይ የተመሰረተ) ያካትታሉ።

lunrjs ኢንዴክሶችን ለመገንባት ሁለት መንገዶች አሉ, እና ሁለቱም የራሳቸው ችግሮች አሏቸው.

  1. አስቀድሞ የተገነቡ የመረጃ ጠቋሚ ፋይሎች

    መረጃ ጠቋሚው ከሁሉም ሰነዶች ውስጥ ቃላትን ስለያዘ, መጠኑ ትልቅ ነው. ሰነድ ሲታከል ወይም ሲሻሻል አዲስ የመረጃ ጠቋሚ ፋይል መጫን አለበት። የተጠቃሚውን የመቆያ ጊዜ ይጨምራል እና ብዙ የመተላለፊያ ይዘት ያጠፋል.

  2. ሰነዶችን ይጫኑ እና በበረራ ላይ ኢንዴክሶችን ይገንቡ

    ኢንዴክስን መገንባት በስሌት የተጠናከረ ተግባር ሲሆን መረጃ ጠቋሚውን በደረሱ ቁጥር እንደገና መገንባት ግልጽ የሆነ መዘግየት እና ደካማ የተጠቃሚ ተሞክሮ ያስከትላል።


lunrjs በተጨማሪ ሌሎች የሙሉ ጽሑፍ ፍለጋ መፍትሄዎች አሉ፣ ለምሳሌ :

ለመፈለግ በሕብረቁምፊዎች መካከል ያለውን ተመሳሳይነት ያሰሉ fusejs

የዚህ መፍትሔ አፈጻጸም እጅግ በጣም ደካማ ነው እና ለሙሉ ጽሑፍ ፍለጋ መጠቀም አይቻልም (ይመልከቱ Fuse.js ረጅም መጠይቅ ከ 10 ሰከንድ በላይ ይወስዳል፣ እንዴት ማመቻቸት ይቻላል? )።

TinySearch ፣ ለመፈለግ Bloom ማጣሪያን ይጠቀሙ፣ ለቅድመ-ቅጥያ ፍለጋ (ለምሳሌ፣ goo አስገባ፣ ፍለጋ goodgoogle ) መጠቀም አይቻልም፣ እና ተመሳሳይ የማጠናቀቂያ ውጤት ማምጣት አይቻልም።

በነባር መፍትሄዎች ድክመቶች ምክንያት, i18n.site አዲስ ንጹህ የፊት-መጨረሻ ሙሉ-ጽሑፍ ፍለጋ መፍትሄ አዘጋጅቷል, እሱም የሚከተሉት ባህሪያት አሉት :

  1. ባለብዙ ቋንቋ ፍለጋን ይደግፋል እና መጠኑ አነስተኛ ነው ከማሸጊያው በኋላ የፍለጋው ከርነል መጠን gzip ነው (ለማነፃፀር የ lunrjs መጠን 25KB 6.9KB ).
  2. አነስተኛ ማህደረ ትውስታን የሚወስድ እና ፈጣን በ indexedb ላይ የተመሠረተ የተገለበጠ መረጃ ጠቋሚ ይገንቡ።
  3. ሰነዶች ሲጨመሩ / ሲሻሻሉ, የተጨመሩ ወይም የተሻሻሉ ሰነዶች ብቻ እንደገና ኢንዴክስ ይደረጋል, ይህም የስሌቶችን መጠን ይቀንሳል.
  4. ቅድመ ቅጥያ ፍለጋን ይደግፋል፣ ተጠቃሚው በሚተይብበት ጊዜ የፍለጋ ውጤቶችን በቅጽበት ማሳየት ይችላል።
  5. ከመስመር ውጭ ይገኛል።

ከዚህ በታች, 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()

ውስጥ፡

ኢንዴክስ ግንባታ

IndexedDB ውስጥ 5 የእቃ ማከማቻ ጠረጴዛዎች ተፈጥረዋል :

በሰነድ url እና በስሪት ቁጥር ver ድርድር ውስጥ ይለፉ እና ሰነዱ በሰንጠረዥ doc ውስጥ መኖሩን ይፈልጉ. ከሌለ, የተገለበጠ መረጃ ጠቋሚ ይፍጠሩ. በተመሳሳይ ጊዜ, ላልተላለፉ ሰነዶች የተገለበጠውን መረጃ ጠቋሚ ያስወግዱ.

በዚህ መንገድ, የመጨመሪያ መረጃ ጠቋሚ ሊደረስበት እና የስሌቱ መጠን ይቀንሳል.

በፊት-መጨረሻ መስተጋብር ውስጥ ለመጀመሪያ ጊዜ ሲጫኑ መዘግየትን ለማስወገድ የጠቋሚው የመጫኛ ሂደት አሞሌ ሊታይ ይችላል "የሂደት አሞሌ ከአኒሜሽን ጋር፣ በነጠላ ላይ የተመሰረተ progress + ንጹህ css ትግበራ" እንግሊዝኛ / ቻይንኛ

IndexedDB ከፍተኛ በተመሳሳይ ጊዜ መጻፍ

ፕሮጀክቱ 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 ሁሉንም መጣጥፎች ስለሚሸጎጥ፣ አንዴ ተጠቃሚው ፍለጋ ካደረገ፣ ፍለጋውን ጨምሮ መላው ድር ጣቢያ ከመስመር ውጭ ይገኛል።

የ MarkDown ሰነዶችን ማመቻቸት አሳይ

i18n.site 's ንጹህ የፊት-መጨረሻ ፍለጋ መፍትሄ ለ MarkDown ሰነዶች የተመቻቸ ነው።

የፍለጋ ውጤቶችን በሚያሳዩበት ጊዜ የምዕራፉ ስም ይታያል እና ክሊክ ሲደረግ ምዕራፉ ይዳሰሳል.

ማጠቃለል

የተገለበጠ የሙሉ ጽሑፍ ፍለጋ በፊት ለፊት ጫፍ ላይ ብቻ ተተግብሯል፣ ምንም አገልጋይ አያስፈልግም። ለአነስተኛ እና መካከለኛ መጠን ያላቸው ድረ-ገጾች እንደ ሰነዶች እና የግል ብሎጎች በጣም ተስማሚ ነው.

i18n.site ክፍት ምንጭ በራሱ የዳበረ ንፁህ የፊት-መጨረሻ ፍለጋ፣ መጠኑ አነስተኛ እና ፈጣን ምላሽ፣ አሁን ያለውን የንፁህ የፊት-መጨረሻ የሙሉ ጽሑፍ ፍለጋ ጉድለቶችን የሚፈታ እና የተሻለ የተጠቃሚ ተሞክሮ ይሰጣል።