SlideShare une entreprise Scribd logo
1  sur  18
La recherche
fulltext :
D’ES à PG
23 juin 2015
- Louise Grandjonc : dev. python - django à Novapost
- PeopleDoc : dématerialisation de document RH
(fiches de paye, factures, contrats etc.)
- Pourquoi et comment sommes nous passés d’une
recherche fulltext utilisant ES à PG?
Introduction
I/ Contexte - La recherche
Le produit : Coffre fort des salariés sur lequel
ils reçoivent leurs fiches de paye
- Historiquement : recherche fulltext avec ES
- Développement d’un nouveau coffre fort… Pas de
remise en cause.
I / Contexte
Côté déploiement…
- Une machine avec ES à configurer
- 7 millions de documents migrés pas
encore indexés
- Les distributions arrivent
- Indexation à la main
… C’est le chaos
II / Les problèmes arrivent
Côté dev…
- Manque de connaissance d’ES Fuzzy sur la
recherche
- Indexation en anglais uniquement (pas d’utilisation
de stopwords pour les autres langues)
… La recherche est mal faite, des documents
manquent, les utilisateurs se plaignent...
II / Les problèmes arrivent
...
L’expérience ES, finalement, pour nous c’était...
On en conclu :
- Processus trop chaotique côté
déploiement
- Développement mal fait par manque de
connaissance
Mais en fait… On a vraiment besoin d’ES?
II/ Les problèmes arrivent
Pourquoi alors ?
- Postgresql déjà utilisé
- Simplification du déploiement
- Un spécialiste à la maison
- Meilleure documentation pour les devs
Comment alors...
III/ PG à la rescousse
Il faut :
- Les tsvectors (type postgresql): une liste de “mots” normalisés (fusion de différentes
versions d’un mots, utilisation de stopwords avec la langue) dans lesquels on va
rechercher.
III/ PG à la rescousse - how to...
SELECT 'a fat cat sat on a mat and ate a fat rat'::tsvector;
tsvector
----------------------------------------------------
'a' 'and' 'ate' 'cat' 'fat' 'mat' 'on' 'rat' 'sat'
SELECT to_tsvector('english', 'The Fat Rats');
to_tsvector
-----------------
'fat':2 'rat':3
Pour les obtenir on utilise la fonction to_tsvector qui prend en argument la langue et la
chaine de caractères.
- Un tsquery : liste des mots normalisés qui sont recherchés, les règles de recherches sont à
définir selon le besoin. Les mots peuvent être reliés grâce à des OR, AND, NOT
III/ PG à la rescousse - how to...
SELECT 'fat & (rat | cat)'::tsquery;
tsquery
---------------------------
'fat' & ( 'rat' | 'cat' )
Fonction plainto_tsquery : permet de prendre une chaîne non formattée en un faire un
tsquery (uniquement en AND).
SELECT plainto_tsquery('english', 'The Fat Rats');
plainto_tsquery
-----------------
'fat' & 'rat'
- Une table document_fulltext
- lookup : tsvector
- doc_id : foreign key
- language : récupéré de la langue de l’utilisateur
Lookup :
III/ PG à la rescousse
setweight(to_tsvector(lang::regconfig, COALESCE(doc.title,
doc.name)::text), 'A') || setweight(to_tsvector(lang::regconfig,
COALESCE(profile, '')), 'C') || ...
- La table remplie et mise à jour grâce à des
triggers
- Indexs par langue :
CREATE INDEX document_fulltext_ts_french_idx ON document_fulltext USING
gin(lookup) WHERE lang='french';
III/ PG à la rescousse
Recherche avec un seul JOIN entre la table
document et document_fulltext
III/ PG à la rescousse
WITH queries AS (
SELECT plainto_tsquery(df.lang::regconfig, 'bulletin
salaire') AS query, df.doc_id
FROM document_fulltext df, document_document d
WHERE df.doc_id = d.id AND d.user_id = 2
)
SELECT d.name, d.title, ts_rank_cd(df.lookup, queries.query) AS
rank
FROM document_document d, document_fulltext df, queries
WHERE df.lookup @@ queries.query AND df.doc_id = queries.doc_id
AND d.id = queries.doc_id;
Avant...
Et le résultat...
Après...
Et le résultat...
- Initialisation de la table simple et rapide via un script
- Plus de tâches d’indexation à gérer grâce aux
triggers
- Développement simple grâce à la collaboration
DBA/dev.
Conclusion
Des questions ?

Contenu connexe

Tendances

Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Jean-Michel Doudoux
 
Introduction à l'analyse de réseaux avec R
Introduction à l'analyse de réseaux avec RIntroduction à l'analyse de réseaux avec R
Introduction à l'analyse de réseaux avec RLaurent Beauguitte
 
Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5halleck45
 
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronesAsyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronestchappui
 
Formation python micro club.net
Formation python micro club.netFormation python micro club.net
Formation python micro club.netZakaria SMAHI
 

Tendances (8)

5 installation de prolog
5 installation de prolog5 installation de prolog
5 installation de prolog
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016
 
Introduction à l'analyse de réseaux avec R
Introduction à l'analyse de réseaux avec RIntroduction à l'analyse de réseaux avec R
Introduction à l'analyse de réseaux avec R
 
Une Introduction à R
Une Introduction à RUne Introduction à R
Une Introduction à R
 
Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5
 
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronesAsyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
 
Implementing a key/value store
Implementing a key/value storeImplementing a key/value store
Implementing a key/value store
 
Formation python micro club.net
Formation python micro club.netFormation python micro club.net
Formation python micro club.net
 

En vedette

Google AMP 1 an après : quel bilan, quelles perspectives ?
Google AMP 1 an après : quel bilan, quelles perspectives ?Google AMP 1 an après : quel bilan, quelles perspectives ?
Google AMP 1 an après : quel bilan, quelles perspectives ?Virginie Clève - largow ☕️
 
CIES 2017 From Access to Equity (2) Outcomes
CIES 2017 From Access to Equity (2) OutcomesCIES 2017 From Access to Equity (2) Outcomes
CIES 2017 From Access to Equity (2) OutcomesRosaleen Cunningham
 
Cies 2017 from access to equity (2) outcomes
Cies 2017 from access to equity (2)   outcomesCies 2017 from access to equity (2)   outcomes
Cies 2017 from access to equity (2) outcomesYoung Lives Oxford
 
La créativité dans la prévention et la résolutuion des conflits - Me B. Sambe...
La créativité dans la prévention et la résolutuion des conflits - Me B. Sambe...La créativité dans la prévention et la résolutuion des conflits - Me B. Sambe...
La créativité dans la prévention et la résolutuion des conflits - Me B. Sambe...Rezonance
 
The Three Sectors of The Construction Industry
The Three Sectors of The Construction IndustryThe Three Sectors of The Construction Industry
The Three Sectors of The Construction IndustryLloyd Claycomb II
 
100 Text Loans, Text Loans
100 Text Loans, Text Loans100 Text Loans, Text Loans
100 Text Loans, Text Loans100Textloans
 
NVM Lensink Gussinklo Makelaardij Presentatie
NVM Lensink Gussinklo Makelaardij PresentatieNVM Lensink Gussinklo Makelaardij Presentatie
NVM Lensink Gussinklo Makelaardij Presentatielensinkgussinklo
 
World Economic Forum, la grande sciocchezza
World Economic Forum, la grande sciocchezzaWorld Economic Forum, la grande sciocchezza
World Economic Forum, la grande sciocchezzaMassimo Mucchetti
 
Introduction to Cross Site Scripting ( XSS )
Introduction to Cross Site Scripting ( XSS )Introduction to Cross Site Scripting ( XSS )
Introduction to Cross Site Scripting ( XSS )Irfad Imtiaz
 
د. فوزية اخضر - تطبيق تجربة مدرسة المستقبل الشاملة - المعرض والمنتدى الدولي ل...
د. فوزية اخضر - تطبيق تجربة مدرسة المستقبل الشاملة - المعرض والمنتدى الدولي ل...د. فوزية اخضر - تطبيق تجربة مدرسة المستقبل الشاملة - المعرض والمنتدى الدولي ل...
د. فوزية اخضر - تطبيق تجربة مدرسة المستقبل الشاملة - المعرض والمنتدى الدولي ل...IEFE
 
Lawyer in Vietnam Oliver Massmann Trans Pacific Partnership Agreement - Ratif...
Lawyer in Vietnam Oliver Massmann Trans Pacific Partnership Agreement - Ratif...Lawyer in Vietnam Oliver Massmann Trans Pacific Partnership Agreement - Ratif...
Lawyer in Vietnam Oliver Massmann Trans Pacific Partnership Agreement - Ratif...Dr. Oliver Massmann
 
Plan Social Media Wawawiwa Design
Plan Social Media Wawawiwa DesignPlan Social Media Wawawiwa Design
Plan Social Media Wawawiwa DesignHumberto Isea
 
Social by Design REMIXED by Geoff Colon
Social by Design REMIXED by Geoff ColonSocial by Design REMIXED by Geoff Colon
Social by Design REMIXED by Geoff ColonGeoffrey Colon
 
Páginas Israelíticas – 3 – Amar las almas y no llorar
Páginas Israelíticas – 3 – Amar las almas y no llorarPáginas Israelíticas – 3 – Amar las almas y no llorar
Páginas Israelíticas – 3 – Amar las almas y no llorarAntonio García Megía
 
Policy Paper ESCENARIOS PROSPECTIVOS DE LA SEGURIDAD EN COLOMBIA FRENTE AL PR...
Policy Paper ESCENARIOS PROSPECTIVOS DE LA SEGURIDAD EN COLOMBIA FRENTE AL PR...Policy Paper ESCENARIOS PROSPECTIVOS DE LA SEGURIDAD EN COLOMBIA FRENTE AL PR...
Policy Paper ESCENARIOS PROSPECTIVOS DE LA SEGURIDAD EN COLOMBIA FRENTE AL PR...John Anzola
 
Tackling complexity in giant systems: approaches from several cloud providers
Tackling complexity in giant systems: approaches from several cloud providersTackling complexity in giant systems: approaches from several cloud providers
Tackling complexity in giant systems: approaches from several cloud providersPatrick Chanezon
 

En vedette (20)

Conf orm - explain
Conf orm - explainConf orm - explain
Conf orm - explain
 
Google AMP 1 an après : quel bilan, quelles perspectives ?
Google AMP 1 an après : quel bilan, quelles perspectives ?Google AMP 1 an après : quel bilan, quelles perspectives ?
Google AMP 1 an après : quel bilan, quelles perspectives ?
 
CIES 2017 From Access to Equity (2) Outcomes
CIES 2017 From Access to Equity (2) OutcomesCIES 2017 From Access to Equity (2) Outcomes
CIES 2017 From Access to Equity (2) Outcomes
 
Cies 2017 from access to equity (2) outcomes
Cies 2017 from access to equity (2)   outcomesCies 2017 from access to equity (2)   outcomes
Cies 2017 from access to equity (2) outcomes
 
La créativité dans la prévention et la résolutuion des conflits - Me B. Sambe...
La créativité dans la prévention et la résolutuion des conflits - Me B. Sambe...La créativité dans la prévention et la résolutuion des conflits - Me B. Sambe...
La créativité dans la prévention et la résolutuion des conflits - Me B. Sambe...
 
The Three Sectors of The Construction Industry
The Three Sectors of The Construction IndustryThe Three Sectors of The Construction Industry
The Three Sectors of The Construction Industry
 
100 Text Loans, Text Loans
100 Text Loans, Text Loans100 Text Loans, Text Loans
100 Text Loans, Text Loans
 
NVM Lensink Gussinklo Makelaardij Presentatie
NVM Lensink Gussinklo Makelaardij PresentatieNVM Lensink Gussinklo Makelaardij Presentatie
NVM Lensink Gussinklo Makelaardij Presentatie
 
World Economic Forum, la grande sciocchezza
World Economic Forum, la grande sciocchezzaWorld Economic Forum, la grande sciocchezza
World Economic Forum, la grande sciocchezza
 
Introduction to Cross Site Scripting ( XSS )
Introduction to Cross Site Scripting ( XSS )Introduction to Cross Site Scripting ( XSS )
Introduction to Cross Site Scripting ( XSS )
 
د. فوزية اخضر - تطبيق تجربة مدرسة المستقبل الشاملة - المعرض والمنتدى الدولي ل...
د. فوزية اخضر - تطبيق تجربة مدرسة المستقبل الشاملة - المعرض والمنتدى الدولي ل...د. فوزية اخضر - تطبيق تجربة مدرسة المستقبل الشاملة - المعرض والمنتدى الدولي ل...
د. فوزية اخضر - تطبيق تجربة مدرسة المستقبل الشاملة - المعرض والمنتدى الدولي ل...
 
Lawyer in Vietnam Oliver Massmann Trans Pacific Partnership Agreement - Ratif...
Lawyer in Vietnam Oliver Massmann Trans Pacific Partnership Agreement - Ratif...Lawyer in Vietnam Oliver Massmann Trans Pacific Partnership Agreement - Ratif...
Lawyer in Vietnam Oliver Massmann Trans Pacific Partnership Agreement - Ratif...
 
Puppetのススメ
PuppetのススメPuppetのススメ
Puppetのススメ
 
Plan Social Media Wawawiwa Design
Plan Social Media Wawawiwa DesignPlan Social Media Wawawiwa Design
Plan Social Media Wawawiwa Design
 
Social by Design REMIXED by Geoff Colon
Social by Design REMIXED by Geoff ColonSocial by Design REMIXED by Geoff Colon
Social by Design REMIXED by Geoff Colon
 
Infoprop (1)
Infoprop (1)Infoprop (1)
Infoprop (1)
 
Páginas Israelíticas – 3 – Amar las almas y no llorar
Páginas Israelíticas – 3 – Amar las almas y no llorarPáginas Israelíticas – 3 – Amar las almas y no llorar
Páginas Israelíticas – 3 – Amar las almas y no llorar
 
Policy Paper ESCENARIOS PROSPECTIVOS DE LA SEGURIDAD EN COLOMBIA FRENTE AL PR...
Policy Paper ESCENARIOS PROSPECTIVOS DE LA SEGURIDAD EN COLOMBIA FRENTE AL PR...Policy Paper ESCENARIOS PROSPECTIVOS DE LA SEGURIDAD EN COLOMBIA FRENTE AL PR...
Policy Paper ESCENARIOS PROSPECTIVOS DE LA SEGURIDAD EN COLOMBIA FRENTE AL PR...
 
Buddhist Temple Dhammakaya Thai
Buddhist Temple Dhammakaya ThaiBuddhist Temple Dhammakaya Thai
Buddhist Temple Dhammakaya Thai
 
Tackling complexity in giant systems: approaches from several cloud providers
Tackling complexity in giant systems: approaches from several cloud providersTackling complexity in giant systems: approaches from several cloud providers
Tackling complexity in giant systems: approaches from several cloud providers
 

Similaire à Meetup pg recherche fulltext ES -> PG

20150402 meetup r addicts du printemps
20150402  meetup r addicts du printemps20150402  meetup r addicts du printemps
20150402 meetup r addicts du printempsduretteb
 
Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...
Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...
Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...Arthur Lutz
 
L\'informatique documentaire à l\'heure du tout web
L\'informatique documentaire à l\'heure du tout webL\'informatique documentaire à l\'heure du tout web
L\'informatique documentaire à l\'heure du tout webNicolas Morin
 
Rust sans (trop) roter du sang — Touraine Tech 2023 — par Édouard Siha & Ale...
Rust sans (trop) roter du sang — Touraine Tech 2023 —  par Édouard Siha & Ale...Rust sans (trop) roter du sang — Touraine Tech 2023 —  par Édouard Siha & Ale...
Rust sans (trop) roter du sang — Touraine Tech 2023 — par Édouard Siha & Ale...Horgix
 
ANALYSE DES TWEETS DE TWITTER.pptx
ANALYSE DES TWEETS DE TWITTER.pptxANALYSE DES TWEETS DE TWITTER.pptx
ANALYSE DES TWEETS DE TWITTER.pptxJeffDekou
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJosé Paumard
 
Traitement des données massives (INF442, A2)
Traitement des données massives (INF442, A2)Traitement des données massives (INF442, A2)
Traitement des données massives (INF442, A2)Frank Nielsen
 
Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...
Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...
Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...ATPENSC-Group
 
Tout ce que vous avez voulu savoir sur les Doublures sans jamais oser le dema...
Tout ce que vous avez voulu savoir sur les Doublures sans jamais oser le dema...Tout ce que vous avez voulu savoir sur les Doublures sans jamais oser le dema...
Tout ce que vous avez voulu savoir sur les Doublures sans jamais oser le dema...Guillaume Saint Etienne
 
Visite guidée au pays de la donnée - Traitement automatique des données
Visite guidée au pays de la donnée - Traitement automatique des donnéesVisite guidée au pays de la donnée - Traitement automatique des données
Visite guidée au pays de la donnée - Traitement automatique des donnéesGautier Poupeau
 

Similaire à Meetup pg recherche fulltext ES -> PG (20)

20150402 meetup r addicts du printemps
20150402  meetup r addicts du printemps20150402  meetup r addicts du printemps
20150402 meetup r addicts du printemps
 
Auto formation *WinDev
Auto formation *WinDev Auto formation *WinDev
Auto formation *WinDev
 
Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...
Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...
Pyconfr2015 : Marre de faire du C++ sur une Arduino ? Faites du Python avec M...
 
L\'informatique documentaire à l\'heure du tout web
L\'informatique documentaire à l\'heure du tout webL\'informatique documentaire à l\'heure du tout web
L\'informatique documentaire à l\'heure du tout web
 
Rust sans (trop) roter du sang — Touraine Tech 2023 — par Édouard Siha & Ale...
Rust sans (trop) roter du sang — Touraine Tech 2023 —  par Édouard Siha & Ale...Rust sans (trop) roter du sang — Touraine Tech 2023 —  par Édouard Siha & Ale...
Rust sans (trop) roter du sang — Touraine Tech 2023 — par Édouard Siha & Ale...
 
C1_AlgoSdd.pdf
C1_AlgoSdd.pdfC1_AlgoSdd.pdf
C1_AlgoSdd.pdf
 
Les algorithmes de tri
Les algorithmes de triLes algorithmes de tri
Les algorithmes de tri
 
ANALYSE DES TWEETS DE TWITTER.pptx
ANALYSE DES TWEETS DE TWITTER.pptxANALYSE DES TWEETS DE TWITTER.pptx
ANALYSE DES TWEETS DE TWITTER.pptx
 
Jade dimax
Jade dimaxJade dimax
Jade dimax
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patterns
 
Traitement des données massives (INF442, A2)
Traitement des données massives (INF442, A2)Traitement des données massives (INF442, A2)
Traitement des données massives (INF442, A2)
 
Hackerspace jan-2013
Hackerspace jan-2013Hackerspace jan-2013
Hackerspace jan-2013
 
MyCv
MyCv MyCv
MyCv
 
Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...
Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...
Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...
 
Tout ce que vous avez voulu savoir sur les Doublures sans jamais oser le dema...
Tout ce que vous avez voulu savoir sur les Doublures sans jamais oser le dema...Tout ce que vous avez voulu savoir sur les Doublures sans jamais oser le dema...
Tout ce que vous avez voulu savoir sur les Doublures sans jamais oser le dema...
 
Cours fichiers
Cours fichiersCours fichiers
Cours fichiers
 
Cours fichiersdiapo
Cours fichiersdiapoCours fichiersdiapo
Cours fichiersdiapo
 
Formation python 3
Formation python 3Formation python 3
Formation python 3
 
iTunes Stats
iTunes StatsiTunes Stats
iTunes Stats
 
Visite guidée au pays de la donnée - Traitement automatique des données
Visite guidée au pays de la donnée - Traitement automatique des donnéesVisite guidée au pays de la donnée - Traitement automatique des données
Visite guidée au pays de la donnée - Traitement automatique des données
 

Plus de Louise Grandjonc

Amazing SQL your django ORM can or can't do
Amazing SQL your django ORM can or can't doAmazing SQL your django ORM can or can't do
Amazing SQL your django ORM can or can't doLouise Grandjonc
 
Becoming a better developer with EXPLAIN
Becoming a better developer with EXPLAINBecoming a better developer with EXPLAIN
Becoming a better developer with EXPLAINLouise Grandjonc
 
The amazing world behind your ORM
The amazing world behind your ORMThe amazing world behind your ORM
The amazing world behind your ORMLouise Grandjonc
 

Plus de Louise Grandjonc (7)

Postgres index types
Postgres index typesPostgres index types
Postgres index types
 
Amazing SQL your django ORM can or can't do
Amazing SQL your django ORM can or can't doAmazing SQL your django ORM can or can't do
Amazing SQL your django ORM can or can't do
 
Croco talk pgconfeu
Croco talk pgconfeuCroco talk pgconfeu
Croco talk pgconfeu
 
Indexes in postgres
Indexes in postgresIndexes in postgres
Indexes in postgres
 
Pg exercices
Pg exercicesPg exercices
Pg exercices
 
Becoming a better developer with EXPLAIN
Becoming a better developer with EXPLAINBecoming a better developer with EXPLAIN
Becoming a better developer with EXPLAIN
 
The amazing world behind your ORM
The amazing world behind your ORMThe amazing world behind your ORM
The amazing world behind your ORM
 

Meetup pg recherche fulltext ES -> PG

  • 1. La recherche fulltext : D’ES à PG 23 juin 2015
  • 2. - Louise Grandjonc : dev. python - django à Novapost - PeopleDoc : dématerialisation de document RH (fiches de paye, factures, contrats etc.) - Pourquoi et comment sommes nous passés d’une recherche fulltext utilisant ES à PG? Introduction
  • 3. I/ Contexte - La recherche Le produit : Coffre fort des salariés sur lequel ils reçoivent leurs fiches de paye
  • 4. - Historiquement : recherche fulltext avec ES - Développement d’un nouveau coffre fort… Pas de remise en cause. I / Contexte
  • 5. Côté déploiement… - Une machine avec ES à configurer - 7 millions de documents migrés pas encore indexés - Les distributions arrivent - Indexation à la main … C’est le chaos II / Les problèmes arrivent
  • 6. Côté dev… - Manque de connaissance d’ES Fuzzy sur la recherche - Indexation en anglais uniquement (pas d’utilisation de stopwords pour les autres langues) … La recherche est mal faite, des documents manquent, les utilisateurs se plaignent... II / Les problèmes arrivent
  • 7. ... L’expérience ES, finalement, pour nous c’était...
  • 8. On en conclu : - Processus trop chaotique côté déploiement - Développement mal fait par manque de connaissance Mais en fait… On a vraiment besoin d’ES? II/ Les problèmes arrivent
  • 9. Pourquoi alors ? - Postgresql déjà utilisé - Simplification du déploiement - Un spécialiste à la maison - Meilleure documentation pour les devs Comment alors... III/ PG à la rescousse
  • 10. Il faut : - Les tsvectors (type postgresql): une liste de “mots” normalisés (fusion de différentes versions d’un mots, utilisation de stopwords avec la langue) dans lesquels on va rechercher. III/ PG à la rescousse - how to... SELECT 'a fat cat sat on a mat and ate a fat rat'::tsvector; tsvector ---------------------------------------------------- 'a' 'and' 'ate' 'cat' 'fat' 'mat' 'on' 'rat' 'sat' SELECT to_tsvector('english', 'The Fat Rats'); to_tsvector ----------------- 'fat':2 'rat':3 Pour les obtenir on utilise la fonction to_tsvector qui prend en argument la langue et la chaine de caractères.
  • 11. - Un tsquery : liste des mots normalisés qui sont recherchés, les règles de recherches sont à définir selon le besoin. Les mots peuvent être reliés grâce à des OR, AND, NOT III/ PG à la rescousse - how to... SELECT 'fat & (rat | cat)'::tsquery; tsquery --------------------------- 'fat' & ( 'rat' | 'cat' ) Fonction plainto_tsquery : permet de prendre une chaîne non formattée en un faire un tsquery (uniquement en AND). SELECT plainto_tsquery('english', 'The Fat Rats'); plainto_tsquery ----------------- 'fat' & 'rat'
  • 12. - Une table document_fulltext - lookup : tsvector - doc_id : foreign key - language : récupéré de la langue de l’utilisateur Lookup : III/ PG à la rescousse setweight(to_tsvector(lang::regconfig, COALESCE(doc.title, doc.name)::text), 'A') || setweight(to_tsvector(lang::regconfig, COALESCE(profile, '')), 'C') || ...
  • 13. - La table remplie et mise à jour grâce à des triggers - Indexs par langue : CREATE INDEX document_fulltext_ts_french_idx ON document_fulltext USING gin(lookup) WHERE lang='french'; III/ PG à la rescousse
  • 14. Recherche avec un seul JOIN entre la table document et document_fulltext III/ PG à la rescousse WITH queries AS ( SELECT plainto_tsquery(df.lang::regconfig, 'bulletin salaire') AS query, df.doc_id FROM document_fulltext df, document_document d WHERE df.doc_id = d.id AND d.user_id = 2 ) SELECT d.name, d.title, ts_rank_cd(df.lookup, queries.query) AS rank FROM document_document d, document_fulltext df, queries WHERE df.lookup @@ queries.query AND df.doc_id = queries.doc_id AND d.id = queries.doc_id;
  • 17. - Initialisation de la table simple et rapide via un script - Plus de tâches d’indexation à gérer grâce aux triggers - Développement simple grâce à la collaboration DBA/dev. Conclusion