brief: | i18n.site ҳоло ҷустуҷӯи пурраи матнии бе серверро дастгирӣ мекунад.

Ин мақола татбиқи технологияи ҷустуҷӯи пурраи матни пештараро муаррифӣ мекунад, аз ҷумла индекси инверсите, ки аз ҷониби IndexedDB сохта шудааст, ҷустуҷӯи префикс, оптимизатсияи сегментатсияи калимаҳо ва дастгирии бисёрзабонӣ.

Дар муқоиса бо қарорҳои мавҷуда, ҷустуҷӯи пурраи матнии i18n.site аз ҷиҳати ҳаҷм хурд ва зуд аст, барои вебсайтҳои хурд ва миёна, ба монанди ҳуҷҷатҳо ва блогҳо мувофиқ аст ва дар ҳолати офлайн дастрас аст.


Ҷустуҷӯи Пурраи Матни Инвертшудаи Пештара

Пайдарпай

Пас аз чанд ҳафтаи таҳия, i18n.site (асбоби соф статикии markdown multilingualtranslation & ) ҳоло ҷустуҷӯи пурраи матнро дастгирӣ мекунад.

Ин мақола татбиқи техникии 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-2 калимаҳои 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 барои MarkDown ҳуҷҷат оптимизатсия карда шудааст.

Ҳангоми намоиши натиҷаҳои ҷустуҷӯ номи боб нишон дода мешавад ва ҳангоми пахш кардани он боб паймоиш мешавад.

Ҷамъбаст Кунед

Ҷустуҷӯи пурраи матни баргардонидашуда танҳо дар канори пешина амалӣ карда мешавад, сервер талаб карда намешавад. Он барои вебсайтҳои хурд ва миёна ба монанди ҳуҷҷатҳо ва блогҳои шахсӣ хеле мувофиқ аст.

i18n.site Ҷустуҷӯи поки фронталӣ, ки аз ҷиҳати ҳаҷм хурд ва вокуниши зуд таҳия шудааст, манбаи кушода, камбудиҳои ҷустуҷӯи пурраи матнии ҳозираро ҳал мекунад ва таҷрибаи беҳтари корбарро таъмин мекунад.