SOLR er dybest set en Apache Tomcat-beholder, der implementerer en REST-grænseflade til at forespørge på et Apache Lucene-indeks. Ja, du skal kunne køre en Java-applikation på din webserver. Dette er et problem for dig at finde ud af med din hostingudbyder.
Klienter, der bruger din webapp, behøver ikke at køre Java. Din PHP-app kunne lave en REST-forespørgsel til SOLR-tjenesten og formatere resultaterne i HTML. En klient ser kun HTML-outputtet; det behøver aldrig at vide, at dataene kom fra en tjeneste implementeret i Java.
Zend_Search_Lucene
er en ren PHP-implementering, der formodes at fungere identisk med Apache Lucene. Zend-løsningen bruger endda et identisk indeksfilformat. Så opbevaringsmæssigt burde de være ens.
Jeg brugte Java Lucene til at indeksere StackOverflow-datadumpet (oktober 2009). Jeg indekserede 1,5 millioner rækker, inklusive omkring 1 gig tekstdata. Lucene-indekset var 1323 MB, hvorimod MySQL FULLTEXT-indekset for de samme data kun var 466 MB.
Bruger SQL LIKE
prædikater i stedet for enhver fuldtekst-indekseringsløsning kræver selvfølgelig ingen plads, fordi den alligevel ikke kan gøre brug af et konventionelt indeks. Men i mine tests med LIKE
var omkring 200 gange langsommere end Java Lucene, som igen var omkring 40 % langsommere end et MySQL FULLTEXT-indeks på de samme data.
Se min seneste præsentation om fuldtekstindekseringsløsninger med MySQL:
http://www.slideshare.net/billkarwin /practical-full-text-search-with-my-sql
Det er ikke overraskende, at det ikke kan matche ydeevnen og skalerbarheden af Java Lucene-teknologien. PHP's fordel som sprog er at øge udviklingseffektiviteten, ikke køretidseffektiviteten.
opdatering: Jeg har lige prøvet at oprette et indeks ved hjælp af Zend_Search_Lucene
. Oprettelse af et indeks er langt langsommere med PHP end med Java Lucene-teknologien, så jeg indekserede kun 10.000 dokumenter. Dette tog næsten 15 minutter, hvilket ville tage omkring 36 timer at indeksere hele samlingen. Sammenlign dette med Java Lucene, som i min test indekserede hele samlingen af 1,5 millioner dokumenter på under 7 minutter.
Størrelsen på det indeks, jeg oprettede med Zend_Search_Lucene
er 8,75 MB. Hvis jeg ekstrapolerer disse 150x, anslår jeg, at det fulde indeks ville være 1312,5 MB. Så jeg konkluderer, at Zend_Search_Lucene
opretter et indeks af omtrent samme størrelse som indekset produceret af Java Lucene. Dette er som forventet.