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()

లో:

ఇండెక్స్ భవనం

5 ఆబ్జెక్ట్ నిల్వ పట్టికలు IndexedDB లో సృష్టించబడ్డాయి :

పత్రం 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 నమోదు చేసినప్పుడు, 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 యొక్క స్వచ్ఛమైన ఫ్రంట్-ఎండ్ శోధన పరిష్కారం MarkDown పత్రాల కోసం ఆప్టిమైజ్ చేయబడింది.

శోధన ఫలితాలను ప్రదర్శించేటప్పుడు, చాప్టర్ పేరు ప్రదర్శించబడుతుంది మరియు క్లిక్ చేసినప్పుడు అధ్యాయం నావిగేట్ చేయబడుతుంది.

సంగ్రహించండి

విలోమ పూర్తి-వచన శోధన పూర్తిగా ఫ్రంట్ ఎండ్లో అమలు చేయబడింది, సర్వర్ అవసరం లేదు. పత్రాలు మరియు వ్యక్తిగత బ్లాగులు వంటి చిన్న మరియు మధ్య తరహా వెబ్సైట్లకు ఇది చాలా అనుకూలంగా ఉంటుంది.

i18n.site ఓపెన్ సోర్స్ స్వీయ-అభివృద్ధి చెందిన స్వచ్ఛమైన ఫ్రంట్-ఎండ్ శోధన, పరిమాణంలో చిన్నది మరియు వేగవంతమైన ప్రతిస్పందన, ప్రస్తుత స్వచ్ఛమైన ఫ్రంట్-ఎండ్ పూర్తి-టెక్స్ట్ శోధన యొక్క లోపాలను పరిష్కరిస్తుంది మరియు మెరుగైన వినియోగదారు అనుభవాన్ని అందిస్తుంది.