brief: | i18n.site इदानीं सर्वररहितपूर्णपाठसन्धानं समर्थयति ।
अस्मिन् लेखे शुद्ध-अग्र-अन्त-पूर्ण-पाठ-अन्वेषण-प्रौद्योगिक्याः कार्यान्वयनस्य परिचयः कृतः, यत्र IndexedDB द्वारा निर्मितं उल्टा अनुक्रमणिका, उपसर्ग-अन्वेषणं, शब्द-विभाजन-अनुकूलनम्, बहु-भाषा-समर्थनं च सन्ति
विद्यमानसमाधानस्य तुलने i18n.site इत्यस्य शुद्धः अग्रभागः पूर्णपाठसन्धानः आकारेण लघुः द्रुतश्च भवति, दस्तावेजाः, ब्लोग् इत्यादीनां लघुमध्यम-आकारस्य वेबसाइट्-स्थानानां कृते उपयुक्तः, अफलाइन-उपलब्धः च अस्ति
विकासस्य कतिपयानां सप्ताहाणां अनन्तरं i18n.site (एकं विशुद्धरूपेण स्थिरं markdown बहुभाषिकअनुवादं & वेबसाइटनिर्माणसाधनम्) अधुना शुद्धं अग्रभागं पूर्णपाठसन्धानं समर्थयति ।
अयं लेखः i18n.site अनुभवाय i18n.site
शुद्धस्य अग्रभागस्य पूर्णपाठसन्धानस्य तकनीकीकार्यन्वयनं साझां करिष्यति ।
कोड मुक्त स्रोत : अन्वेषण कर्नल / अन्तरक्रियाशील अन्तरफलक
दस्तावेजाः/व्यक्तिगतब्लॉग् इत्यादीनां लघुमध्यम-आकारस्य विशुद्धरूपेण स्थिरजालस्थलानां कृते स्वयमेव निर्मितस्य पूर्णपाठसन्धानपृष्ठभागस्य निर्माणं अतीव भारी भवति, सेवारहितं पूर्णपाठसन्धानं च अधिकसामान्यविकल्पः भवति
सर्वररहितं पूर्णपाठसन्धानसमाधानं व्यापकवर्गद्वये भवति:
प्रथमं, तथैव algolia.com तृतीयपक्षस्य अन्वेषणसेवाप्रदातारः पूर्णपाठसन्धानार्थं अग्रभागघटकाः प्रदास्यन्ति ।
एतादृशानां सेवानां कृते अन्वेषणमात्रायाः आधारेण भुक्तिः आवश्यकी भवति, तथा च प्रायः मुख्यभूमिचीनदेशे उपयोक्तृभ्यः वेबसाइट् अनुपालनम् इत्यादिभिः विषयैः अनुपलब्धा भवति ।
अस्य उपयोगः अफलाइनरूपेण कर्तुं न शक्यते, अन्तर्जालपुटे उपयोक्तुं न शक्यते, महतीः सीमाः च सन्ति । अस्मिन् लेखे बहु चर्चा न कृता ।
द्वितीयं शुद्धं अग्रभागं पूर्णपाठसन्धानम् अस्ति ।
वर्तमान समये सामान्यशुद्ध-अग्र-अन्त-पूर्ण-पाठ-अन्वेषणेषु lunrjs , ElasticLunr.js ( lunrjs
गौण-विकासस्य आधारेण) च सन्ति ।
lunrjs
अनुक्रमणिकानिर्माणस्य द्वौ मार्गौ स्तः, उभयोः अपि स्वकीयाः समस्याः सन्ति ।
पूर्वनिर्मिताः अनुक्रमणिकासञ्चिकाः
यतः अनुक्रमणिकायां सर्वेषां दस्तावेजानां शब्दाः सन्ति, अतः तस्य आकारः विशालः अस्ति । यदा कदापि दस्तावेजं योजितं परिवर्तनं वा भवति तदा नूतना अनुक्रमणिकासञ्चिका अवश्यमेव लोड् कर्तव्या । एतेन उपयोक्तुः प्रतीक्षासमयः वर्धते, बहु बैण्डविड्थ् अपि उपभोगः भविष्यति ।
दस्तावेजान् लोड् कृत्वा मक्षिकायां अनुक्रमणिकाः निर्मातुम्
अनुक्रमणिकायाः निर्माणं कम्प्यूटेशनलरूपेण गहनं कार्यम् अस्ति यत् प्रत्येकं सूचकाङ्कस्य पुनर्निर्माणं कृत्वा स्पष्टविलम्बः, उपयोक्तृअनुभवः च दुर्बलः भविष्यति ।
lunrjs
इत्यस्य अतिरिक्तं अन्ये केचन पूर्णपाठसन्धानसमाधानाः सन्ति, यथा :
अस्य समाधानस्य कार्यक्षमता अत्यन्तं दुर्बलं भवति तथा च पूर्णपाठसन्धानार्थं उपयोक्तुं न शक्यते (द्रष्टव्यम् 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
: Word id - Document id : पङ्क्तिसङ्ख्यानां सरणीदस्तावेज url
तथा संस्करणसङ्ख्या ver
इत्यस्य सरणीं गच्छन्तु, तथा च अन्वेषणं कुर्वन्तु यत् दस्तावेजं सारणी doc
मध्ये अस्ति वा यदि नास्ति तर्हि उल्टा अनुक्रमणिकां रचयन्तु । तस्मिन् एव काले ये दस्तावेजाः न पारिताः आसन् तेषां कृते विपर्यस्तसूचकाङ्कं निष्कासयन्तु ।
एवं प्रकारेण वृद्धिशीलं अनुक्रमणिकाकरणं प्राप्तुं शक्यते, गणनायाः परिमाणं न्यूनीकरोति च ।
अग्र-अन्त-अन्तरक्रियायां, प्रथमवारं लोड्-करणसमये विलम्बं परिहरितुं अनुक्रमणिकायाः लोडिंग्-प्रगति-पट्टिकां प्रदर्शयितुं शक्यते "एनीमेशन-सहितं प्रगति-पट्टिका, एकैकस्य progress + शुद्ध css कार्यान्वयनस्य आधारेण" English / Chinese
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
प्रविष्टे सति, words
, work
इत्यादयः wor
उपसर्गयुक्ताः शब्दाः प्रदर्शिताः भवन्ति ।
अन्वेषणकर्नेल् शब्दविभाजनस्य अनन्तरं अन्तिमशब्दस्य कृते 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
मुक्तस्रोतः स्वयमेव विकसितः शुद्धः अग्रभागः अन्वेषणः, आकारेण लघुः द्रुतप्रतिसादः च, वर्तमानशुद्धस्य अग्रभागस्य पूर्णपाठसन्धानस्य दोषाणां समाधानं करोति तथा च उत्तमं उपयोक्तृअनुभवं प्रदाति