Data Science: Les bases de données NoSQL, l'analyse de texte et l'extraction d'informations de données non structurées font partie intégrante de la data science.
Gestion des données non structurées : Des articles et livres blancs sur la gestion des données non structurées et leur indexation (comme ceux d'Elasticsearch et MongoDB) sont des ressources pour l'architecture de systèmes de gestion de données non structurées.
Elasticsearch : Un moteur de recherche et d'indexation de texte largement utilisé pour indexer des données non structurées, comme des logs ou des contenus textuels.
Plus léger : Meilisearch
L’indexation d’un document est un procédé consistant à le marquer ou à l’associer avec certains types d’information. L’opération facilite ensuite la recherche et la récupération des informations grâce à un moteur de recherche.
La recherche sur MeiliSearch permet :
docker run -p 7700:7700 getmeili/meilisearch
Cela lance MeiliSearch en arrière-plan sur le port 7700.
Tester : curl http://localhost:7700/health
→ {“status”:“available”}
Indexer des documents (titres de livres) : On va créer un index nommé books et y ajouter des documents.
curl -X POST 'http://localhost:7700/indexes/books/documents' -H 'Content-Type:application/json' --data-binary '[{"id":1,"title":"petit prince"},{"id":2,"title":"Le soulier de satin"},{"id":3,"title":"Les Misérables"},{"id":4,"title":"1984"}]'
Puis rechercher un document On va chercher tous les livres contenant “Prince” :
curl -X GET 'http://localhost:7700/indexes/books/search' -H 'Content-Type: application/json' --data-binary '{ "q": "Prince" }'
MeiliSearch retourne les documents correspondants avec une recherche full-text rapide !
Indexer des documents (titres de livres) : On va créer un index nommé movies et y ajouter des documents.
{ "uid": "movies", "primaryKey": "id" }
[ { "id": 1, "title": "Inception", "genre": "Sci-Fi" }, { "id": 2, "title": "The Dark Knight", "genre": "Action" } ]
On va utiliser un jeu de données public contenant du texte.
Quelques sources intéressantes :
Livres et œuvres littéraires
Données gouvernementales
Articles Wikipédia
On va utiliser l'API Recherche d’entreprises de data.gouv.fr : https://www.data.gouv.fr/fr/dataservices/api-recherche-dentreprises/
L’API est accessible via : 🔗 https://recherche-entreprises.api.gouv.fr/
Exemple de requête pour chercher les documents contenant “boulangerie” :
curl -X GET “https://recherche-entreprises.api.gouv.fr/search?q=boulangerie&per_page=5”
Cela retourne une liste d'entreprises avec leurs infos (nom, SIRET, activité, adresse, etc.).
Le faire avec Postman.
On va récupérer ces données et les envoyer dans MeiliSearch en format JSON.
Important: pb entre serveur php vagrant en localhost:2080 ou ip 10.0.2.15 et docker milisearch en localhost:7700 ou ip 172.17.0.2, vérifier le parefeu, les ports…
<?php // 1/Fonction pour récupérer les entreprises depuis l'API Recherche d'entreprises function rechercherEntreprises($query, $limit) { $url = "https://recherche-entreprises.api.gouv.fr/search?q=" . urlencode($query) . "&per_page=" . $limit; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); return json_decode($response, true)['results'] ?? []; } // 2/Fonction pour envoyer les données à MeiliSearch function indexerDansMeiliSearch($data) { $meiliUrl = "http://localhost:7700/indexes/entreprises/documents"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $meiliUrl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); $response = curl_exec($ch); curl_close($ch); return $response; } // 3/Exécution : récupérer et indexer les entreprises $query = "boulangerie"; // Modifier la recherche ici $entreprises = rechercherEntreprises($query, 10); $formattedData = array_map(function ($entreprise) { return [ "id" => $entreprise['siren'], "nom" => $entreprise['nom_entreprise'] ?? "Inconnu", "siret" => $entreprise['siret'] ?? "Inconnu", "activite" => $entreprise['libelle_activite'] ?? "Non renseignée", "adresse" => $entreprise['adresse'] ?? "Inconnue" ]; }, $entreprises); // 4/Envoyer à MeiliSearch $result = indexerDansMeiliSearch($formattedData); echo "Résultat de l'indexation : " . $result;
Après indexation, on peut tester une recherche dans MeiliSearch :
curl -X POST 'http://localhost:7700/indexes/entreprises/search' \ -H 'Content-Type: application/json' \ --data-binary '{ "q": "boulangerie artisanale" }'
Cela retournera les entreprises ou le mot “boulangerie artisanal” apparaît.