SOLR is in feite een Apache Tomcat-container die een REST-interface implementeert om een Apache Lucene-index op te vragen. Ja, u moet een Java-toepassing op uw webserver kunnen draaien. Dit is een kwestie die je samen met je hostingprovider moet oplossen.
Clients die uw web-app gebruiken, hoeven geen Java uit te voeren. Uw PHP-app kan een REST-query maken naar de SOLR-service en de resultaten opmaken in HTML. Een client ziet alleen de HTML-uitvoer; het hoeft nooit te weten dat de gegevens afkomstig zijn van een service die in Java is geïmplementeerd.
Zend_Search_Lucene
is een pure PHP-implementatie die verondersteld wordt identiek te werken als Apache Lucene. De Zend-oplossing gebruikt zelfs een identiek indexbestandsformaat. Dus qua opslag zouden ze gelijk moeten zijn.
Ik heb Java Lucene gebruikt om de StackOverflow-gegevensdump te indexeren (oktober 2009). Ik heb 1,5 miljoen rijen geïndexeerd, inclusief ongeveer 1 gig aan tekstgegevens. De Lucene-index was 1323 MB, terwijl de MySQL FULLTEXT-index van dezelfde gegevens slechts 466 MB was.
SQL gebruiken LIKE
predikaten in plaats van een fulltext indexeringsoplossing vereisen natuurlijk geen ruimte, omdat het toch geen gebruik kan maken van een conventionele index. Maar in mijn tests met LIKE
was ongeveer 200 keer langzamer dan Java Lucene, dat op zijn beurt ongeveer 40% langzamer was dan een MySQL FULLTEXT-index op dezelfde gegevens.
Zie mijn recente presentatie over fulltext indexeringsoplossingen met MySQL:
http://www.slideshare.net/billkarwin /practical-full-text-search-with-my-sql
Het is niet verwonderlijk dat het de prestaties en schaalbaarheid van de Java Lucene-technologie niet kan evenaren. Het voordeel van PHP als taal is het verhogen van de ontwikkelingsefficiëntie, niet de runtime-efficiëntie.
update: Ik heb zojuist geprobeerd een index te maken met Zend_Search_Lucene
. Het maken van een index gaat veel langzamer met PHP dan met de Java Lucene-technologie, dus ik heb maar 10.000 documenten geïndexeerd. Dit duurde bijna 15 minuten, waardoor het ongeveer 36 uur zou duren om de hele collectie te indexeren. Vergelijk dit met Java Lucene, dat in mijn test de volledige verzameling van 1,5 miljoen documenten in minder dan 7 minuten indexeerde.
De grootte van de index die ik heb gemaakt met Zend_Search_Lucene
is 8,75 MB. Als ik deze 150x extrapoleer, schat ik dat de volledige index 1312,5 MB zou zijn. Dus ik concludeer dat Zend_Search_Lucene
creëert een index van ongeveer dezelfde grootte als de index geproduceerd door Java Lucene. Dit is zoals verwacht.