brief: | i18n.site এ এতিয়া চাৰ্ভাৰবিহীন সম্পূৰ্ণ-পাঠ্য সন্ধান সমৰ্থন কৰে।
এই প্ৰবন্ধটোৱে বিশুদ্ধ ফ্ৰন্ট-এণ্ড সম্পূৰ্ণ-পাঠ্য অনুসন্ধান প্ৰযুক্তিৰ প্ৰণয়নৰ পৰিচয় দিয়ে, য'ত IndexedDB দ্বাৰা নিৰ্মিত ওলোটা সূচী, উপসৰ্গ অনুসন্ধান, শব্দ বিভাজন অনুকূলন আৰু বহু-ভাষা সমৰ্থন অন্তৰ্ভুক্ত কৰা হৈছে।
বৰ্তমানৰ সমাধানসমূহৰ সৈতে তুলনা কৰিলে, i18n.site ৰ বিশুদ্ধ ফ্ৰন্ট-এণ্ড সম্পূৰ্ণ-পাঠ্য সন্ধান আকাৰত সৰু আৰু দ্ৰুত, সৰু আৰু মজলীয়া আকাৰৰ ৱেবছাইট যেনে নথিপত্ৰ আৰু ব্লগৰ বাবে উপযোগী, আৰু অফলাইনত উপলব্ধ।
কেইবা সপ্তাহৰ বিকাশৰ পিছত i18n.site (এটা বিশুদ্ধভাৱে স্থিতিশীল markdown বহুভাষিক অনুবাদ & ৱেবছাইট নিৰ্মাণ সঁজুলি) এতিয়া বিশুদ্ধ ফ্ৰন্ট-এণ্ড সম্পূৰ্ণ-পাঠ্য সন্ধান সমৰ্থন কৰে।
এই প্ৰবন্ধটোৱে i18n.site
বিশুদ্ধ ফ্ৰন্ট-এণ্ড সম্পূৰ্ণ i18n.site পাঠ্য সন্ধানৰ কাৰিকৰী প্ৰণয়ন শ্বেয়াৰ কৰিব।
মুক্ত : ক'ড কৰক কাৰ্ণেল / ইন্টাৰেক্টিভ আন্তঃপৃষ্ঠ
সৰু আৰু মজলীয়া আকাৰৰ বিশুদ্ধভাৱে স্থিতিশীল ৱেবছাইট যেনে নথিপত্ৰ/ব্যক্তিগত ব্লগৰ বাবে, এটা স্ব-নিৰ্মিত সম্পূৰ্ণ-পাঠ্য অনুসন্ধান বেকএণ্ড নিৰ্মাণ কৰাটো অতি গধুৰ, আৰু সেৱা-মুক্ত সম্পূৰ্ণ-পাঠ্য সন্ধান অধিক সাধাৰণ পছন্দ।
চাৰ্ভাৰবিহীন সম্পূৰ্ণ-পাঠ্য সন্ধান সমাধানসমূহ দুটা বহল শ্ৰেণীত পৰে:
প্ৰথমতে, একেধৰণৰ algolia.com
এনে সেৱাসমূহৰ বাবে সন্ধানৰ পৰিমাণৰ ওপৰত ভিত্তি কৰি ধন পৰিশোধৰ প্ৰয়োজন হয়, আৰু ৱেবছাইট অনুসৰণৰ দৰে সমস্যাৰ বাবে মূল চীনৰ ব্যৱহাৰকাৰীসকলৰ বাবে প্ৰায়ে উপলব্ধ নহয়।
ইয়াক অফলাইনত ব্যৱহাৰ কৰিব নোৱাৰি, ইন্ট্ৰানেটত ব্যৱহাৰ কৰিব নোৱাৰি, আৰু ইয়াৰ ডাঙৰ সীমাবদ্ধতা আছে। এই লেখাটোত বিশেষ আলোচনা কৰা হোৱা নাই।
দ্বিতীয়টো হ’ল বিশুদ্ধ ফ্ৰন্ট-এণ্ড সম্পূৰ্ণ পাঠ্য সন্ধান।
বৰ্তমান, সাধাৰণ বিশুদ্ধ ফ্ৰন্ট-এণ্ড সম্পূৰ্ণ-পাঠ্য সন্ধানসমূহে lunrjs আৰু ElasticLunr.js ( lunrjs
গৌণ বিকাশৰ ওপৰত ভিত্তি কৰি) অন্তৰ্ভুক্ত কৰে।
lunrjs
সূচী নিৰ্মাণৰ দুটা উপায় আছে, আৰু দুয়োটাৰে নিজস্ব সমস্যা আছে।
পূৰ্ব-নিৰ্মিত সূচী ফাইলসমূহ
যিহেতু সূচীত সকলো নথিপত্ৰৰ শব্দ থাকে, সেয়েহে ইয়াৰ আকাৰ ডাঙৰ। যেতিয়াই এটা দস্তাবেজ যোগ বা পৰিবৰ্তন কৰা হয়, এটা নতুন সূচী নথিপত্ৰ ল'ড কৰিব লাগিব । ই ব্যৱহাৰকাৰীৰ অপেক্ষাৰ সময় বৃদ্ধি কৰিব আৰু বহু বেণ্ডউইডথ খৰচ কৰিব।
নথিপত্ৰসমূহ লোড কৰক আৰু উৰি ফুৰাতে সূচীসমূহ নিৰ্মাণ কৰক
এটা সূচী নিৰ্মাণ কৰাটো এটা গণনামূলকভাৱে নিবিড় কাম।
lunrjs
ৰ উপৰিও আন কিছুমান সম্পূৰ্ণ-পাঠ্য সন্ধান সমাধান আছে, যেনে :
fusejs , সন্ধান কৰিবলৈ ষ্ট্ৰিংসমূহৰ মাজৰ সাদৃশ্য গণনা কৰক।
এই সমাধানৰ পৰিৱেশন অতি দুৰ্বল আৰু সম্পূৰ্ণ-পাঠ্য সন্ধানৰ বাবে ব্যৱহাৰ কৰিব নোৱাৰি (চাওক Fuse.js দীঘলীয়া প্ৰশ্নত 10 ছেকেণ্ডতকৈ অধিক সময় লাগে, ইয়াক কেনেকৈ অনুকূল কৰিব পাৰি? ) ।
TinySearch goo
good
google
বৰ্তমানৰ সমাধানসমূহৰ অভাৱৰ বাবে, i18n.site
এটা নতুন বিশুদ্ধ ফ্ৰন্ট-এণ্ড সম্পূৰ্ণ-পাঠ্য অনুসন্ধান সমাধান বিকশিত কৰিলে, যাৰ তলত দিয়া বৈশিষ্ট্যসমূহ আছে :
gzip
পেকেজিং কৰাৰ পিছত সন্ধান কাৰ্ণেলৰ আকাৰ 6.9KB
(তুলনাৰ বাবে, lunrjs
ৰ আকাৰ 25KB
) ।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 - শব্দ idprefix
: উপসৰ্গৰ এৰে - শব্দ 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
শব্দ আছে ফলাফল ঘূৰাই দিওঁতে, সকলো মূলশব্দ থকা ফলাফলসমূহ প্ৰথমে ঘূৰাই দিয়া হ'ব, আৰু তাৰ পিছত 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
সকলো প্ৰবন্ধ কেচ কৰে, ব্যৱহাৰকাৰীয়ে এবাৰ সন্ধান কৰিলে, সন্ধানকে ধৰি সমগ্ৰ ৱেবছাইটটো অফলাইনত উপলব্ধ হয়।
i18n.site
ৰ বিশুদ্ধ ফ্ৰন্ট-এণ্ড সন্ধান সমাধান MarkDown
নথিপত্ৰৰ বাবে অনুকূলিত কৰা হৈছে।
সন্ধান ফলাফল প্ৰদৰ্শন কৰাৰ সময়ত অধ্যায়ৰ নাম প্ৰদৰ্শিত হ'ব আৰু ক্লিক কৰিলে অধ্যায়টো নেভিগেট কৰা হ'ব।
ওলোটা সম্পূৰ্ণ-পাঠ্য সন্ধান বিশুদ্ধভাৱে ফ্ৰন্ট এণ্ডত প্ৰণয়ন কৰা হৈছে, কোনো চাৰ্ভাৰৰ প্ৰয়োজন নাই। সৰু আৰু মজলীয়া আকাৰৰ ৱেবছাইট যেনে নথিপত্ৰ আৰু ব্যক্তিগত ব্লগৰ বাবে ই অতি উপযোগী।
i18n.site
মুক্ত উৎস স্ব-বিকশিত বিশুদ্ধ ফ্ৰন্ট-এণ্ড অনুসন্ধান, আকাৰত সৰু আৰু দ্ৰুত সঁহাৰি, বৰ্তমান বিশুদ্ধ ফ্ৰন্ট-এণ্ড সম্পূৰ্ণ-পাঠ্য সন্ধানৰ অভাৱসমূহ সমাধান কৰে আৰু এটা উন্নত ব্যৱহাৰকাৰী অভিজ্ঞতা প্ৰদান কৰে।