Etikettarkiv: datamining

Fritextsökningar i stora datamängder

Jag stötte på ett problem för några veckor sedan då jag försökte att indexera ~100 miljoner dokument (eller snarare textsträngar) för att göra dessa sökbara med godtycklig fritext (exempelvis: *blahonga*). Sphinx som brukar lösa alla mina problem spottade ur sig ett felmeddelande något i stil med:

(out of size_t; 4 GB limit on 32-bit machine hit?)

Vilket låter troligt eftersom det är en 32-bitars maskin. Efter lite sökningar så hittade jag att någon beskrev att Sphinx måste ladda in de filer som har filändelsen .SPI i RAM-minne och i mitt fall så rörde det sig om ca 35 GB vilket jag ej har i RAM-minne på någon av mina servrar.

Men efter lite mer Googlande så hittade jag den relativt nya konfigurationsparametern ondisk_dict som betyder att dessa filer inte behöver laddas in i minnet så jag testade att starta searchd igen men fick samma felmeddelande.

Till sist så testade jag även att dela upp den databas från MySQL som jag indexerade i tre olika Sphinx-index och då fungerade det galant och fritextsökningar i mina 100 miljoner dokument går nu på under en sekund. Taaada!

Så här beskrivs ondisk_dict i manualen:

Whether to keep the dictionary file (.spi) for this index on disk, or precache it in RAM. Optional, default is 0 (precache in RAM). Introduced in version 0.9.9-rc1.

The dictionary (.spi) can be either kept on RAM or on disk. The default is to fully cache it in RAM. That improves performance, but might cause too much RAM pressure, especially if prefixes or infixes were used. Enabling ondisk_dict results in 1 additional disk IO per keyword per query, but reduces memory footprint.

This directive does not affect indexer in any way, it only affects searchd.

Vad har jag på gång?

Jo det händer en hel del nu och mina idéer på nya projekt bara sprudlar. Men med rätt motivation och fokusering så försöker jag iallfall slutföra de projekt som jag startat:

  • Två sökmotorer med speciell inriktning där en av dem är helt unik i sverige och eventuellt i världen på den information som presenteras
    • Den sistnämnda kommer att ha premiär inom två veckor om jag hinner fixa några buggar
  • En unik sökmotor för webben med lite speciella saker som Google inte fixar. Ta patent?
  • Starta ett företag som stöttar dessa projekt med sådant som jag inte fixar som privatperson
  • Köpt ett antal trevliga domäner

Ja listan kan göras lång.

Sitter och funderar också på hur jag kan tjäna pengar på några av dessa projekt samt hur mina stackars servrar skall klara av all information jag avser att trycka in i dem. Men det är ju en utmaning också och sådant gillar jag.