Skip to main content
Close Search
  • Menu
uh!iveuh!iveuh!iveuh!iveuh!iveuh!ive
search
Menu
  • Solutions

    Profitez de notre API de Speech-to-Text la plus précise et sécurisée du marché, avec une précision de 95 %, offrant une transcription en temps réel et sur des fichiers audio avec une faible latence.

    Découvrir

    Renforcez la relation client en mesurant l’Expérience Relationnelle : analysez les compétences relationnelles pour fidéliser, identifiez les parcours émotionnels, et prédisez le NPS sans sollicitation directe.

    Découvrir

    Reliez vos leads téléphoniques aux campagnes marketing :
    réduisez les coûts, automatisez la qualification et le scoring, personnalisez l’expérience et optimisez en temps réel.

    Découvrir
  • Ressources
    • Websocket Documentation
    • MRCP Documentation
  • Entreprise
    • Expertise
  • À propos
    • L’histoire de uhlive
  • Blog
  • Statut
  • Démo
  • FR
    • EN
  • search
Tech

Cas d’utilisation d’Elasticsearch Percolator pour la classification de documents

By Utilisateur Uh!iveNo Comments

Actuellement chez Allo-Media, nous utilisons Elasticsearch dans son flux de travail général, qui consiste à créer un index et à stocker des documents contenant les métadonnées des transcriptions audio des appels téléphoniques, puis à permettre de rechercher à travers ces documents en fonction de certains critères commerciaux tels que : « Donnez-moi tous les appels téléphoniques du client Acme, où le client parle de la grève en France ».

La fonctionnalité de percolateur d’Elasticsearch permet de faire une recherche inversée. Nous stockons les requêtes de recherche sous forme de documents dans leur propre index, puis nous pouvons faire percoler de nouveaux documents d’appel et récupérer les requêtes de recherche correspondantes. Un cas d’utilisation pour utiliser le percolateur est la classification des documents.

Par exemple, supposons que nous voulions étiqueter avec « Chèque envoyé » tous les documents mentionnant que l’utilisateur a déjà envoyé un chèque bancaire. Nous aurions la requête de recherche suivante :

Python
("J'ai envoyé" | "J'ai déjà envoyé") ("chèque")

Donc d’abord, nous devons créer un index pour stocker les requêtes de recherche avec le mappage suivant :

Python
PUT /search-perco<br>{<br>"mappings": {<br>"_doc": {<br>"properties": {<br>"tag_uuid": {<br>"type": "text"<br>},<br>"tag_name": {<br>"type": "text"<br>},<br>"content": {<br>"type": "text"<br>},<br>"query": {<br>"type": "percolator"<br>}<br>}<br>}<br>}<br>}
  • Les champs tag_* sont utilisés pour la classification des documents.
  • Le champ query de type percolator est utilisé pour indexer les documents de la requête de recherche, en stockant un DSL de requête en JSON.
  • Le champ contenu est utilisé pour prétraiter les documents percolés.

Une fois l’index créé, nous pouvons maintenant stocker nos documents de requête de recherche, comme celui-ci :

Python
PUT /search-perco/_doc/1?refresh<br>{<br>"query": {<br>"bool": {<br>"must": [<br>{<br>"simple_query_string": {<br>"query": "("J'ai envoyé" | "J'ai déjà envoyé") ("chèque")",<br>"fields": [<br>"content"<br>],<br>"default_operator": "and"<br>}<br>}<br>]<br>}<br>},<br>"tag_uuid": "2f86ad85-4c09-4ef3-bb6e-100d129018e9",<br>"tag_name": "Chèque envoyé"<br>}

Et si nous recherchons dans cet index, nous récupérerons notre document de requête de recherche nouvellement ajouté :

Rust
GET search-perco/_search<br>{<br>"query": {"match_all": {}}<br>}

Maintenant, il est temps de faire percoler les documents d’appel via la requête de percolation :

Python
GET /search-perco/_search
{
"_source": [
"tag_uuid",
"tag_name"
],
"query": {
"percolate": {
"field": "query",
"documents": [{
"unique_id": "2f86ad85-4c09-4ef3-bb6e-100d129018e7",
"timestamp": "2018-01-02T18:13:30+00:00",
"duration": 322,
"transcribed": true,
"client_name": "Acme",
"content": "J'ai déjà envoyé un chèque la semaine dernière…"
}]
}
},
"highlight": {
"fields": {
"content": {}
}
}
}

Elasticsearch fournit la réponse suivante :

Python
{<br>"took": 37,<br>"timed_out": false,<br>"_shards": {<br>"total": 5,<br>"successful": 5,<br>"skipped": 0,<br>"failed": 0<br>},<br>"hits": {<br>"total": 1,<br>"max_score": 0.8630463,<br>"hits": [<br>{<br>"_index": "search-perco",<br>"_type": "_doc",<br>"_id": "1",<br>"_score": 0.8630463,<br>"_source": {<br>"tag_name": "Chèque envoyé",<br>"tag_uuid": "2f86ad85-4c09-4ef3-bb6e-100d129018e9"<br>},<br>"fields": {<br>"_percolator_document_slot": [<br>0<br>]<br>},<br>"highlight": {<br>"content": [<br>"<em>J'ai déjà envoyé</em> un chèque la semaine dernière…"<br>]<br>}<br>}<br>]<br>}<br>}

Donc ici, nous voyons que notre document d’appel correspond à la requête de recherche étiquetée « Chèque envoyé ». Nous pouvons utiliser le surligneur pour mettre en évidence les termes qui ont correspondu aux documents de requête de recherche. Le champ « _percolator_document_slot » est utile lorsque nous envoyons plusieurs documents au champ « documents » de la requête de percolation. Et « max_score » et « _score » vous donnent le score de pertinence des documents correspondants. Vous pouvez désactiver le calcul du score lors de l’utilisation de la requête de percolation en utilisant un contexte de filtre.

Nous pouvons également faire percoler des documents existants en fournissant l’index où ils sont stockés et leurs identifiants :

Python
GET /search-perco/_search<br>{<br>"query" : {<br>"percolate" : {<br>"field": "query",<br>"index" : "call-index",<br>"id" : "2"<br>}<br>}<br>}

Vous devriez vous soucier d’optimiser l’analyse de texte lors du temps de percolation comme suggéré par la documentation Optimisation du percolateur.

Documentation Elasticsearch:

Percolate query
ElasticSearch Percolator

Tags:

Allo-Mediabusiness criteriadocument classificationdocumentsElasticsearchindexpercolator featurephone call audio transcripts metadatareverse searchsearchsearch queriesworkflow
  • Previous PostUne architecture pilotée par les événements

  • Next PostComposants avec état dans ELM

Related Posts

Tech Une architecture pilotée par les événements – Partie 3

Une architecture pilotée par les événements – Partie 3

Dans ce nouveau billet, nous allons parler de la mise en œuvre concrète des principes fondamentaux de l'architecture événementielle. Topologie La topologie décrit la manière dont le bus est mis…
Utilisateur Uh!ive
Utilisateur Uh!ive26 septembre 2022
Tech Une architecture pilotée par les événements – Partie 2

Une architecture pilotée par les événements – Partie 2

Dans le poste précédent de cette série, nous avons expliqué pourquoi nous avons abandonné notre ancienne architecture basée sur des services REST synchrones pour une architecture événementielle totalement asynchrone. Aujourd'hui, nous abordons…
Utilisateur Uh!ive
Utilisateur Uh!ive2 février 2022
Tech Une architecture pilotée par les événements

Une architecture pilotée par les événements

Chez Allo-Media, comme beaucoup d'autres entreprises, notre chaîne de valeur ressemble à un pipeline : nous collectons les conversations (principalement par téléphone) que nous envoient nos clients, nous les transcrivons, nous…
Utilisateur Uh!ive
Utilisateur Uh!ive17 février 2020
Share
Share Share Share Pin

Solutions

Speech-to-Text

PRX™

Vocal Cookie™

Ressources

Websocket Documentation

MRCP Documentation

Branding Kit

Entreprise

Expertise

À propos

L’histoire d’uh!ive

Mentions Légales

Blog
Statut
Démo
Contact
  • x-twitter
  • facebook
  • linkedin
  • youtube
  • instagram

© 2025 uh!ive.

Close Menu
  • Solutions
  • Ressources
    • Websocket Documentation
    • MRCP Documentation
  • Entreprise
    • Expertise
  • À propos
    • L’histoire de uhlive
  • Blog
  • Statut
  • Démo
  • FR
    • EN
  • twitter
  • x-twitter
  • facebook
  • linkedin
  • youtube
  • instagram
Gérer le consentement
Pour offrir les meilleures expériences, nous utilisons des technologies telles que les cookies pour stocker et/ou accéder aux informations des appareils. Le fait de consentir à ces technologies nous permettra de traiter des données telles que le comportement de navigation ou les ID uniques sur ce site. Le fait de ne pas consentir ou de retirer son consentement peut avoir un effet négatif sur certaines caractéristiques et fonctions.
Fonctionnel Toujours activé
L’accès ou le stockage technique est strictement nécessaire dans la finalité d’intérêt légitime de permettre l’utilisation d’un service spécifique explicitement demandé par l’abonné ou l’utilisateur, ou dans le seul but d’effectuer la transmission d’une communication sur un réseau de communications électroniques.
Préférences
L’accès ou le stockage technique est nécessaire dans la finalité d’intérêt légitime de stocker des préférences qui ne sont pas demandées par l’abonné ou l’internaute.
Statistiques
Le stockage ou l’accès technique qui est utilisé exclusivement à des fins statistiques. Le stockage ou l’accès technique qui est utilisé exclusivement dans des finalités statistiques anonymes. En l’absence d’une assignation à comparaître, d’une conformité volontaire de la part de votre fournisseur d’accès à internet ou d’enregistrements supplémentaires provenant d’une tierce partie, les informations stockées ou extraites à cette seule fin ne peuvent généralement pas être utilisées pour vous identifier.
Marketing
L’accès ou le stockage technique est nécessaire pour créer des profils d’internautes afin d’envoyer des publicités, ou pour suivre l’utilisateur sur un site web ou sur plusieurs sites web ayant des finalités marketing similaires.
  • Gérer les options
  • Gérer les services
  • Gérer {vendor_count} fournisseurs
  • En savoir plus sur ces finalités
Voir les préférences
  • {title}
  • {title}
  • {title}