Луцене

Увод у луцен

Увод у луцен
У овој лекцији ћемо разумети рад једног од најмоћнијих претраживача пуних текстова, Апацхе Луцене. Са Апацхе Луцене можемо да користимо АПИ-је које он нуди на многим програмским језицима и изграђујемо функције које су нам потребне. Луцен је један од најмоћнијих мотора на којем је Еластицсеарцх изграђен.Пре него што започнемо са апликацијом која демонстрира рад Апацхе Луцене, схватићемо како Луцене ради и многе његове компоненте. Хајде да почнемо.

Зашто је потребна Луцене?

Претрага је једна од најчешћих операција коју радимо више пута дневно. Ова претрага може бити на више веб-страница које постоје на Вебу или у апликацији Музика или у спремишту кода или у комбинацији свих ових. Могло би се помислити да једноставна релациона база података такође може подржати претрагу. Ово је исправан. Базе података попут МиСКЛ подржавају претрагу пуног текста. Али шта је са Вебом или музичком апликацијом, спремиштем кода или комбинацијом свега овога? База података не може да чува ове податке у својим колонама. Чак и да јесте, биће потребно неприхватљиво време да се покрене оволика претрага.

Машина за претрагу пуног текста може покренути упит за претрагу на милионима датотека одједном. Брзина којом се подаци данас чувају у апликацији је огромна. Покретање претраживања целог текста на оваквом обиму података је тежак задатак. То је зато што информације које су нам потребне могу постојати у једној датотеци од милијарди датотека које се чувају на мрежи.

Како Луцене делује?

Очигледно питање које би требало да вам падне на памет је, како је Луцене тако брза у извршавању упита за пуни текст? Одговор на ово је, наравно, уз помоћ индекса које ствара. Али уместо да креира класични индекс, Луцене користи Обрнути индекси.

У класичном индексу, за сваки документ прикупљамо целу листу речи или израза које документ садржи. У обрнутом индексу, за сваку реч у свим документима чувамо у којем документу и положају се налази ова реч / појам. Ово је алгоритам високог стандарда који веома олакшава претрагу. Размотрите следећи пример креирања класичног индекса:

Доц1 -> "Ово", "је", "једноставно", "Луцен", "узорак", "класично", "обрнуто", "индекс"
Доц2 -> "Покретање", "Еластицсеарцх", "Убунту", "Ажурирање"
Доц3 -> "РаббитМК", "Луцене", "Кафка", "", "Спринг", "Боот"

Ако користимо обрнути индекс, имаћемо индексе попут:

Ово -> (2, 71)
Луцен -> (1, 9), (12,87)
Апачи -> (12, 91)
Оквир -> (32, 11)

Обрнути индекси су много једноставнији за одржавање. Претпоставимо да ако желимо да пронађемо Апацхе у мојим терминима, имат ћу непосредне одговоре с обрнутим индексима, док ће се код класичне претраге извршавати на комплетним документима које можда није било могуће покренути у сценаријима у стварном времену.

Ток рада луцена

Пре него што Луцене заиста може да претражује податке, потребно је да изврши кораке. Визуелизујмо ове кораке за боље разумевање:

Луцене Воркфлов

Као што је приказано на дијаграму, ево шта се дешава у Луцени:

  1. Луцене се храни документима и другим изворима података
  2. За сваки документ, Луцене прво претвара ове податке у обичан текст, а затим анализатори овај извор у обичан текст
  3. За сваки појам у обичном тексту креирају се обрнути индекси
  4. Индекси су спремни за претрагу

Уз овај ток посла, Луцене је врло снажан претраживач целокупног текста. Али ово је једини део који Луцене испуњава. Морамо сами да изведемо посао. Погледајмо компоненте индексирања које су потребне.

Луцене Цомпонентс

У овом одељку ћемо описати основне компоненте и основне класе луцена које се користе за креирање индекса:

Пример примене

Користићемо један од многих Мавенових архетипова да бисмо креирали пример пројекта за наш пример. Да бисте креирали пројекат, извршите следећу наредбу у директоријуму који ћете користити као радни простор:

мвн архетип: генериши -ДгроупИд = цом.линукхинт.пример -ДартифацтИд = ЛХ-ЛуценеЕкампле -ДарцхетипеАртифацтИд = мавен-арцхетипе-куицкстарт -ДинтерацтивеМоде = фалсе

Ако први пут покрећете мавен, требаће неколико секунди да се изврши команда за генерирање, јер мавен мора да преузме све потребне додатке и артефакте да би извршио задатак генерисања. Ево како изгледа резултат пројекта:

Постављање пројекта

Када креирате пројекат, слободно га отворите у свом омиљеном ИДЕ-у. Следећи корак је додавање одговарајућих Мавен зависности у пројекат. Ево пом.кмл датотеку са одговарајућим зависностима:



орг.апацхе.луцен
луцен-језгро
4.6.0


орг.апацхе.луцен
анализатори луцена-чести
4.6.0

Коначно, да бисмо разумели све ЈАР-ове који су додати пројекту када смо додали ову зависност, можемо покренути једноставну Мавен наредбу која нам омогућава да видимо цело дрво зависности за пројекат када му додамо неке зависности. Ево наредбе коју можемо користити:

мвн зависност: стабло

Када покренемо ову наредбу, приказаће нам следеће стабло зависности:

Коначно, креирамо класу СимплеИндекер која се изводи

пакет цом.линукхинт.пример;
импорт јава.ио.Филе;
импорт јава.ио.ФилеРеадер;
импорт јава.ио.ИОЕкцептион;
увоз орг.апацхе.луцен.анализа.Анализер;
увоз орг.апацхе.луцен.анализа.стандард.СтандардАнализер;
увоз орг.апацхе.луцен.документ.Документ;
увоз орг.апацхе.луцен.документ.СторедФиелд;
увоз орг.апацхе.луцен.документ.Текстуално поље;
увоз орг.апацхе.луцен.индекс.ИндекВритер;
увоз орг.апацхе.луцен.индекс.ИндекВритерЦонфиг;
увоз орг.апацхе.луцен.продавница.ФСДирецтори;
увоз орг.апацхе.луцен.утил.Верзија;
јавни разред СимплеИндекер
привате статиц финал Стринг индекДирецтори = "/ Корисници / схубхам / негде / ЛХ-ЛуценеЕкампле / Индек";
приватни статички завршни низ дирТоБеИндекед = "/ Усерс / схубхам / негде / ЛХ-ЛуценеЕкампле / срц / маин / јава / цом / линукхинт / екампле";
публиц статиц воид маин (Стринг [] аргс) баца изузетак
Филе индекДир = нова датотека (индекДирецтори);
Датотека датаДир = нова датотека (дирТоБеИндекед);
Индексер СимплеИндекер = нови СимплеИндекер ();
инт нумИндекед = индекс.индекс (индекДир, датаДир);
Систем.напоље.принтлн ("Укупно индексираних датотека" + нумИндексирано);

привате инт индек (Филе индекДир, Филе датаДир) баца ИОЕкцептион
Анализатор анализатора = нови СтандардАнализер (верзија.ЛУЦЕНЕ_46);
ИндекВритерЦонфиг цонфиг = нев ИндекВритерЦонфиг (Верзија.ЛУЦЕНЕ_46,
анализатор);
ИндекВритер индекВритер = нови ИндекВритер (ФСДирецтори.отворен (индекДир),
цонфиг);
Датотека [] датотеке = датаДир.листФилес ();
за (Датотека ф: датотеке)
Систем.напоље.принтлн ("Датотека за индексирање" + ф.гетЦаноницалПатх ());
Документ документа = нови документ ();
доц.додај (нови ТектФиелд („садржај“, нови ФилеРеадер (ф)));
доц.адд (нев СторедФиелд ("филеНаме", ф.гетЦаноницалПатх ()));
индекВритер.аддДоцумент (доц);

инт нумИндекед = индекВритер.макДоц ();
индекВритер.Близу();
ретурн нумИндекед;

У овом коду смо управо направили инстанцу документа и додали ново поље које представља садржај датотеке. Ево резултата који добијемо када покренемо ову датотеку:

Датотека за индексирање / Корисници / схубхам / негде / ЛХ-ЛуценеЕкампле / срц / маин / јава / цом / линукхинт / екампле / СимплеИндекер.јава
Укупно индексираних датотека 1

Такође, унутар пројекта креира се нови директоријум са следећим садржајем:

Подаци о индексу

Анализираћемо шта су све датотеке креиране у овом индексу у више лекција о Луцене-у.

Закључак

У овој лекцији смо погледали како функционише Апацхе Луцене и направили смо и једноставан пример апликације која се заснивала на Мавен-у и јави.

Средњи тастер миша не ради у оперативном систему Виндовс 10
Тхе средње дугме миша помаже вам да се крећете кроз дугачке веб странице и екране са пуно података. Ако се то заустави, на крају ћете користити тастат...
Како да промените леви и десни тастер миша на рачунару са Виндовс 10
Сасвим је нормално да су сви уређаји рачунарског миша ергономски дизајнирани за дешњаке. Али постоје доступни уређаји за миш који су посебно дизајнира...
Емулирајте кликове мишем лебдењем помоћу миша без клика у оперативном систему Виндовс 10
Коришћење миша или тастатуре у погрешном положају прекомерне употребе може резултирати многим здравственим проблемима, укључујући напрезање, синдром к...