**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. ====== Indexation 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 : * D'interroger plus rapidement les document déjà indexées * De rechercher avec plus de flexibilité (filtres, tolérance aux fautes, suggestions, etc.). * De tester des requêtes différentes (exemple : "boulangeries artisanales" après avoir indexé toutes les boulangeries). ===== Installation de Meilisearch ===== ''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"}:-) ===== Utilisation : Exemple simple ===== ==== Envoi des données ==== === Avec curl === 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 ! === Avec Postman (conseillée)=== Indexer des documents (titres de livres) : On va créer un index nommé **movies** et y ajouter des documents. - installer Postman - Vérifier que Meilisearch fonctionne : Méthode : **GET**(recherche) URL : http://localhost:7700/health * Attendu : { "status": "available" } - Créer un index (si non existant) : Méthode : **POST**(création) URL : http://localhost:7700/indexes * **Headers** (Key:Value): * **Content-Type**: application/json * **Body (raw->JSON)** : { "uid": "movies", "primaryKey": "id" } - Indexer des documents : Méthode : **POST** URL : http://localhost:7700/indexes/movies/documents **Headers** : **Content-Type**: application/json * **Body (raw->JSON)** : [ { "id": 1, "title": "Inception", "genre": "Sci-Fi" }, { "id": 2, "title": "The Dark Knight", "genre": "Action" } ] - Rechercher des documents contenant "inception" : Méthode : **GET** URL : http://localhost:7700/indexes/movies/search?q=inception ===== Utilisation d'un jeu de données Open Data ===== On va utiliser un jeu de données public contenant du texte. __Quelques sources intéressantes :__ **Livres et œuvres littéraires** * Open Library API → Données de livres (titres, auteurs, sujets). * Projet Gutenberg → Textes de livres libres de droits. **Données gouvernementales** * data.gouv.fr → Documents publics, articles, descriptions. * data.gov → Données ouvertes américaines. **Articles Wikipédia** * Wikidata → Informations structurées de Wikipédia. * Wikipedia Dumps → Extractions de pages. ==== Récupérer les données ==== 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.** ==== Indexer des données dans MeiliSearch ==== On va récupérer ces données et les envoyer dans MeiliSearch en format JSON. 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... $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; ==== Rechercher une entreprise indexée ==== 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. ==== A tester ==== * Ajouter plus de données (augmenter limit=100). * Tester avec d’autres sources (Wikipedia, data.gouv). * Indexer des descriptions et extraits pour la recherche plein texte.