Elasticsearch json rest api duen bilatzailea da, Lucene erabiltzen duena eta Javan idatzia. Motor honen abantaila guztien deskribapena hemen dago eskuragarri webgune ofiziala. Jarraian, Elasticsearch ES bezala aipatuko dugu.
Dokumentu datu-base batean bilaketa konplexuetarako antzeko motorrak erabiltzen dira. Adibidez, bilatu hizkuntzaren morfologia kontuan hartuta edo geokoordenatuen bidez bilatu.
Artikulu honetan ES-en oinarriei buruz hitz egingo dut blogeko argitalpenak indexatzeko adibidea erabiliz. Dokumentuak nola iragazi, ordenatu eta bilatzen erakutsiko dizut.
Sistema eragilearen menpe ez egoteko, eskaera guztiak ES-i egingo dizkiot CURL erabiliz. Google Chrome-rako plugin bat ere badago Zentzu.
Testuak dokumentaziorako eta beste iturri batzuetarako estekak ditu. Bukaeran dokumentazioa azkar sartzeko estekak daude. Termino ezezagunen definizioak hemen aurki daitezke glosarioak.
ES instalatzen
Horretarako, lehenik eta behin Java behar dugu. Garatzaileak gomendatu instalatu Java 8 eguneraketa 20 edo Java 7 eguneraketa 55 baino berriagoak diren Java bertsioak.
ES automatikoki sortu da aurkibidea bloga eta mota mezua. Baldintzazko analogia bat marraz dezakegu: indize bat datu-base bat da, eta mota bat datu-base honetako taula bat. Mota bakoitzak bere eskema du - mapping, mahai erlazional bat bezala. Mapeatzea automatikoki sortzen da dokumentua indexatzen denean:
# ΠΠΎΠ»ΡΡΠΈΠΌ mapping Π²ΡΠ΅Ρ ΡΠΈΠΏΠΎΠ² ΠΈΠ½Π΄Π΅ΠΊΡΠ° blog
curl -XGET "$ES_URL/blog/_mapping?pretty"
Zerbitzariaren erantzunean, indexatutako dokumentuaren eremuen balioak gehitu ditut iruzkinetan:
Aipatzekoa da ES-ek ez duela balio bakar bat eta balio-maiz bat bereizten. Adibidez, izenburu-eremuak izenburu bat besterik ez du dauka, eta etiketa-eremuak kate-matrize bat dauka, mapean modu berean irudikatzen diren arren.
Kartografiari buruz gehiago hitz egingo dugu gero.
Eskaerak
Dokumentu bat bere IDaren arabera berreskuratzen:
# ΠΈΠ·Π²Π»Π΅ΡΠ΅ΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Ρ id 1 ΡΠΈΠΏΠ° post ΠΈΠ· ΠΈΠ½Π΄Π΅ΠΊΡΠ° blog
curl -XGET "$ES_URL/blog/post/1?pretty"
Erantzunean gako berriak agertu dira: _version ΠΈ _source. Oro har, hasten diren gako guztiak _ ofizial gisa sailkatuta daude.
gakoa _version dokumentuaren bertsioa erakusten du. Beharrezkoa da blokeo-mekanismo baikorrak funtziona dezan. Adibidez, 1. bertsioa duen dokumentu bat aldatu nahi dugu. Aldatutako dokumentua bidaltzen dugu eta 1. bertsioa duen dokumentu baten edizioa dela adierazten dugu. Beste norbaitek 1. bertsioa duen dokumentu bat ere editatu badu eta gure aurretik aldaketak aurkeztu baditu, orduan ES ez ditu gure aldaketak onartuko, zeren dokumentua 2. bertsioarekin gordetzen du.
gakoa _source indexatu dugun dokumentua dauka. ES-k ez du balio hau erabiltzen bilaketa-eragiketetarako Bilatzeko indizeak erabiltzen dira. Espazioa aurrezteko, ES-ek iturburu-dokumentu konprimitu bat gordetzen du. Id-a soilik behar badugu, eta ez iturburu-dokumentu osoa, orduan iturburu-biltegia desgaitu dezakegu.
Informazio gehigarririk behar ez badugu, _source-ren edukia soilik lor dezakegu:
Azken mezua aukeratu dugu. size igorri beharreko dokumentu kopurua mugatzen du. total eskaerarekin bat datozen dokumentu kopuru osoa erakusten du. sort irteeran zenbaki osoen matrize bat dauka zeinen bidez ordenatzen den. Horiek. data zenbaki oso bihurtu zen. Sailkapenari buruzko informazio gehiago hemen aurki daiteke dokumentazioa.
Iragazkiak eta kontsultak
ES 2. bertsioak ez ditu iragazkiak eta kontsultak bereizten testuinguruen kontzeptua sartzen da.
Kontsulta-testuinguru bat iragazki-testuingurutik desberdina da, kontsultak _score bat sortzen duelako eta ez baita cachean gordetzen. Geroago erakutsiko dizut zer den _score.
Iragazi dataren arabera
Eskaera erabiltzen dugu sorta iragazkien testuinguruan:
Hala ere, edukien eremuan βipuinakβ bilatzen baditugu, ez dugu ezer aurkituko, zeren Aurkibideak jatorrizko hitzak baino ez ditu, ez haien zurtoinak. Kalitate handiko bilaketa bat egiteko, analizatzailea konfiguratu behar duzu.
Field _score ikuskizunak garrantzia. Eskaera iragazki-testuinguru batean exekutatzen bada, orduan _score balioa 1-aren berdina izango da beti, hau da, iragazkiarekin bat etortzea esan nahi du.
Analizatzaileak
Analizatzaileak sorburu-testua token multzo batean bihurtzeko behar dira.
Analizatzaileak batek osatzen dute Tokenizatzailea eta hainbat aukerakoak TokenFilters. Tokenizer aurretik hainbat izan daitezke CharFilters. Tokenizatzaileek iturburu-katea tokenetan zatitzen dute, hala nola, zuriuneak eta puntuazio-karaktereak. TokenFilter-ek tokenak alda ditzake, berriak ezabatu edo gehi ditzake, adibidez, hitzaren zurtoina bakarrik utzi, preposizioak kendu, sinonimoak gehitu. CharFilter - iturburu-kate osoa aldatzen du, adibidez, html etiketak mozten ditu.
Aprobetxa dezagun api eta ikus dezagun nola eraldatzen duten analizatzaile estandarrak eta errusiarrak "Katituei buruzko istorio dibertigarriak" katea:
Analizatzaile estandarrak katea espazioetan zatitu zuen eta dena minuskula bihurtu zuen, analizatzaile errusiarrak garrantzirik gabeko hitzak kendu, minuskula bihurtu eta hitzen ardatza utzi zuen.
Ikus dezagun zer Tokenizer, TokenFilters, CharFilters erabiltzen duen analizatzaile errusiarrak:
Deskriba dezagun errusieran oinarritutako gure analizatzailea, html etiketak moztuko dituena. Dei diezaiogun lehenetsia, zeren izen hori duen analizatzaile bat erabiliko da lehenespenez.
Lehenik eta behin, HTML etiketa guztiak iturburu-katetik kenduko dira, gero tokenizer estandarrak tokenetan banatuko du, sortzen diren tokenak minuskulara eramango dira, hitz hutsalak kenduko dira eta gainerako tokenak hitzaren mamia izaten jarraituko dute.
Indize bat sortzea
Goian analizatzaile lehenetsia deskribatu dugu. Kate-eremu guztietan aplikatuko da. Gure argitalpenak etiketa sorta bat dauka, beraz, etiketak ere analizatzaileak prozesatuko ditu. Zeren Etiketa batekin bat etortze zehatzaren araberako argitalpenak bilatzen ari gara, gero etiketen eremurako analisia desgaitu behar dugu.
Sortu dezagun indize blog2 analizatzaile eta maparekin, non etiketen eremuaren analisia desgaituta dagoen:
Zeren Errusiako jatorria duen analizatzaile bat erabiltzen ari gara, orduan eskaera honek dokumentu guztiak itzuliko ditu, nahiz eta "historia" hitza bakarrik eduki.
Eskaerak karaktere bereziak izan ditzake, adibidez:
""fried eggs" +(eggplant | potato) -frittata"
Eskaeraren sintaxia:
+ signifies AND operation
| signifies OR operation
- negates a single token
" wraps a number of tokens to signify a phrase for searching
* at the end of a term signifies a prefix query
( and ) signify precedence
~N after a word signifies edit distance (fuzziness)
~N after a phrase signifies slop amount
Antzeko artikulu-ikasgaietan interesatzen bazaizu, artikulu berrietarako ideiak badituzu edo lankidetzarako proposamenak badituzu, pozik jasoko dut mezu bat mezu pertsonal batean edo posta elektronikoz. [posta elektroniko bidez babestua].