SOLR är i grunden en Apache Tomcat-behållare som implementerar ett REST-gränssnitt för att fråga ett Apache Lucene-index. Ja, du måste kunna köra en Java-applikation på din webbserver. Detta är ett problem för dig att komma överens med din värdleverantör.
Klienter som använder din webbapp behöver inte köra Java. Din PHP-app kan göra en REST-fråga till SOLR-tjänsten och formatera resultaten i HTML. En klient ser bara HTML-utdata; den behöver aldrig veta att data kom från en tjänst implementerad i Java.
Zend_Search_Lucene
är en ren PHP-implementering som är tänkt att fungera identiskt med Apache Lucene. Zend-lösningen använder till och med ett identiskt indexfilformat. Så lagringsmässigt borde de vara lika.
Jag använde Java Lucene för att indexera StackOverflow-datadumpen (oktober 2009). Jag indexerade 1,5 miljoner rader, inklusive ungefär 1 gig textdata. Lucene-indexet var 1323 MB, medan MySQL FULLTEXT-indexet för samma data bara var 466 MB.
Använder SQL LIKE
Predikat i stället för någon fulltext indexeringslösning kräver naturligtvis inget utrymme, eftersom det inte kan använda ett konventionellt index ändå. Men i mina tester med LIKE
var cirka 200 gånger långsammare än Java Lucene, vilket i sin tur var cirka 40 % långsammare än ett MySQL FULLTEXT-index på samma data.
Se min senaste presentation om fulltextindexeringslösningar med MySQL:
http://www.slideshare.net/billkarwin /practical-full-text-search-with-my-sql
Det är inte förvånande att det inte kan matcha prestanda och skalbarhet hos Java Lucene-tekniken. PHPs fördel som språk är att öka utvecklingseffektiviteten, inte körtidseffektiviteten.
uppdatering: Jag försökte precis skapa ett index med Zend_Search_Lucene
. Att skapa ett index är mycket långsammare med PHP än med Java Lucene-tekniken, så jag indexerade bara 10 000 dokument. Detta tog nästan 15 minuter, vilket skulle göra att det skulle ta cirka 36 timmar att indexera hela samlingen. Jämför detta med Java Lucene, som i mitt test indexerade hela samlingen av 1,5 miljoner dokument på under 7 minuter.
Storleken på indexet som jag skapade med Zend_Search_Lucene
är 8,75 MB. Om jag extrapolerar dessa 150x, uppskattar jag att hela indexet skulle vara 1312,5 MB. Så jag drar slutsatsen att Zend_Search_Lucene
skapar ett index av ungefär samma storlek som det index som produceras av Java Lucene. Detta är som förväntat.