Přejít k navigační liště

Zdroják » Databáze » Fulltext vyhľadávanie v CouchDB, pokročilé hľadanie.

Fulltext vyhľadávanie v CouchDB, pokročilé hľadanie.

Články Databáze

V minulej časti sme sa naučili, ako pomocou Lucene rýchlo a jednoducho vyhľadávať v CouchDB. Dnes sa pozrieme okrem iného na to, ako sa vysporiadať s použitím diakritiky pri vyhľadávaní v našej databáze.

Diakritika

Pri revidovaní prvého článku o vyhľadávaní v CouchDB ma editor M.Malý upozornil na skutočnosť, na ktorú mnohí vývojári veľmi radi zabúdajú. Citujem:

“Diakritika! Nelze psát bez diakritiky. Nejsme geekovský hackazin z roku 1994, takhle by mi to korektorka hodila na hlavu, nehledě na to, že v slovenštině nejsem tak dobrý, abych dokázal říct, kde budou mäkčene a dĺžne. :)”

S týmto názorom sa samozrejme plne stotožňujem. Publikovať akékoľvek texty bez použitia diakritiky je možné v súčasnosti prirovnať k spáchaniu ťažkého trestného činu (nadsazujem).

Dnes začneme presne tam, kde sme v minulej časti skončili. Namiesto latinského textu (lorem ipsum) ale použijeme v našej databáze text s diakritikou.

Možnosť č. 1 – Lucene Analyzér

Lucene nám dáva možnosť všetky záznamy, ktoré vkladáme do indexu, zároveň analyzovať a upravovať. Existuje veľké množstvo, či už vstavaných, ale aj analyzérov tretích strán, ktoré poskytujú užívateľovi množstvo zaujímavých funkcií. Základný vstavaný analyzér napríklad dokáže vložený text previesť na malé písmená a odstráni všetky anglické spojky a predložky („the“, „and“, …). Existuje analyzér určený pre texty v češtine a slovenčine. V rámci textu korektne vyhľadáva aj pri použití diakritiky, správne rozlišuje malé/veľké písmená, no podobne ako anglická verzia má problémy so skloňovaním.

Príklad:

"fulltext": {
      "showName": {
          "index": "function(doc)
             {
                result = new Document();
                result.add(doc.title, {'field':'title', 'store':'yes','analyzer':'czech'});
                return result;
             }"
          }
      }
}

Ďaľší problém sa objaví až pri multijazyčných projektoch. Pri vytváraní view s použitím analyzéru na odstránenie diakritiky by sme preto mali najprv zistiť jazykovú mutáciu prichádzajúceho textu a na základe toho zvoliť korektný analyzér.

Možnosť č. 2 – Odstránenie diakritiky pomocou JS

Alternatívou k Lucene analyzéru je odstrániť diakritiku priamo pri zadávaní textu do indexu. Môže sa zdať, že táto metóda nie je vhodná, ak si uvedomíme, že Lucene nám poskytuje nástroj, ktorý je na to presne určený. No tento spôsob je možné použiť aj inde. Napríklad pri automatickom generovaní url z názvu článku.

Príklad: (javascriptová funkcia na odstránenie diakritiky, stačí ju použiť pri vytváraní view)

var defaultDiacriticsRemovalMap = [
   {'base':'A', 'letters':/[u0041u24B6uFF21u00C0u00C1u00C2u1EA6u1EA4u1EAAu1EA8u00C3u0100u0102u1EB0u1EAEu1EB4u1EB2u0226u01E0u00C4u01DEu1EA2u00C5u01FAu01CDu0200u0202u1EA0u1EACu1EB6u1E00u0104u023Au2C6F]/g},
   {'base':'AA','letters':/[uA732]/g},
  //ďaľšie znaky, celý script nájdete na http://stackoverflow.com/questions/3939266/javascript-function-to-remove-diacritics
];
var changes;
function removeDiacritics (str) {
   if(!changes) {
       changes = defaultDiacriticsRemovalMap;
   }
   for(var i=0; i<changes.length; i++) {
       str = str.replace(changes[i].letters, changes[i].base);
   }
   return str;
}

Samozrejme je nutné na hľadanom reťazci odstrániť diakritiku manuálne na strane aplikácie.

Vyhľadávanie v prílohách

CouchDB umožňuje ku každému dokumentu priložiť rôzne druhy súborov (obrázok, mp3, pdf a iné) ako prílohu. Tieto súbory častokrát obsahujú rôzne metadáta. Pri mp3 sú to napríklad autor, názov skladby či jej poradie v rámci celého cd. Aby sme mohli rozšíriť naše vyhľadávanie aj o tieto dáta, použijeme pre Lucene vytvorenú nadstavbu Apache Tika, ktorá je určená na prácu s metadátami súborov uložených v CouchDB. Pre správne fungovanie tejto nadstavby je nutné korektne nastaviť content-type vkladaných súborov.

Apache Tika

Apache Tika je toolkit určený na prehľadávanie obsahu, metadát a analýzu dokumentov. Vývoj tohto toolkitu sa začal v roku 2007 a v roku 2008 sa stal subprojektom Apache Lucene. V súčasnosti má podporu pre viac ako 1.200 formátov, z ktorých dokáže extrahovať metadáta a štrukturovaný text a v spolupráci s Lucene ich ukladať ako vlastný index. Vďaka tomu je možné vyhľadávanie priamo v dokumentoch uložených ako _attachement v CouchDB.

Správa indexov

Pre správne a optimálne fungovanie Lucene je potrebné spravovať a optimalizovať indexy, ktoré používa.

Informáciu o indexe, z ktorého môžeme zistiť napríklad poslednú aktualizáciu indexu alebo počet indexovaných dokumentov, získame po zaslaní GET požiadavky

http://localhost:5984/<db>/_fti/_design/foo/<index>

Aby sme dosiahli vyššiu rýchlosť vyhľadania môžeme použiť optimalizáciu indexu, ktorá zabezpečí, že sa celý index prepíše do jedného segmentu. Či je potrebné index optimalizovať nám poskytne informácia o indexe – položka typu boolean „optimized“:tru­e/false.

POST http://localhost:5984/<db>/_fti/_design/foo/<index>/_optimize

Pri zmenách indexovacej funkcie sa nám môže stať, že na disku ostanú uložené staré indexy, ktoré nám zbytočne zaberajú miesto. Odstránenie týchto indexov dosiahneme zaslaním POST požiadavky

POST http://localhost:5984/<db>/_fti/_cleanup

Záver

V seriálu sme si ukázali, ako vyhľadávať nad dokumentovo orientovanou databázou CouchDB pomocou nástroja Lucene a predstavili sme si jeho doplnok na vyhľadávanie v prílohách Tika. Stačí už len vyjsť zo zabehnutej rutiny a skúsiť niečo nové.

Komentáře

Odebírat
Upozornit na
guest
0 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
Zobrazit všechny komentáře

Přístupnost není jen o splnění norem: nový pohled na inkluzivní design

Přístupnost a inkluze možná nepatří mezi nejžhavější témata digitálního světa – dokud o nich nezačne mluvit Vitaly Friedman. Na WebExpo 2024 předvedl, že inkluzivní design není jen o splněných checkboxech, ale hlavně o lidech. S energií sobě vlastní obrátil zažité přístupy naruby a ukázal, že skutečně přístupný web je nejen možný, ale i nezbytný.

Efektivnější vývoj UI nebo API: Co si odnést z WebExpo 2025?

Různé
Komentáře: 0
Jak snadno implementovat moderní uživatelské rozhraní? Které funkce brzdí rychlost vašeho webu? A kdy raději sami přibrzdit, abychom využitím AI nepřekročili etické principy? Debatu aktuálních dev témat rozdmýchá sedmnáctý ročník technologické konference WebExpo, která proběhne v Praze od 28. do 30. května. Který talk či workshop si rozhodně nenechat ujít? Toto je náš redakční výběr z vývojářských hroznů.

Zapřáhněte AI jako nikdy předtím. Květnová konference WebExpo přivítá hvězdy technologického světa

Od 28. do 30. května 2025 promění pražský Palác Lucerna na tři dny technologická konference WebExpo. Na programu je více než 80 přednášek a workshopů od expertů z celého světa. WebExpo tradičně propojuje vývojáře, designéry, marketéry i byznysové lídry a nabízí praktické dovednosti, strategické myšlení a přináší nejnovější trendy nejen v oblasti AI.