GNU/Linux >> Znalost Linux >  >> Linux

Jak urychlit vyhledávání ve velké sbírce textových souborů (1 TB)

Odpovědí už je spousta, jen jsem chtěl přidat své dva centy:

  1. Mít tak obrovská data (1 TB) s pouhými 8 GB paměti nebude dost dobré pro žádný přístup, ať už pomocí Lucene nebo Elasticsearch (interně používá Lucene) nebo nějakého příkazu grep, pokud chcete rychlejší vyhledávání, Důvod je velmi jednoduchý, všechny tyto systémy uchovávají data v nejrychlejší paměti, aby mohly obsluhovat rychleji a z 8 GB (25 % byste měli vyhradit pro OS a dalších 25-50 % alespoň pro jiné aplikace) vám zbyde velmi málo GB paměti RAM.
  2. Upgrade SSD, zvýšení RAM ve vašem systému pomůže, ale je to docela těžkopádné a pokud opět narazíte na problémy s výkonem, bude obtížné provést vertikální škálování vašeho systému.

Návrh

  1. Vím, že jste se již zmínili o tom, že to chcete udělat ve svém systému, ale jak jsem řekl, nepřineslo by to žádný skutečný užitek a mohli byste nakonec ztratit tolik času (infra a kódově (tolik přístupů, jak bylo zmíněno v různých odpovědích)), proto bych navrhoval, abyste pro určení správné kapacity provedli přístup shora dolů, jak je uvedeno v mé další odpovědi. Pomohlo by vám to rychle identifikovat správnou kapacitu jakéhokoli přístupu, který zvolíte.
  2. Co se týče implementace, doporučil bych to udělat s Elasticsearch(ES), protože je velmi snadné nastavit a škálovat, můžete dokonce použít AWS Elasticsearch, který je k dispozici také ve volné vrstvě a později v rychlém měřítku, i když Nejsem velkým fanouškem AWS ES, ušetří to spoustu času na nastavování a můžete rychle začít, pokud ES hodně znáte.

  3. Aby bylo vyhledávání rychlejší, můžete soubor rozdělit do více polí (název, tělo, značky, autor atd.) a indexovat pouze důležité pole, což by snížilo velikost obráceného indexu a pokud hledáte pouze přesnou shodu řetězce ( žádné částečné nebo fulltextové vyhledávání), pak můžete jednoduše použít keyword pole, které je indexování a vyhledávání ještě rychlejší.

  4. Mohu pokračovat o tom, proč je Elasticsearch dobrý a jak jej optimalizovat, ale to není podstata a sečteno a podtrženo je, že každé vyhledávání bude potřebovat značné množství paměti, CPU a disku a jakékoli z nich se stane úzkým hrdlem by bránilo vašemu místnímu systémovému vyhledávání a dalším aplikacím, a proto vám doporučujeme, abyste to opravdu zvážili na externím systému a Elasticsearch skutečně vyniká jako prostředek pro distribuovaný systém a dnes nejoblíbenější open-source vyhledávací systém.

Zjevně potřebujete rejstřík, jak naznačovala téměř každá odpověď. Svůj hardware byste mohli zcela vylepšit, ale protože jste řekli, že je to opraveno, nebudu to rozvádět.

Mám pro vás několik relevantních tipů:

  1. Indexujte pouze pole, ve kterých chcete najít hledaný výraz, nikoli indexujte celou datovou sadu;
  2. Vytvořte víceúrovňový index (tj. index přes index), aby bylo vyhledávání v indexu rychlejší. To bude zvláště důležité, pokud váš index naroste na více než 8 GB;
  3. Chtěl jsem jako alternativu doporučit ukládání vašich vyhledávání do mezipaměti, ale to způsobí, že nové vyhledávání bude opět trvat půl dne. Předzpracování dat za účelem vytvoření indexu je tedy jednoznačně lepší než zpracování dat při příchodu dotazu.

Drobná aktualizace:

Mnoho odpovědí zde navrhuje umístit data do cloudu. Vřele doporučuji, a to i v případě anonymizovaných lékařských dat, abyste potvrdili u zdroje (pokud jste data neseškrábali z webu), že je to v pořádku.


Chcete-li urychlit vyhledávání, potřebujete obrácený index. Aby bylo možné přidávat nové dokumenty bez nutnosti přeindexování všech existujících souborů, měl by být index přírůstkový.

Jedním z prvních open source projektů, které zavedly inkrementální indexování, je Apache Lucense. Stále je nejpoužívanějším indexovacím a vyhledávacím nástrojem, ačkoliv dnes jsou populárnější jiné nástroje, které rozšiřují jeho funkčnost. Elasiticsearch a Solr jsou oba založeny na Lucense. Ale dokud nepotřebujete webové rozhraní, podporu pro analytické dotazování, filtrování, seskupování, podporu indexování netextových souborů nebo infrastrukturu pro nastavení clusteru na více hostitelích, Lucene je stále tou nejlepší volbou.

Apache Lucense je knihovna Java, ale dodává se s plně funkční ukázkovou aplikací založenou na příkazovém řádku. Tato základní ukázka by již měla poskytovat všechny funkce, které potřebujete.

S určitými znalostmi Javy by také bylo snadné přizpůsobit aplikaci vašim potřebám. Budete překvapeni, jak jednoduchý je zdrojový kód demo aplikace. Pokud by Java neměla být jazykem vaší volby, alternativou může být také její obal pro Pyhton, PyLucene. Indexování demo aplikace je již nyní omezeno téměř na minimum. Ve výchozím nastavení se nepoužívá žádná pokročilá funkce, jako je stemming nebo optimalizace pro složité dotazy – funkce, které s největší pravděpodobností nebudete pro svůj případ použití potřebovat, ale které by zvýšily velikost indexu a dobu indexování.


Linux
  1. Jak spojit dva textové soubory v Linuxu

  2. Jak zkontrolovat velké soubory v konzole

  3. Jak najít soubory na Ubuntu?

  1. Jak používat příkaz Grep k vyhledání textu v souborech

  2. Jak zrychlit vyhledávání v Dash?

  3. Rychlé textové vyhledávání ve více než 600 000 souborech

  1. Jak hledat a najít slovo v textovém editoru Vim nebo Vi

  2. Jak najít soubory v Linuxu pomocí příkazu Najít

  3. Jak porovnávat a slučovat textové soubory na Linuxu