1. Apache Solr
Moteur de recherche utilisant Apache Lucene,
implémenté dans un serveur Web
AlpesJug | 19 février 2013 André Bois-Crettez | Kelkoo
2. Présentations ...
● André Bois-Crettez
– R&D : le moteur de recherche de Kelkoo
● Basé sur Lucene il y a … longtemps
● Puis intégration d'un moteur interne Yahoo
● Yahoo ayant vendu Kelkoo, plus aucun support
● Besoin d'évolution, il y a un an choix d'Apache Solr
après comparaison avec des prototypes implémentés
sur 4 moteurs payants
3. … présentations
– Les raisons de votre présence ce soir ...
● Simple curiosité ?
● Besoin d'implémenter de la recherche ?
● Vous perfectionner sur le sujet ?
– Déjà utilisé Lucene ou Solr ou Elasticsearch ?
– Ou une autre techno de recherche ?
– Sujets qui vous intéressent :
● Performance ?
– Ex : plus de 10 million de documents, ou mise à jour de l'index toutes les X
secondes, trafic > 20 requêtes par seconde
● Fonctionnalités utilisateur ?
– Synonymes, singulier pluriel, suggestion de correction orthographe, fuzzy matching,
différentes langues, recherche géospatiale
4. Historique
● 2004 : créé par Yonik Seeley chez CNET Networks
● 2006 : le code source de Solr est donné par CNET à
la fondation Apache
● 2010 : Lucene et Solr sont intégrés dans le même
cycle de release et ont les mêmes développeurs
● Janvier 2013 : Solr 4.1 avec Lucene 4.1
5. Les bases
● Découpage en termes (tokens), index inversé
Doc1 : "maison bleue" "arbre" doc2
"bleue" doc1
Doc2 : "arbre vert"
Indexation "maison" doc1
Doc3 : "volet vert" "vert" doc2, doc3
"volet" doc3
● TF.IDF (term frequency x inverse documents frequency)
– TF : Plus un terme est fréquent dans le document considéré, plus il est
important
– IDF : Plus un terme est fréquent dans l'ensemble des documents de
l'index, moins il a d'importance
7. Démarrage rapide
● http://lucene.apache.org/solr/tutorial.html
● Télécharger et extraire solr-4.1.0.zip
● Dans le répertoire solr-4.1.0/example :
java -jar start.jar
Administration : http://localhost:8983/solr/ !
o
●
● Indexation :
é m
java -jar post.jar *.xml
D
● Recherche : http://localhost:8983/solr/collection1/browse/
8. Fonctionnalités 1/2
● Mécanisme de synonymes, et mots vides (stopwords)
– Une liste de stopwords est dispo pour le français
● Stemming pour de nombreuses langues
– Choix de différents algos : enlèvement de suffixes plus ou moins aggressifs
– vert <-> verts ou plus extrême consti <-> constitutionel
● DataImportHandlers (DIH) pour indexer directement :
– Databases
– XML/HTTP
– MS Office, PDF, multimédia, etc avec Apache Tika
● Recherche géospatiale
– Distance autour d'un point de recherche, tri par distance
– Recherche par polygone
9. Fonctionnalités 2/2
● Filtres et facettes complexes
– Hiérarchiques : tree, pivot faceting
– Calculés dynamiquement par une fonction
– Date et temps
● Boost functions pour modifier le ranking
– En fonction du prix, note, distance, etc et formules mathematiques
● Extended DisMax
– boost si les mots sont rapprochés
– Recherche multi-champs automatique
– Min-should-match : minimum number of token that should match
● DirectSolrSpellChecker, suggest, recherche àpro aproximative fuzzy
match~2
10. Extensions et besoins spécifiques
● Système modulaire de filtres, plugins, RequestHandler
– Simple d'injecter son code métier (en Java) sans devoir
patcher Solr
● Beaucoup de cas et d'exemples sur le Web
– Souvent on découvre qu'il suffit d'un peu de conf, sans
développement supplémentaire
● Si vraiment nécessaire, un support payant est
facilement possible
11. SolrCloud
● Conçu pour la scalabilité facile (concurrence avec Elasticsearch)
● On définit en combien de tranches l'index est découpé, puis
chaque instance Solr démarrée participe automatiquement
● Failover automatique, si suffisamment d'instances
Shard1 : Shard2 : Shard3 :
● Indexation & recherche
inst1 inst2 inst3
– Distribuées automatiquement
inst4 inst5 inst6
● Haute disponibilité inst7 inst8 ...
● NRT : near real time search ...
L'ancien système basé sur une architecture master-slave
+ sharding explicite est aussi disponible.
Moins automatique, mais robuste depuis des années et
possibilité de finement contrôler les détails.
12. Performance et scalabilité
Java6:
● RAM : assez peu de mémoire nécessaire à la JVM, par contre en laisser un
-Xms4096M
max pour le cache disque de l'OS. -Xmx8192M
-XX:NewRatio=1
● I/O, au choix : -XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled
– Cheap : beaucoup de RAM, et disques classiques
– La classe : SDD mais plus coûteux
● CPU : dépend beaucoup du type de requêtes
● Index sharding : pour gros volumes d'index (ex >10M docs) malgré surcoût
de combiner les résultats
● Replicas : pour gros volumes de requêtes et haute dispo
● Benchmark !
– Solrmeter : simple à utiliser, proche de Solr (vue des caches), bien pour explorer
– Gatling-tool : dans une prochaine présentation AlpesJug !
13. Solr vs Elasticsearch
● SolrCloud assez jeune et basique
– Si besoin particulier, faire « à la main » avec le mode master-
slave et le sharding personalisé
● Suggest / did you mean est livré avec Solr
● Facilité de mettre son propre code à différents endroits
du moteur
● Fonctionalités de Lucene 4 disponibles
14. Apache Solr : conclusion
● Coût d'entrée faible
● Large communauté de devs et utilisateurs
● Utilisé tant en intranet, que pour des sites eCommerce à fort trafic
● Implémenter une solution de recherche, ce n'est pas seulement
déployer une solution, c'est aussi étudier les logs de requêtes
pour l'améliorer
– Top recherches, top mots
– Top recherches sans résultats
Top recherches sans clic sur les résultats ? ?
rch
–
S ea
– Position dans la page de résultats du document cliqué t ant
e Ins
o gl
– Étude de sessions de recherches successives Go