Apache Solr

    Moteur de recherche utilisant Apache Lucene,

              implémenté dans un serveur Web




AlpesJug | 19 février 2013             André Bois-Crettez | Kelkoo
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
… 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
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
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
Architecture




CC by www.cominvent.com
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/
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
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
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
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.
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 !
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
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
Liens et références

http://lucene.apache.org/solr/4_1_0/tutorial.html

http://wiki.apache.org/solr/SolrCloud

http://blog.sematext.com/2012/08/23/solr-vs-elasticsearch-part-1-overview/ (et tout le blog)

http://lucidworks.lucidimagination.com/display/solr/Apache+Solr+Reference+Guide

http://refcardz.dzone.com/refcardz/solr-essentials#refcard-download-social-buttons-display

http://www.lucenerevolution.org/past_events

http://searchhub.org/blog/

http://solr.pl/en/



                       … vos questions ?

Apache solr andré bois-crettez 08

  • 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
  • 6.
  • 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 besoinsspé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
  • 15.
    Liens et références http://lucene.apache.org/solr/4_1_0/tutorial.html http://wiki.apache.org/solr/SolrCloud http://blog.sematext.com/2012/08/23/solr-vs-elasticsearch-part-1-overview/(et tout le blog) http://lucidworks.lucidimagination.com/display/solr/Apache+Solr+Reference+Guide http://refcardz.dzone.com/refcardz/solr-essentials#refcard-download-social-buttons-display http://www.lucenerevolution.org/past_events http://searchhub.org/blog/ http://solr.pl/en/ … vos questions ?