Tű a szénakazalban

Csak álom-e egy saját kereső?

Ma egy gondolatkísérletre invitálom meg a kedves olvasókat: mi lenne, ha mindenkinek saját, személyre szabott (akár lokális) keresője lenne, ahelyett, hogy központi szolgáltatókat (DuckDuckGo, Google, Bing és a többiek) kellene használni?

Nyilván adatvédelmi szempontból hatalmas előrelépés, ha nem óriásvállalatok gyűjtenek a világon mindenkiről ki tudja milyen adatokat, amikkel aztán ki tudja mit kezdenek, de vajon technológiailag megoldható?

A kereső

Mielőtt belemerülnénk a részletekbe, nagy vonalakban nézzük meg, hogy nagyjából hogyan is épülhet fel egy kereső.

Letöltés

Vannak crawler-nek nevezett programok, amik meglátogatnak egy oldalt, lementik a HTML forrását, kigyűjtik belőle a linkeket, azokat az oldalakat is meglátogatják, kigyűjtik belőlük a linkeket és így tovább. A jól viselkedő crawler-ek betartják a robots.txt-ben leírtakat, munkájukat pedig segítheti a sitemap.xml.

Feldolgozás

A rengeteg HTML forrásból ki kell nyerni a hasznos adatokat, esetleg valamiféle kontextussal együtt, hogy hol lett megtalálva a szöveg (például az oldal főcíme vagy lábléc szöveg), ami később felhasználható súlyozásra. További metaadatok nyerhetőek ki, ha a weboldal használja az Open Graph, Microformats vagy Schema.org protokollokat.

Tárolás

Itt több változat is lehetséges, attól függően, hogy mennyi adatot vagyunk hajlandóak tárolni. Amit mindenképpen tárolnunk kell, az egy index, ami megmondja, hogy egy szó vagy egy kifejezés melyik oldalon található meg. Ha a találati oldalon meg akarjuk jeleníteni a találat szövegkörnyezetét is, akkor tárolnunk kell a feldolgozás által kinyert adatokat is. Ha lokálisan szeretnénk megmutatni a weboldalt, amiből a találat keletkezett, akkor a teljes HTML oldalra is szükségünk lesz.

Keresés

Egy (web)alkalmazás, ami a felhasználó által megadott keresőkifejezést adatbázis lekérdezéssé alakítja és megjeleníti a találatokat.

Töltsük le az Internetet

Az első problémánk tehát a crawler. Az Internet szerint nagyjából 400 millió aktív weboldal lehet manapság. Ha mindegyiknek csak 10 oldala van (valószínűleg erős alábecslés), akkor is már 4 milliárd meglátogatandó oldalról beszélünk. Ha minden oldalt 100ms alatt le tudunk tölteni és ki tudjuk nyerni belőle a linkeket (szintén erősen optimista becslés), akkor egy crawler-nek több, mint 12 évébe tartana meglátogatni mindent. Mondjuk ezer párhuzamos crawler már 4-5 nap alatt végezhetne... biztos izgalmas lenne, ha több milliárd ember elkezdene fejenként ezer crawler-t ráküldeni az Internetre, hogy megépítse a saját indexét.

És akkor ez még egy nagyon optimista becslés volt. Hogy mennyire? Gondoljunk csak bele, hogy a k...edves fejlesztők előszeretettel építenek manapság olyan oldalakat, amik (több megabájtnyi) JavaScript letöltése és futtatása nélkül használhatatlanok. Szóval lehet, hogy egy headless böngésző kellene a végleges HTML kinyeréséhez, ami aztán biztos nem fog végezni 100ms alatt. Ez legalább egy (de lehet, hogy inkább két) nagyságrenddel lassabb lenne.

Ekkora adat mennyiségnél a feldolgozás is valószínűleg túl sok idő és erőforrás lenne. Még akkor is, ha mindenhol kézműves gondossággal összerakott, minimalista szerkezetű, szintaktikailag és szemantikailag is helyes HTML oldalak lennének... de nyilván ez nem így van a valóságban. Aztán ott vannak még a SEO ügyeskedések is, mint például a felhasználók számára nem látszódó, de a crawler számára jelen lévő szövegek és hasonló trükkök, amiket jó lenne kiszűrni.

Hasonló problémába ütközünk a tárolás területén is. A Google indexe a saját állítása szerint több, mint 100 000 000 gigabyte méretű. Még ha ennek a nagy részét képek és videók teszik ki, ez azért nem egy olyan nagyságrend, ami kényelmesen elférne egy asztali számítógépen. Szóval úgy tűnik, hogy a négy részből hárommal is (letöltés, feldolgozás, tárolás) gondok vannak. Nem túl jó arány.

Alternatív megoldások

A rengeteg crawler okozta túlterhelést meg lehetne úgy oldani, hogy a crawler-ek beszélgethetnének egymás között is, hogy ki hol járt már és mehetne köztük is a csere-bere, bár így hirtelen nem tudom, hogy hogyan lehetne ezt biztonságosan megoldani, hogy egy zsivány crawler ne tudjon megmérgezni hamis információkkal másokat. Az adatmennyiségen viszont ez sem segít.

De tényleg szükségünk van az egész Internetre? Jó eséllyel csak egy-két nyelv érdekel minket a saját anyanyelvünkön kívül és abból sem a teljes felhozatal. Ha valahogy meg lehetne mondani, hogy az Internet melyik egy százaléka érdekel minket, akkor azzal talán működőképes lenne a saját kereső. Beadhatnánk a személyes keresőnknek oldalakat, amiket fontosnak tartunk, aztán a rajtuk található külső hivatkozásokon is végigmehetne, és így tovább. A végén lenne egy nem annyira nagy HTML halmazunk, ami jó eséllyel még elfér a gépünkön.

Végeredményben viszont nem tűnik gazdaságosnak (vagy akár lehetségesnek), hogy mindenki saját crawler-eket futtasson és saját indexet gyártson. Ez viszont még nem feltétlenül jelenti azt, hogy ne lehetne mindenkinek saját példánya az indexből. Lehetne mondjuk valami nyílt index formátum vagy adatbázis szerkezet és bárki publikálhatna saját indexeket.

A lehetőségek száma végtelen, de nézzünk meg pár ötletet kedvcsinálónak:

  • tematikus indexek, például index programozóknak, dokumentációkkal, StackOverflow-val és egyebekkel
  • nagy oldalak publikálnak saját indexet a tartalmaikról (nem kell hozzájuk crawler, cserébe megbízol bennük, hogy az van az index-ben, ami az oldalon is)
  • lokáció alapú indexek, ha szeretnéd megtalálni a szombathelyi fagyizókat
  • cégek, akik fizetős indexeket gyártanak
  • könyvtárak, állami szervezetek, akik a saját nyelvük tartalmaiból csinálnának indexeket
  • nonprofit szervezetek indexei, mint mondjuk az archive.org, aminek már egyébként is vannak ilyen adatai
  • gyakran frissülő hír jellegű indexek
  • ritkán frissülő enciklopédia jellegű indexek
  • a szomszéd Józsi indexe, amit a kedvenc weboldalaiból készített

A felhasználó pedig betöltheti a személyes keresőjébe a választott indexeket, törölhet belőle olyan részeket, amik számára nem relevánsak, hogy helyet spóroljon, vagy jobb találatokat kapjon. A keresésnél pedig ki lehetne választani, hogy melyik indexekben keressen.

Innentől az index szolgáltató megválasztása határozza meg a találatok minőségét, de gondolom idővel ez kialakulna, hogy mik azok az indexek, amiket érdemes használni, hogyan érdemes őket testre szabni, vagy ha valamelyik index minősége romlik, nem elég friss, akkor lehet új szolgáltatókat keresni. A kicsit hozzáértőbbeknek pedig továbbra is megvan a lehetőségük, hogy saját crawler-t indítsanak és saját indexet építsenek (amit aztán eladhatnak másoknak is).

Magáról a keresésről nem sok szót ejtettünk, de az a rész elég egyértelműnek tűnik. Mivel az index nyílt formátumú, bárki készíthetne rá szoftvereket. Valószínűleg készülne pár remek nyílt forráskódú alternatíva, akár asztali alkalmazásként, akár saját szerverre telepíthető webalkalmazásként. Aztán plugin-ek ezekhez az alkalmazásokhoz, amik számológéppel, valutaváltóval, keresési előzményekkel és ki tudja még mennyi mindennel egészíthetnék ki az alap funkcionalitást.

Összegzés

Lenne még itt-ott néhány apróbb ötletem, de nem akartam túl sokat csapongani. Térjünk inkább vissza az eredeti kérdésünkhöz. Csak álom-e egy saját kereső? Ha az egész Interneten szeretnél keresni: igen. A boldogsághoz (vagy egy jól működő keresőhöz) viszont nem biztos, hogy az egész Internetre szükség van. Megfelelő index szolgáltatókkal és a végfelhasználó számára is elfogadható index méretekkel azt hiszem működhetne a dolog.

This post is also available in english: Needle in the Haystack

Hozzáfűznél valamit?

Dobj egy emailt a blog kukac deadlime pont hu címre.

Feliratkoznál?

Az RSS feed-et ajánljuk, ha kedveled a régi jó dolgokat.