SOLR è fondamentalmente un container Apache Tomcat che implementa un'interfaccia REST per interrogare un indice Apache Lucene. Sì, devi essere in grado di eseguire un'applicazione Java sul tuo server web. Questo è un problema che devi risolvere con il tuo provider di hosting.
I client che utilizzano la tua app Web non devono eseguire Java. La tua app PHP potrebbe eseguire una query REST al servizio SOLR e formattare i risultati in HTML. Un client vede solo l'output HTML; non ha mai bisogno di sapere che i dati provenivano da un servizio implementato in Java.
Zend_Search_Lucene
è un'implementazione PHP pura che dovrebbe funzionare in modo identico ad Apache Lucene. La soluzione Zend utilizza anche un formato di file di indice identico. Quindi in termini di archiviazione dovrebbero essere uguali.
Ho usato Java Lucene per indicizzare il dump dei dati StackOverflow (ottobre 2009). Ho indicizzato 1,5 milioni di righe, incluso circa 1 giga di dati di testo. L'indice Lucene era di 1323 MB, mentre l'indice MySQL FULLTEXT degli stessi dati era di soli 466 MB.
Utilizzando SQL LIKE
predicati al posto di qualsiasi soluzione di indicizzazione fulltext ovviamente non richiede spazio, perché non può comunque utilizzare un indice convenzionale. Ma nei miei test usando LIKE
era circa 200 volte più lento di Java Lucene, che a sua volta era circa il 40% più lento di un indice MySQL FULLTEXT sugli stessi dati.
Guarda la mia recente presentazione sulle soluzioni di indicizzazione fulltext con MySQL:
http://www.slideshare.net/billkarwin /pratica-ricerca-full-text-con-il-mio-sql
Non sorprende che non possa eguagliare le prestazioni e la scalabilità della tecnologia Java Lucene. Il vantaggio di PHP come linguaggio è aumentare l'efficienza dello sviluppo, non l'efficienza del runtime.
aggiornamento: Ho appena provato a creare un indice usando Zend_Search_Lucene
. La creazione di un indice è molto più lenta con PHP che con la tecnologia Java Lucene, quindi ho indicizzato solo 10.000 documenti. Ci sono voluti quasi 15 minuti, il che richiederebbe circa 36 ore per indicizzare l'intera collezione. Confrontalo con Java Lucene, che nel mio test ha indicizzato l'intera raccolta di 1,5 milioni di documenti in meno di 7 minuti.
La dimensione dell'indice che ho creato con Zend_Search_Lucene
è 8,75 MB. Estrapolando questo 150x, stimo che l'indice completo sarebbe 1312,5 MB. Quindi concludo che Zend_Search_Lucene
crea un indice della stessa dimensione dell'indice prodotto da Java Lucene. Questo è come previsto.