Vous êtes sur la page 1sur 27

Apache Solr

20 Novembre 2017

Notions Essentielles
François-Xavier Barreiro
Expert Technologique chez Groupe T2I

– fxba@groupe-t2i.com

2
Agenda

• Introduction

– Principales fonctionnalités de Solr

• Aspects Techniques

• Intégration de Solr dans nos projets

3
Introduction Apache Solr

«Open Source Entreprise Search Plateform»

– Ecrit en Java

– A partir du projet Apache Lucene (même socle commun qu’elasticsearch)

«Un moteur d’indexation et de recherche open source en java


très très performant…»

«Taillé pour répondre aux défis du Big Data»

4
Introduction – Principales fonctionnalités

• Indexation et recherche plein texte sur les données et le contenu

5
Introduction – Principales fonctionnalités

• Filtres et Facettes

6
Introduction – Principales fonctionnalités

• Recalcul avec l’API Solr facettes (exemple du champ date)

7
Introduction – Principales fonctionnalités

• API Rest pour toutes les opérations (administration, indexation,


recherches)

• Formats : Json, XML, CSV, …

• Indexation fulltext des documents

• Utilise la bibliothèque java «Tika»


• Fichiers Texte, PDF, Office, …

8
Introduction – Principales fonctionnalités

• Solr Cloud Cluster de serveurs Solr

• Optimisé pour des gros volumes

• Séparation de l’indexation et des recherches grâce à l’architecture distribuée


qui garanti des temps de réponses constants au niveau des recherches

• Hautement évolutif (Scalable)

• Gère la réplication et distribution des données sur l’ensemble du cluster

9
Solr Cloud

• Construit sur Apache Zookeper

– Configuration centrale et coordination pour l’ensemble du cluster


(elasticsearch est autonome et ne nécessite pas Zookeper)

10
Solr Cloud

• Gestion de la montée en charge


• «Shards», distribution de l’index sur plusieurs machines (volume des index)

– Lorsque l’index approche les limitations de la machine


– Diviser l’index en deux nouvelles partitions Shard Splitting

• «Replicas», copies multiples «read-only» de l’index (charge + continuité


d’exploitation)

– Pour adresser un grand volume de recherches (clients simultanés)


– Pour gérer un grand volume d’indexations qui pénalisent les recherches
• Séparer les recherches et l’indexation
– Pour effectuer des backup de l’index (gestion du failover)

11
Solr Cloud

12
Interface d’administration

• Tableau de bord, logs


• Etat des collections et des nœuds du cloud

13
Interface d’administration

• Administration des données (Schéma, tests, validation des requêtes)

14
Prise en main

• Simple et rapide (avec des exemples)

1. Téléchargement

2. De zipper l’archive

3. Démarrage : solr start –e techproducts

http://localhost:8983/solr/techproducts/browse

– Interface d’exemple «Velocity» illustrant les principales fonctionnalités

15
Aspects Techniques

Définition Indexation Requêtes


des des de
données données recherche

Exemple de document à indexer dans solr :

{
"id": "1",
"category": "Informatique",
"title": "Apache Solr Entreprise Search Server",
"authors": "David Smiley and Eric Pugh"
}

16
Définition des données

• Avec un fichier xml «Schema»

<field name=“category" type="string" indexed="true" stored="true" required="true"/>


Champs

<fieldType name="string" class="solr.StrField"/>


Types

Champs
<dynamicField name="*_date" type="date" indexed="true" stored="false" multiValued="true" />
dynamiques

<copyField source=“authors" dest="fullText"/>


Copie de <copyField source=“title" dest="fullText"/>
champs

17
Définition des données

• L’analyse des champs texte est configurable


<field name=“fullText" type=“texte" indexed="true" stored=“false" />

Configuration des analyseurs des données (tokenizer et filtres)

<fieldType name="texte" class="solr.TextField">

<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer></fieldType> 18
Analyse champs texte

• Filtres de caractères (0-n)


• Enlever caractères html

• Tokenizer (1)
• Découpage des mots

• Filtres sur les mots (0-n)


• Lowercase, Stop words

19
Indexation des données

• L’indexation s’effectue dans une «Collection» Solr

• Indexation unitaires

» API Rest (flux json, xml, csv)

• Importation de masse

» DIH (Data Import Handler)

20
Indexation des données «Unitaire»

• API Rest ( Exemple au format json)

curl -X POST -H 'Content-Type: application/json’ ‘http://localhost:8983/solr/books/update’

[{
"id": "1",
"title": "Apache Solr Entreprise Search Server",
"authors": "David Smiley and Eric Pugh"
},
{
"id": "2",
"title": "Solr Cookbook",
"authors": "Rafael Kuc"
}] 21
Importation données de masse

• Data Import Handler


• Implémentation d’un processeur java customisé
accédant à une source de donnée (fichier csv, base de donnée, …)

22
Requêtes de recherche

• Avec paramètre «Query» (q) "title": "Apache Solr Entreprise Search Server"

"title": "Solr Cookbook"


– Basiques

• http://localhost:8983/solr/books/query?q=fullText: solr

– Phrases

• http://localhost:8983/solr/books/query?q=fullText: " solr entreprise "

"title": "Apache Solr Entreprise Search Server"

23
Requêtes de recherche

– Proximité, (~) suivi du nombre de positions

• …/query?q=fullText: " solr search "~1


"title": "Apache Solr Entreprise Search Server"
– Wildcard (*)

• …/query?q=fullText: sol*

"title": "Apache Solr Entreprise Search Server"

"title": "Solr Cookbook"

24
Requêtes de recherche

• Boolean

– Par défaut l’opérateur OR


"title": "Apache Solr Entreprise Search Server"

• …/query?q=fullText: apache cookbook "title": "Solr Cookbook"

– Autres opérateurs
• …/query?q=fullText: solr AND search NOT cookbook

"title": "Apache Solr Entreprise Search Server"

25
Intégration Solr dans nos projets

• Architecture

26
Intégration Solr dans nos projets

• Infrastructure
• 1 Serveur Linux (16 CPU, 24 GB RAM)

– Volumes

» Shard Environ 50 millions de documents


» 50 m. documents Environ 50 GB d’Index sur disque

– Performances (environ 750 utilisateurs, en dessous de la seconde)


» Requêtes de recherche 25 à 100 millisecondes
» Indexation (updates) 200 à 400 millisecondes

• Les updates pénalisent les recherches


• Recommandé d’effectuer des soft commit (intervalle de temps 1s, 5s,…) au lieu des hard
commit (demande update instantanée)

27

Vous aimerez peut-être aussi