• Aucun résultat trouvé

Lucene/Solr. Montpellier JUG 18/09/13 Olivier TAVARD

N/A
N/A
Protected

Academic year: 2022

Partager "Lucene/Solr. Montpellier JUG 18/09/13 Olivier TAVARD"

Copied!
86
0
0

Texte intégral

(1)

Lucene/Solr

Montpellier JUG 18/09/13

Olivier TAVARD

(2)

Introduction

A propos de moi :

Cofondateur de la société France Labs

Développeur

Formateur

A propos de France Labs :

Startup créée en 2011

Unique Partenaire officiel de LucidWorks et de Constellio pour la France

(3)

Introduction

Domaine: Moteurs de recherche d'entreprise Open Source

2 activités:

Consulting/support/training sur Lucene/Solr/Constellio/LucidWorks

R&D (algorithmes de ranking, connecteurs, réseaux sociaux)

(4)

Pourquoi les technologies Lucene/Solr ?

Besoins d'entreprise : avoir une bonne solution logicielle, avec un support fiable

Par conséquent notre choix de Lucene/Solr :

Large communauté autour de Lucene/Solr

Schémas de support professionnel pour Lucene/Solr

Solr 4 pensé pour le calcul distribué

Utilisé par Twitter, Linkedin, eBay, Salesforce, IBM, Apple

(5)

Architecture

La recherche est un oignon !

(6)

Architecture

La recherche est un oignon !

(7)

Architecture

La recherche est un oignon !

(8)

Architecture

Lucene

(9)

Lucene

Créé en 2000 par Doug Cutting. Version Actuelle : Lucene v. 4.4 (Juillet 2013)

Projet Open Source, Apache depuis 2001

Librairie de recherche “full-text”

Rapide, stable, performant, modulable

100% Java (pas de dépendances)

(10)

Lucene

Différence avec une base de données

Plus rapide pour récupérer un doc à partir de son contenu

Résultats scorés

Non relationnelle, structure non fixe

Champs qui peuvent contenir plusieurs

valeurs

(11)

Lucene

Un outil qui permet:

De créer un index à partir de documents

D’effectuer des

recherches dans cet index

INDEX

(12)

Lucene

Index inversé

© http://untiluknow.blogspot.com

(13)

Lucene

Scoring

(14)

Lucene

Formule paramètrable

Combinaison de

Boolean Model

Vector Space Model

Term Frequency

Inverse Document Frequency

Scoring

(15)

Lucene

Scoring

Term Frequency (TF) :

Fréquence d’un Terme dans un document

France Labs

Bienvenue sur le site de France Labs. Créée en 2011, France Labs est une société composée d'experts en gestion de l'information. Que ce soit pour de l'expertise, pour nos produits ou pour nos solutions métiers, nous faisons en sorte que vous augmentiez votre efficacité par une meilleure exploitation de vos données.

France Labs, spécialiste des outils de recherche open source, propose des plugins innovants et des services de conseil, intégration et maintenance, sur Lucene, Solr et Constellio.

Europe, nous sommes le partenaire de Constellio, solution complète de recherche.

(16)

Lucene

Scoring

Inverse Document Frequency (IDF):

Rareté du terme dans l’ensemble du corpus

Expertise Lucene

Souhaitant intervenir plus en amont dans la vie de l’entreprise, pour vous proposer toujours plus de conseils à partir de nos expertises, Expertise & Conseil a créé Formation & Conseil : une structure de formation destinée aux acteurs de performance de l’entreprise.

Apache Lucene, la fameuse technologie pour l’indexation, la recherche et l’analyse du texte est la base de plusieurs serveurs Open Source. La présentation détaillera Solr et ElasticSearch sous la forme « Tools in Action » - démonstrations en direct des différents outils.

(17)

Document

Lucene

Field Term

Document : unité d’indexation

Field : partie d’un document, contient les données

Term : unité atomique d’un champ

Si on veut indexer un livre, on aura:

Title : Lucene in Action

Author : Erik Hatcher, Otis Gospodnetić

Description : Lucene is a gem in the open-source...

Content : …

Document

(18)

Boosts:

Modifie le score d’un document

Si Boost > 1

Score du doc plus élevé

A l’indexation:

Peut se faire sur les champs:

- Field Boost

Sur un document en entier:

- Document Boost

Lucene

Scoring

(19)

Boosts:

A la requête:

Boost sur certains champs

Boost sur certaines valeurs de la requête

Et d’autres cas…

Lucene

Scoring

(20)

Lucene

Scoring

Boosts:

Boost sur le Titre

Fonctionnalités

Titre : Fonctionnalités Content :

Interface d'administration en HTML, Réplication, Mise en cache Recherche distribuée, Recherche à facettes, Recherche géospatiale ,API HTTP/XML, JSON et bibliothèques pour les langages de script Python et Ruby, Intégration des bases de données

Titre : Highlighter Content :

Cette fonctionnalité permet de mettre en surbrillance les termes recherchés. Ce principe est le même que les pages "en cache" de Google où les termes recherchés apparaissent surlignés en jaune.

C'est une fonctionnalité puissante et pratique.

(21)

Lucene

Récupérer les bons résultats…

… et seulement ceux là

Precision

Pourcentage de docs pertinents sur les docs retournés

Recall

Pourcentage de docs pertinents retournés sur le total des docs pertinents

Trouver un bon compromis…

Documents Pertinents

Document Retournés Documents

Pertinents

Docs retournés et pertinents

Recherche pertinente

(22)

Lucene

Indexation - Architecture

Apache Tika

© Lucene in Action, Second Edition

(23)

Lucene

2 étapes

Query Parser

Analyzer Results

Parser

Index Writer

Analyzer Index

Searcher

(24)

Lucene

Analyzer Analyzer

Chaine de composants

Extraction de termes du texte

Normaliser les données

A l'indexation/Requête WhiteSpace

Tokenizer LowerCaseFilter

StopFilter

(25)

Lucene

Différents Analyzers

© Lucene introduction, Otis Gospodnetic

(26)

Lucene

Créées programmatiquement à partir d’une interface

Créées à partir d’une chaîne de

caractères parsée par un “Query Parser”

type:voitures AND prix:[3000 TO 5000]

Lucene Query

Lucene Query

Query Parser

Requêtes – Comment les créer

(27)

Lucene

Match

Coquilles SaintJacques

WordDelimiter

Coquilles Saint Jacques

Document Analysis

coquilles saint jacques

LowerCaseFilter WhitespaceTokenizer Coquilles SaintJacques

Coquilles saint-jacques

WordDelimiter

Coquilles saint jacques

Query Analysis

coquilles saint jacques

LowerCaseFilter WhitespaceTokenizer Coquilles saint-jacques

Match

(28)

Lucene

Schema Global

© Lucene in Action, Second Edition

(29)

Lucene

"Simple" bibliothèque

Besoin d’une couche serveur et d’une UI

Pourquoi ce n’est pas suffisant?

(30)

Architecture

Solr

(31)

Solr

Lucene « embarqué » dans une webapp

Créé en 2004 par Yonik Seeley à CENT Networks

In 2006, Solr devient open-source et été cédé à la Apache Software Foundation

En 2010, fusion des projets Lucene et Solr

Version Actuelle : Sorl 4.4 (Juillet 2013)

(32)

Solr

APIs XML/HTTP de type REST

Configuration par fichiers XML

Mécanisme de Cache, Réplication

Interface admin web

(33)

Solr

Interfaces HTTP pour :

ajouter des documents (POST)

http://localhost:8983/solr/update

effectuer des recherches (GET)

http://localhost:8983/solr/select

Interfaces

(34)

Solr

Architecture

© www,oblady,com

(35)

Installer SOLR

Installer et tester Solr en 1 minute

Télécharger le dernier binaire (V.4.4 07/13) http://lucene.apache.org/solr/

Extraire le zip

Lancer java –jar start.jar dans apache-solr-4.4.0/example/

http://localhost:8983/solr

(36)

Solr

Functionnalités

Queries

Phrase query

Wildcard query

Range query

Proximity query

Fuzzy query

Boolean query

(37)

Solr

Functionnalités

Autocomplete

(38)

Solr

Functionnalités

Spellchecker

(39)

Solr

Functionnalités

Faceting

(40)

Solr

Functionnalités

Geospatial search

(41)

Solr

Functionnalités

More Like This

Obtenir des documents similaires à un document

Similarité textuelle

Highlighting

Synonymes

(42)

Indexer des documents

Indexer des documents

(43)

Indexer des documents

Récupérer les documents

Google Connectors

Nutch

Aperture

Préparer les documents

Convertir en XML ou JSON

Respecter le schema.xml

Peut contenir plusieurs Docs

Indexer des documents

(44)

Indexer des documents

Poster les documents par HTTP

Avec cURL (linux)

Ex : curl http://localhost:8983/solr/collection1/update - H "Content-type:text/xml" --data-binary @mem.xml

Post.jar et Post.sh

Ex : java -jar post.jar *.xml

Indexer des documents

(45)

Indexer des documents

Mise à jour:

Document en entier

Depuis Solr 4.0:

Modifier la valeur d’un field

Indexer des documents

(46)

Construire son schéma

Décrit les données :

Contient les champs d’un document

Et la façon de les traiter (Analyzer):

Au moment de l’indexation d’un document

Au moment de la requête

Schema.xml

(47)

Construire son schéma

Types des champs des documents à indexer

Text, String, Date….

Liste des champs des documents

Id, author, type….

Clé unique par document

Manuel

UUID

Schema.xml

(48)

Construire son schéma

Schema.xml

(49)

Construire son schéma

Exemple de schéma simple :

Voitures :

Schema.xml

(50)

Configurer Solr

SolrConfig.xml

Principal fichier de configuration de Solr

Lié à une collection

Définit les interactions avec les clients (requêtes)

Ajout de fonctionnalités

Comportement interne du serveur

(51)

Interroger Solr (queries)

URL : select

http://localhost:8983/solr/select...

HTTP GET request

Web browser

Curl

SolrJ

Select

(52)

Interroger Solr

Recherche sur tout le contenu

http://localhost:8983/solr/select?q=*:*

*:* : recherche de tout sur tous les fields

1

ère

recherche

(53)

Interroger Solr

Accessible à cette URL :

http://localhost:8983/solr/admin

Complètement redesignée pour Solr 4

=>

UI Admin

(54)

Interroger Solr

UI Admin

(55)

Interroger Solr

UI Admin

(56)

Interroger Solr

1

ère

recherche

Démo !

(57)

Interroger Solr

http://localhost:8983/solr/formation/select?

q=*:*&start=0&rows=10&fl=description

/solr/ : contexte de l’application web où Solr est installé

/formation : Core de Solr

Select : request handler

Après le ? => paramètres non ordonnés

Structure de l’URL

(58)

SolrJ

SolrJ (aussi connu sous le nom de SolJava) : API pour communiquer avec Solr au travers d'applications Java

Package apache.solr.client.solrj :

ResponseParser

SolrQuery

SolrRequest

SolrResponse

SolrServer

StreamingResponseCallback

Définition

(59)

SolrJ

Simple à utiliser :

Création d'un SolrServer

Envoi de SolrQuery

Réception de SolrResponse

Définition

(60)

SolrJ

Connexion HTTP

Les données sont envoyées en javabin par défaut : gain de rapidité

Utilisation de la librairie Apache HttpComponents Client

HttpSolrServer solr = new HttpSolrServer("serverUrl");

ConcurrentUpdateSolrServer solr = new

ConcurrentUpdateSolrServer(solrServerUrl, queueSize, threadCount)

Communication avec le Solr server

(61)

SolrJ

Exemple :

Communication avec le serveur Solr en HTTP

Indexation de documents

Interrogation de Solr

Affichage des réponses

Exemple complet

(62)

SolrJ

Communication avec Solr en HTTP

String serverUrl =

"http://localhost:8983/solr/collection1";

HttpSolrServer server = new HttpSolrServer(serverUrl);

Exemple complet

(63)

SolrJ

Indexation

//solr.setParser(new BinaryResponseParser());

SolrInputDocument doc1 = new SolrInputDocument();

doc1.setField("id", "1");

doc1.setField("text", "hello SolrJ");

server.add(doc1);

solr.commit(true, true);

Exemple complet

(64)

SolrJ

Requête

SolrQuery query = new SolrQuery();

query.setQuery("*:*");

query.setStart(0);

query.setRows(10);

Exemple complet

(65)

SolrJ

Réponse

QueryResponse response = solr.query(query);

SolrDocumentList docs = response.getResults();

for(int i=0; i<docs.size(); i++) {

SolrDocument doc = docs.get(i);

System.out.print("id : "+doc.getFieldValue("id"));

System.out.println(" text :" + doc.getFieldValue("text"));

}

Exemple complet

(66)

SolrJ

Réponse

On obtient dans la console :

INFO: Creating new http client,

config:maxConnections=128&maxConnectionsPerH ost=32&followRedirects=false

id : 1 text : hello SolrJ id : 2 text : coucou

Exemple complet

(67)

Solr

Performances

Scaling

1 serveur Solr peut gérer

Des millions de documents

À peu près 1000 queries /seconde

Nous devons "scaler" si…

Le volume de données augmente

Le volume de queries augmente

Haute disponibilité

(68)

Scalability

Maître

Indexing

Master

Requêtes

Replicate

Slave

Requêtes

Slave

Load Balancer

Queries

Replication

(69)

Scalability

Distributed Search

Shard3

Queries

Shard1 Shard2

Aggregated results

Subquery

(70)

Solr Cloud

Solr Cloud

Nouvelle architecture pour la scalabilité

En développement

Nouveau système de mise à l’échelle de Solr

Pack 2 en 1

Distribution

Réplication

Architecture flexible

(71)

Solr Cloud

Zookeeper

Logiciel de gestion de configurations pour système distribués

Contient les configs des collections pour Solr Cloud

Sauf solr.xml

Les machines s’enregistrent et se désenregistrent

Statuts des shards enregistrés

(72)

Solr Cloud

1 collection - 2 shards

(73)

Solr Cloud

1 collection - 2 shards

Première instance avec Zookeeper embarqué:

Deuxième instance:

Visualisation:

(74)

Solr Cloud

1 collection - 2 shards

(75)

Solr Cloud

1 collection - 2 shards – 2 replicas

(76)

Solr Cloud

1 collection - 2 shards – 2 replicas

Pas de Maître/Esclave

Mais Leaders et réplicas

1 Leader par shard

0 à N replicas

Elu automatiquement

Comme un replica mais avec en bonus une logique de coordination

(77)

Solr Cloud

1 collection - 2 shards – 2 replicas

Comment sont assignées les instances de Solr?

Automatiquement lors du démarrage!

Tant que numShard non atteint

Ajout du shard N+1

Désignation comme leader

Quand numShard atteint

On peut commencer à indexer/chercher

Ajout de replica au shard en possèdant le moins

(78)

Solr Cloud

Indexation

On utilise un CloudSolrServer en SolrJ

Pointé sur Zookeeper

Transfert au shard concerné

Indexation des docs sur le shard et ses replicas

(79)

Solr Cloud

Indexation

On envoie les docs à n’importe quelle machine

Si la machine est une replica

Envoie les docs à son leader

Si la machine est un leader

Si les docs concernent ce shard

- Indexation des docs sur le shard et ses replicas

Sinon

- Transmet les docs au shard concerné

(80)

Solr Cloud

Recherche

Recherche sur n’importe quelle machine

Near Real Time

Peut avoir un délai

Suivant que l’update arrive sur le bon shard ou non

(81)

Scalability

Solr Cloud

Solr Cloud

(82)

Solr Cloud

Avantages

Architecture très flexible

En cas d’augmentation de charge

Ajout de machines qui pointent sur Zookeeper

En cas de diminution de charge

Eteindre des machines

Zookeeper

Gestion centralisée des configurations

Visualisation du statut des shards

(83)

Solr Cloud

Avantages

Réplication

Automatique et fiable

Distribution automatique des MAJs

Distribution automatique des recherches

(84)

Solr Cloud

Désavantages

Indexation plus lente

Transmissions des docs entre shards

Nouvel environnement

Certaines fonctionnalités non implémentées

Non éprouvé en prod

Susceptible d’évoluer

(85)

France Labs Résumé

Expertise sur:

Lucene

Solr

Constellio

Nouvelles

technologies

innovantes

(86)

Contacts

Site web : www.francelabs.com

Email : olivier.tavard@francelabs.com

Twitter : @Francelabs

Références

Documents relatifs

Looking forward to Linked Environment Data, we will need a tool to support different reference vocabularies which are not expressed in the SKOS or SKOS-XL

If Lucene returns less than 1,000 results for term-based recommendations, the click-through rate probably will be around half as high as if 1,000 candidates are

Text analysis and cross-modality components are implemented as UIMA components and run as pipelines integrated into the plat- form using custom input (CollectionReader) and

Afin d’évaluer les diverses stratégies d’indexation et de dépistage dans de telles conditions, nous pouvons utiliser le rang moyen (Mean Reciprocal Rank ou MRR) de la

During previous years’ TREC campaigns, we developed a query parser that uses the National Library of Medicine’s (NLM) MetaMap tool[7] tool to attempt to identify query terms that

We have applied JIRS, an state-of-the-art PR system for QA, to the GeoCLEF 2006 Monolingual English task. We also have experimented with an approach using both JIRS and Lucene. In

First, we decided to improve our « picking up » module that corrects written mistakes. Let's note that these mistakes are numerous in the news texts. The goal was to avoid silence

Our UIMA type for Opinionated Units representing the Target-Polarity-Cue triplet has pointers to corresponding Targets and Cues from the relevant depen- dency graph, as well as the