brief: | i18n.site এ এতিয়া চাৰ্ভাৰবিহীন সম্পূৰ্ণ-পাঠ্য সন্ধান সমৰ্থন কৰে।

এই প্ৰবন্ধটোৱে বিশুদ্ধ ফ্ৰন্ট-এণ্ড সম্পূৰ্ণ-পাঠ্য অনুসন্ধান প্ৰযুক্তিৰ প্ৰণয়নৰ পৰিচয় দিয়ে, য'ত IndexedDB দ্বাৰা নিৰ্মিত ওলোটা সূচী, উপসৰ্গ অনুসন্ধান, শব্দ বিভাজন অনুকূলন আৰু বহু-ভাষা সমৰ্থন অন্তৰ্ভুক্ত কৰা হৈছে।

বৰ্তমানৰ সমাধানসমূহৰ সৈতে তুলনা কৰিলে, i18n.site ৰ বিশুদ্ধ ফ্ৰন্ট-এণ্ড সম্পূৰ্ণ-পাঠ্য সন্ধান আকাৰত সৰু আৰু দ্ৰুত, সৰু আৰু মজলীয়া আকাৰৰ ৱেবছাইট যেনে নথিপত্ৰ আৰু ব্লগৰ বাবে উপযোগী, আৰু অফলাইনত উপলব্ধ।


বিশুদ্ধ ফ্ৰন্ট-এণ্ড ওলোটা সম্পূৰ্ণ-পাঠ্য সন্ধান

ক্ৰম

কেইবা সপ্তাহৰ বিকাশৰ পিছত i18n.site (এটা বিশুদ্ধভাৱে স্থিতিশীল markdown বহুভাষিক অনুবাদ & ৱেবছাইট নিৰ্মাণ সঁজুলি) এতিয়া বিশুদ্ধ ফ্ৰন্ট-এণ্ড সম্পূৰ্ণ-পাঠ্য সন্ধান সমৰ্থন কৰে।

এই প্ৰবন্ধটোৱে i18n.site বিশুদ্ধ ফ্ৰন্ট-এণ্ড সম্পূৰ্ণ i18n.site পাঠ্য সন্ধানৰ কাৰিকৰী প্ৰণয়ন শ্বেয়াৰ কৰিব।

মুক্ত : ক'ড কৰক কাৰ্ণেল / ইন্টাৰেক্টিভ আন্তঃপৃষ্ঠ

চাৰ্ভাৰবিহীন সম্পূৰ্ণ-পাঠ্য সন্ধান সমাধানৰ এটা পৰ্যালোচনা

সৰু আৰু মজলীয়া আকাৰৰ বিশুদ্ধভাৱে স্থিতিশীল ৱেবছাইট যেনে নথিপত্ৰ/ব্যক্তিগত ব্লগৰ বাবে, এটা স্ব-নিৰ্মিত সম্পূৰ্ণ-পাঠ্য অনুসন্ধান বেকএণ্ড নিৰ্মাণ কৰাটো অতি গধুৰ, আৰু সেৱা-মুক্ত সম্পূৰ্ণ-পাঠ্য সন্ধান অধিক সাধাৰণ পছন্দ।

চাৰ্ভাৰবিহীন সম্পূৰ্ণ-পাঠ্য সন্ধান সমাধানসমূহ দুটা বহল শ্ৰেণীত পৰে:

প্ৰথমতে, একেধৰণৰ algolia.com

এনে সেৱাসমূহৰ বাবে সন্ধানৰ পৰিমাণৰ ওপৰত ভিত্তি কৰি ধন পৰিশোধৰ প্ৰয়োজন হয়, আৰু ৱেবছাইট অনুসৰণৰ দৰে সমস্যাৰ বাবে মূল চীনৰ ব্যৱহাৰকাৰীসকলৰ বাবে প্ৰায়ে উপলব্ধ নহয়।

ইয়াক অফলাইনত ব্যৱহাৰ কৰিব নোৱাৰি, ইন্ট্ৰানেটত ব্যৱহাৰ কৰিব নোৱাৰি, আৰু ইয়াৰ ডাঙৰ সীমাবদ্ধতা আছে। এই লেখাটোত বিশেষ আলোচনা কৰা হোৱা নাই।

দ্বিতীয়টো হ’ল বিশুদ্ধ ফ্ৰন্ট-এণ্ড সম্পূৰ্ণ পাঠ্য সন্ধান।

বৰ্তমান, সাধাৰণ বিশুদ্ধ ফ্ৰন্ট-এণ্ড সম্পূৰ্ণ-পাঠ্য সন্ধানসমূহে lunrjs আৰু ElasticLunr.js ( lunrjs গৌণ বিকাশৰ ওপৰত ভিত্তি কৰি) অন্তৰ্ভুক্ত কৰে।

lunrjs সূচী নিৰ্মাণৰ দুটা উপায় আছে, আৰু দুয়োটাৰে নিজস্ব সমস্যা আছে।

  1. পূৰ্ব-নিৰ্মিত সূচী ফাইলসমূহ

    যিহেতু সূচীত সকলো নথিপত্ৰৰ শব্দ থাকে, সেয়েহে ইয়াৰ আকাৰ ডাঙৰ। যেতিয়াই এটা দস্তাবেজ যোগ বা পৰিবৰ্তন কৰা হয়, এটা নতুন সূচী নথিপত্ৰ ল'ড কৰিব লাগিব । ই ব্যৱহাৰকাৰীৰ অপেক্ষাৰ সময় বৃদ্ধি কৰিব আৰু বহু বেণ্ডউইডথ খৰচ কৰিব।

  2. নথিপত্ৰসমূহ লোড কৰক আৰু উৰি ফুৰাতে সূচীসমূহ নিৰ্মাণ কৰক

    এটা সূচী নিৰ্মাণ কৰাটো এটা গণনামূলকভাৱে নিবিড় কাম।


lunrjs ৰ উপৰিও আন কিছুমান সম্পূৰ্ণ-পাঠ্য সন্ধান সমাধান আছে, যেনে :

fusejs , সন্ধান কৰিবলৈ ষ্ট্ৰিংসমূহৰ মাজৰ সাদৃশ্য গণনা কৰক।

এই সমাধানৰ পৰিৱেশন অতি দুৰ্বল আৰু সম্পূৰ্ণ-পাঠ্য সন্ধানৰ বাবে ব্যৱহাৰ কৰিব নোৱাৰি (চাওক Fuse.js দীঘলীয়া প্ৰশ্নত 10 ছেকেণ্ডতকৈ অধিক সময় লাগে, ইয়াক কেনেকৈ অনুকূল কৰিব পাৰি? ) ।

TinySearch goo good google

বৰ্তমানৰ সমাধানসমূহৰ অভাৱৰ বাবে, i18n.site এটা নতুন বিশুদ্ধ ফ্ৰন্ট-এণ্ড সম্পূৰ্ণ-পাঠ্য অনুসন্ধান সমাধান বিকশিত কৰিলে, যাৰ তলত দিয়া বৈশিষ্ট্যসমূহ আছে :

  1. gzip পেকেজিং কৰাৰ পিছত সন্ধান কাৰ্ণেলৰ আকাৰ 6.9KB (তুলনাৰ বাবে, lunrjs ৰ আকাৰ 25KB ) ।
  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 শব্দ আছে ফলাফল ঘূৰাই দিওঁতে, সকলো মূলশব্দ থকা ফলাফলসমূহ প্ৰথমে ঘূৰাই দিয়া হ'ব, আৰু তাৰ পিছত N-1 , N-2 ,..., 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 ৰ বিশুদ্ধ ফ্ৰন্ট-এণ্ড সন্ধান সমাধান MarkDown নথিপত্ৰৰ বাবে অনুকূলিত কৰা হৈছে।

সন্ধান ফলাফল প্ৰদৰ্শন কৰাৰ সময়ত অধ্যায়ৰ নাম প্ৰদৰ্শিত হ'ব আৰু ক্লিক কৰিলে অধ্যায়টো নেভিগেট কৰা হ'ব।

সাৰাংশ লিখা

ওলোটা সম্পূৰ্ণ-পাঠ্য সন্ধান বিশুদ্ধভাৱে ফ্ৰন্ট এণ্ডত প্ৰণয়ন কৰা হৈছে, কোনো চাৰ্ভাৰৰ প্ৰয়োজন নাই। সৰু আৰু মজলীয়া আকাৰৰ ৱেবছাইট যেনে নথিপত্ৰ আৰু ব্যক্তিগত ব্লগৰ বাবে ই অতি উপযোগী।

i18n.site মুক্ত উৎস স্ব-বিকশিত বিশুদ্ধ ফ্ৰন্ট-এণ্ড অনুসন্ধান, আকাৰত সৰু আৰু দ্ৰুত সঁহাৰি, বৰ্তমান বিশুদ্ধ ফ্ৰন্ট-এণ্ড সম্পূৰ্ণ-পাঠ্য সন্ধানৰ অভাৱসমূহ সমাধান কৰে আৰু এটা উন্নত ব্যৱহাৰকাৰী অভিজ্ঞতা প্ৰদান কৰে।