SlideShare une entreprise Scribd logo
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 ?

Contenu connexe

Tendances

Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkAmal Abid
 
Spark, ou comment traiter des données à la vitesse de l'éclair
Spark, ou comment traiter des données à la vitesse de l'éclairSpark, ou comment traiter des données à la vitesse de l'éclair
Spark, ou comment traiter des données à la vitesse de l'éclairAlexis Seigneurin
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocutionParis_Storm_UG
 
Spark RDD : Transformations & Actions
Spark RDD : Transformations & ActionsSpark RDD : Transformations & Actions
Spark RDD : Transformations & ActionsMICHRAFY MUSTAFA
 
Systemes d'explotation: Threads
Systemes d'explotation: ThreadsSystemes d'explotation: Threads
Systemes d'explotation: ThreadsAlexandru Radovici
 
ElasticSearch : Architecture et Développement
ElasticSearch : Architecture et DéveloppementElasticSearch : Architecture et Développement
ElasticSearch : Architecture et DéveloppementMohamed hedi Abidi
 
Normandy JUG - Elasticsearch
Normandy JUG - ElasticsearchNormandy JUG - Elasticsearch
Normandy JUG - ElasticsearchDavid Pilato
 
Spark - Alexis Seigneurin (Français)
Spark - Alexis Seigneurin (Français)Spark - Alexis Seigneurin (Français)
Spark - Alexis Seigneurin (Français)Alexis Seigneurin
 
Cours Big Data Chap6
Cours Big Data Chap6Cours Big Data Chap6
Cours Big Data Chap6Amal Abid
 
Hadoop and friends : introduction
Hadoop and friends : introductionHadoop and friends : introduction
Hadoop and friends : introductionfredcons
 

Tendances (20)

Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - Spark
 
Spark, ou comment traiter des données à la vitesse de l'éclair
Spark, ou comment traiter des données à la vitesse de l'éclairSpark, ou comment traiter des données à la vitesse de l'éclair
Spark, ou comment traiter des données à la vitesse de l'éclair
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocution
 
Spark RDD : Transformations & Actions
Spark RDD : Transformations & ActionsSpark RDD : Transformations & Actions
Spark RDD : Transformations & Actions
 
SdE2 4 - Processus
SdE2 4 - ProcessusSdE2 4 - Processus
SdE2 4 - Processus
 
SdE 6 - Gestion de la memoire
SdE 6 - Gestion de la memoireSdE 6 - Gestion de la memoire
SdE 6 - Gestion de la memoire
 
SdE 1 - Introduction
SdE 1 - IntroductionSdE 1 - Introduction
SdE 1 - Introduction
 
SdE 10 - Threads
SdE 10 - ThreadsSdE 10 - Threads
SdE 10 - Threads
 
Systemes d'explotation: Threads
Systemes d'explotation: ThreadsSystemes d'explotation: Threads
Systemes d'explotation: Threads
 
Tech day hadoop, Spark
Tech day hadoop, SparkTech day hadoop, Spark
Tech day hadoop, Spark
 
Introduction spark
Introduction sparkIntroduction spark
Introduction spark
 
ElasticSearch : Architecture et Développement
ElasticSearch : Architecture et DéveloppementElasticSearch : Architecture et Développement
ElasticSearch : Architecture et Développement
 
Normandy JUG - Elasticsearch
Normandy JUG - ElasticsearchNormandy JUG - Elasticsearch
Normandy JUG - Elasticsearch
 
Spark - Alexis Seigneurin (Français)
Spark - Alexis Seigneurin (Français)Spark - Alexis Seigneurin (Français)
Spark - Alexis Seigneurin (Français)
 
Cours Big Data Chap6
Cours Big Data Chap6Cours Big Data Chap6
Cours Big Data Chap6
 
SdE - Introduction
SdE - IntroductionSdE - Introduction
SdE - Introduction
 
SdE 3 - Systemes de fichiers
SdE 3 - Systemes de fichiersSdE 3 - Systemes de fichiers
SdE 3 - Systemes de fichiers
 
Hadoop
HadoopHadoop
Hadoop
 
Hortonwork
HortonworkHortonwork
Hortonwork
 
Hadoop and friends : introduction
Hadoop and friends : introductionHadoop and friends : introduction
Hadoop and friends : introduction
 

En vedette

A la recherche d'ElasticSearch
A la recherche d'ElasticSearchA la recherche d'ElasticSearch
A la recherche d'ElasticSearchNinnir
 
Introduction à ElasticSearch
Introduction à ElasticSearchIntroduction à ElasticSearch
Introduction à ElasticSearchFadel Chafai
 
Chapitre2 prise en_main_kibana
Chapitre2 prise en_main_kibanaChapitre2 prise en_main_kibana
Chapitre2 prise en_main_kibanaFabien SABATIER
 
Chapitre3 elk concepts_avances
Chapitre3 elk concepts_avancesChapitre3 elk concepts_avances
Chapitre3 elk concepts_avancesFabien SABATIER
 
Nantes JUG - Elasticsearch
Nantes JUG - ElasticsearchNantes JUG - Elasticsearch
Nantes JUG - ElasticsearchDavid Pilato
 
Elasticsearch - Montpellier JUG
Elasticsearch - Montpellier JUGElasticsearch - Montpellier JUG
Elasticsearch - Montpellier JUGDavid Pilato
 
Découverte de Elastic search
Découverte de Elastic searchDécouverte de Elastic search
Découverte de Elastic searchJEMLI Fathi
 
Solr and Elasticsearch in Action (at Breizhcamp)
Solr and Elasticsearch in Action (at Breizhcamp)Solr and Elasticsearch in Action (at Breizhcamp)
Solr and Elasticsearch in Action (at Breizhcamp)Lucian Precup
 
Tunis big data_meetup__21_nov2015__aymenzaafouri
Tunis big data_meetup__21_nov2015__aymenzaafouriTunis big data_meetup__21_nov2015__aymenzaafouri
Tunis big data_meetup__21_nov2015__aymenzaafouriAymen ZAAFOURI
 
Tirer le meilleur de ses données avec ElasticSearch
Tirer le meilleur de ses données avec ElasticSearchTirer le meilleur de ses données avec ElasticSearch
Tirer le meilleur de ses données avec ElasticSearchSéven Le Mesle
 

En vedette (12)

Chapitre1 elk chez_psa
Chapitre1 elk chez_psaChapitre1 elk chez_psa
Chapitre1 elk chez_psa
 
A la recherche d'ElasticSearch
A la recherche d'ElasticSearchA la recherche d'ElasticSearch
A la recherche d'ElasticSearch
 
Introduction à ElasticSearch
Introduction à ElasticSearchIntroduction à ElasticSearch
Introduction à ElasticSearch
 
Chapitre2 prise en_main_kibana
Chapitre2 prise en_main_kibanaChapitre2 prise en_main_kibana
Chapitre2 prise en_main_kibana
 
Chapitre3 elk concepts_avances
Chapitre3 elk concepts_avancesChapitre3 elk concepts_avances
Chapitre3 elk concepts_avances
 
Nantes JUG - Elasticsearch
Nantes JUG - ElasticsearchNantes JUG - Elasticsearch
Nantes JUG - Elasticsearch
 
Elasticsearch - Montpellier JUG
Elasticsearch - Montpellier JUGElasticsearch - Montpellier JUG
Elasticsearch - Montpellier JUG
 
Découverte de Elastic search
Découverte de Elastic searchDécouverte de Elastic search
Découverte de Elastic search
 
Solr and Elasticsearch in Action (at Breizhcamp)
Solr and Elasticsearch in Action (at Breizhcamp)Solr and Elasticsearch in Action (at Breizhcamp)
Solr and Elasticsearch in Action (at Breizhcamp)
 
Solr formation Sparna
Solr formation SparnaSolr formation Sparna
Solr formation Sparna
 
Tunis big data_meetup__21_nov2015__aymenzaafouri
Tunis big data_meetup__21_nov2015__aymenzaafouriTunis big data_meetup__21_nov2015__aymenzaafouri
Tunis big data_meetup__21_nov2015__aymenzaafouri
 
Tirer le meilleur de ses données avec ElasticSearch
Tirer le meilleur de ses données avec ElasticSearchTirer le meilleur de ses données avec ElasticSearch
Tirer le meilleur de ses données avec ElasticSearch
 

Similaire à Apache solr andré bois-crettez 08

Annexe1 éTude Comparative Sur Les Moteurs De Recherche
Annexe1   éTude Comparative Sur Les Moteurs De RechercheAnnexe1   éTude Comparative Sur Les Moteurs De Recherche
Annexe1 éTude Comparative Sur Les Moteurs De RechercheMohamed Ben Bouzid
 
Alphorm.com Formation Splunk : Maitriser les fondamentaux
Alphorm.com Formation Splunk : Maitriser les fondamentauxAlphorm.com Formation Splunk : Maitriser les fondamentaux
Alphorm.com Formation Splunk : Maitriser les fondamentauxAlphorm
 
Hadoop Introduction in Paris
Hadoop Introduction in ParisHadoop Introduction in Paris
Hadoop Introduction in ParisTed Drake
 
Architecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.KArchitecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.KJulien Anguenot
 
Presentation des outils traitements distribues
Presentation des outils traitements distribuesPresentation des outils traitements distribues
Presentation des outils traitements distribuesLê Anh
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB MongoDB
 
Geneva jug Lucene Solr
Geneva jug Lucene Solr Geneva jug Lucene Solr
Geneva jug Lucene Solr francelabs
 
Presentation Lucene / Solr / Datafari - Nantes JUG
Presentation Lucene / Solr / Datafari - Nantes JUGPresentation Lucene / Solr / Datafari - Nantes JUG
Presentation Lucene / Solr / Datafari - Nantes JUGfrancelabs
 
Drupal et le NoSQL - drupagora 2011
Drupal et le NoSQL - drupagora 2011Drupal et le NoSQL - drupagora 2011
Drupal et le NoSQL - drupagora 2011OSInet
 
Apache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performantApache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performantALTIC Altic
 
Poitou charentes JUG - Elasticsearch
Poitou charentes JUG - ElasticsearchPoitou charentes JUG - Elasticsearch
Poitou charentes JUG - ElasticsearchDavid Pilato
 
code4lib 2011 : choses vues et entendues par l'ABES
code4lib 2011 : choses vues et entendues par l'ABEScode4lib 2011 : choses vues et entendues par l'ABES
code4lib 2011 : choses vues et entendues par l'ABESABES
 
Rex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesRex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesChristophe Furmaniak
 
Finist JUG - Elasticsearch
Finist JUG - ElasticsearchFinist JUG - Elasticsearch
Finist JUG - ElasticsearchDavid Pilato
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : SparkLilia Sfaxi
 
Distributed computing with Spark 2.x
Distributed computing with Spark 2.xDistributed computing with Spark 2.x
Distributed computing with Spark 2.xDr Hajji Hicham
 

Similaire à Apache solr andré bois-crettez 08 (20)

Annexe1 éTude Comparative Sur Les Moteurs De Recherche
Annexe1   éTude Comparative Sur Les Moteurs De RechercheAnnexe1   éTude Comparative Sur Les Moteurs De Recherche
Annexe1 éTude Comparative Sur Les Moteurs De Recherche
 
Alphorm.com Formation Splunk : Maitriser les fondamentaux
Alphorm.com Formation Splunk : Maitriser les fondamentauxAlphorm.com Formation Splunk : Maitriser les fondamentaux
Alphorm.com Formation Splunk : Maitriser les fondamentaux
 
Hadoop Introduction in Paris
Hadoop Introduction in ParisHadoop Introduction in Paris
Hadoop Introduction in Paris
 
Architecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.KArchitecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.K
 
Presentation des outils traitements distribues
Presentation des outils traitements distribuesPresentation des outils traitements distribues
Presentation des outils traitements distribues
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB
 
Geneva jug Lucene Solr
Geneva jug Lucene Solr Geneva jug Lucene Solr
Geneva jug Lucene Solr
 
Presentation Lucene / Solr / Datafari - Nantes JUG
Presentation Lucene / Solr / Datafari - Nantes JUGPresentation Lucene / Solr / Datafari - Nantes JUG
Presentation Lucene / Solr / Datafari - Nantes JUG
 
Drupal et le NoSQL - drupagora 2011
Drupal et le NoSQL - drupagora 2011Drupal et le NoSQL - drupagora 2011
Drupal et le NoSQL - drupagora 2011
 
Apache kafka big data track
Apache kafka   big data trackApache kafka   big data track
Apache kafka big data track
 
Apache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performantApache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performant
 
Poitou charentes JUG - Elasticsearch
Poitou charentes JUG - ElasticsearchPoitou charentes JUG - Elasticsearch
Poitou charentes JUG - Elasticsearch
 
Hackerspace jan-2013
Hackerspace jan-2013Hackerspace jan-2013
Hackerspace jan-2013
 
code4lib 2011 : choses vues et entendues par l'ABES
code4lib 2011 : choses vues et entendues par l'ABEScode4lib 2011 : choses vues et entendues par l'ABES
code4lib 2011 : choses vues et entendues par l'ABES
 
Infrastructure as code drupal
Infrastructure as code drupalInfrastructure as code drupal
Infrastructure as code drupal
 
Rex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesRex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantes
 
REX Ansible
REX AnsibleREX Ansible
REX Ansible
 
Finist JUG - Elasticsearch
Finist JUG - ElasticsearchFinist JUG - Elasticsearch
Finist JUG - Elasticsearch
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : Spark
 
Distributed computing with Spark 2.x
Distributed computing with Spark 2.xDistributed computing with Spark 2.x
Distributed computing with Spark 2.x
 

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
  • 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
  • 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 ?