SOLR je v podstatě kontejner Apache Tomcat, který implementuje rozhraní REST pro dotazování na index Apache Lucene. Ano, musíte být schopni spustit Java aplikaci na vašem webovém serveru. Tento problém musíte vyřešit se svým poskytovatelem hostingu.
Klienti používající vaši webovou aplikaci nemusí spouštět Javu. Vaše aplikace PHP by mohla vytvořit dotaz REST na službu SOLR a formátovat výsledky v HTML. Klient vidí pouze výstup HTML; nikdy nemusí vědět, že data pocházejí ze služby implementované v Javě.
Zend_Search_Lucene
je implementace čistého PHP, která má fungovat identicky jako Apache Lucene. Řešení Zend dokonce používá identický formát indexového souboru. Z hlediska úložiště by tedy měly být stejné.
Použil jsem Java Lucene k indexování výpisu dat StackOverflow (říjen 2009). Indexoval jsem 1,5 milionu řádků, včetně asi 1 giga textových dat. Index Lucene byl 1323 MB, zatímco index MySQL FULLTEXT stejných dat měl pouze 466 MB.
Pomocí SQL LIKE
predikáty namísto jakéhokoli řešení fulltextové indexace samozřejmě nevyžadují žádný prostor, protože stejně nemohou využívat konvenční index. Ale v mých testech pomocí LIKE
byl asi 200krát pomalejší než Java Lucene, což bylo zase asi o 40 % pomalejší než index MySQL FULLTEXT na stejných datech.
Podívejte se na mou nedávnou prezentaci o řešeních fulltextového indexování s MySQL:
http://www.slideshare.net/billkarwin /praktické-fulltext-search-with-my-sql
Není divu, že se výkonem a škálovatelností nemůže rovnat technologii Java Lucene. Výhodou PHP jako jazyka je zvýšení efektivity vývoje, nikoli efektivity běhu.
aktualizace: Právě jsem zkusil vytvořit index pomocí Zend_Search_Lucene
. Vytváření indexu je s PHP mnohem pomalejší než s technologií Java Lucene, takže jsem indexoval pouze 10 000 dokumentů. To trvalo téměř 15 minut, což by indexování celé kolekce trvalo asi 36 hodin. Porovnejte to s Java Lucene, která v mém testu indexovala celou kolekci 1,5 milionu dokumentů za méně než 7 minut.
Velikost indexu, který jsem vytvořil pomocí Zend_Search_Lucene
je 8,75 MB. Při extrapolaci těchto 150x odhaduji, že úplný index by byl 1312,5 MB. Takže jsem dospěl k závěru, že Zend_Search_Lucene
vytvoří index přibližně stejné velikosti jako index vytvořený Java Lucene. To je podle očekávání.