SOLR est essentiellement un conteneur Apache Tomcat qui implémente une interface REST pour interroger un index Apache Lucene. Oui, vous devez pouvoir exécuter une application Java sur votre serveur Web. C'est un problème que vous devez régler avec votre fournisseur d'hébergement.
Les clients utilisant votre application Web n'ont pas besoin d'exécuter Java. Votre application PHP peut envoyer une requête REST au service SOLR et formater les résultats en HTML. Un client ne voit que la sortie HTML ; il n'a jamais besoin de savoir que les données proviennent d'un service implémenté en Java.
Zend_Search_Lucene
est une implémentation PHP pure censée fonctionner de la même manière qu'Apache Lucene. La solution Zend utilise même un format de fichier d'index identique. Donc, en termes de stockage, ils devraient être égaux.
J'ai utilisé Java Lucene pour indexer le vidage de données StackOverflow (octobre 2009). J'ai indexé 1,5 million de lignes, dont environ 1 Go de données textuelles. L'index Lucene était de 1323 Mo, alors que l'index MySQL FULLTEXT des mêmes données n'était que de 466 Mo.
Utiliser SQL LIKE
prédicats au lieu de toute solution d'indexation de texte intégral ne nécessite bien sûr aucun espace, car il ne peut de toute façon pas utiliser un index conventionnel. Mais dans mes tests en utilisant LIKE
était environ 200 fois plus lent que Java Lucene, qui était à son tour environ 40 % plus lent qu'un index MySQL FULLTEXT sur les mêmes données.
Voir ma récente présentation sur les solutions d'indexation de texte intégral avec MySQL :
http://www.slideshare.net/billkarwin /recherche-en-plein-texte-pratique-avec-mon-sql
Il n'est pas surprenant qu'il ne puisse pas égaler les performances et l'évolutivité de la technologie Java Lucene. L'avantage de PHP en tant que langage est d'augmenter l'efficacité du développement, pas l'efficacité de l'exécution.
mise à jour : Je viens d'essayer de créer un index en utilisant Zend_Search_Lucene
. La création d'un index est beaucoup plus lente avec PHP qu'avec la technologie Java Lucene, donc je n'ai indexé que 10 000 documents. Cela a pris près de 15 minutes, ce qui aurait pris environ 36 heures pour indexer l'ensemble de la collection. Comparez cela à Java Lucene, qui dans mon test a indexé la collection complète de 1,5 million de documents en moins de 7 minutes.
La taille de l'index que j'ai créé avec Zend_Search_Lucene
est de 8,75 Mo. En extrapolant ce 150x, j'estime que l'index complet serait de 1312,5 Mo. J'en conclus donc que Zend_Search_Lucene
crée un index d'environ la même taille que l'index produit par Java Lucene. C'est comme prévu.