GithubHelp home page GithubHelp logo

9moiscroquersearch's Introduction

9moiscroquersearch

Projet de Recherche Optimisée avec Typesense et MySQL

Moteur de recherche

Introduction

Ce projet propose une solution innovante pour l'amélioration des fonctionnalités de recherche dans les applications, en combinant la puissance d'une base de données MySQL avec la rapidité et la flexibilité du moteur de recherche Typesense. Conçu pour offrir une expérience utilisateur améliorée, ce système intègre des technologies avancées pour une récupération rapide et précise des données.

Caractéristiques

Intégration Typesense-MySQL: Synchronisation des données entre MySQL et Typesense pour une recherche optimisée. Infrastructure Dockerisée: Utilisation de Docker pour une mise en place et un déploiement aisés du moteur de recherche Typesense. Automatisation du Processus de Recherche: Scripts pour l'initialisation automatique et la mise à jour des données de recherche dans Typesense. Composants

Docker Compose

Le fichier docker-compose.yml facilite la configuration et le déploiement du service Typesense dans un environnement Docker. Cette approche garantit une configuration consistante et une portabilité accrue.

https://typesense.org/docs/guide/install-typesense.html#docker

version: '3.4'
services:
  typesense:
    image: typesense/typesense:0.25.1
    restart: on-failure
    ports:
      - "8108:8108"
    volumes:
      - ./typesense-data:/data
    command: '--data-dir /data --api-key=<API KEY> --enable-cors'

Dans les deux cas, après avoir créé le docker-compose.yml, vous devez créer le répertoire typesense-data et exécuter le docker-compose.

mkdir $(pwd)/typesense-data

docker-compose up

Python Libraries

pip install -r requirements.txt

Fichiers de configuration

Vous devez modifier le fichier de configuration situé dans .env avec les informations de votre base de données et de votre serveur typesense.

Script d'Initialisation

Le script search_engine_init.py joue un rôle crucial en initialisant le moteur de recherche avec des données pertinentes. Il exporte les données de MySQL, les convertit au format JSONL, et les importe dans Typesense.

Dans search_engine_init.py, vous devez modifier les tables qui seront chargées dans typesense server.

export_table_to_jsonl("recettes")
export_table_to_jsonl("articles")
export_table_to_jsonl("food")
export_table_to_jsonl("questions")
export_table_to_jsonl("recommandations")

Fonctions d'Intégration

functions_db_to_typesense.py contient des fonctions essentielles pour exporter les données de MySQL, inférer les schémas de données, et importer ces données dans Typesense, assurant ainsi une intégration fluide.

  • export_table_to_jsonl() : convertir la table sélectionnée et ses champs au format JSON.
  • create_collection_and_import_data() : Charger la base de données au format JSON dans la structure d’index Typesense.

Flask Server

Utilisation

Pour lancer le server flask, il faut entrer la ligne de commande ci-dessous dans le terminal:

flask --app server.py --debug run

Le server flask permet de configurer des routes (url) qui vont être utilisée:

Structure de réponse SearchCollection:

{
  "recommendations": { # Nom de la table
    "facet_counts": [],
    "found": 1,
    "hits": [
      {
        "document": { # Colonnes de la table
          "description": "Si vous faites votre mayonnaise maison (contient des oeufs crus), consommez cet aliment dans les heures qui suivent sa préparation.\n            Si vous l'achetez en version industrielle, veillez à bien respecter les dates de consommation et consommez-le directement après ouverture.\n            Vous pouvez également essayer notre recette de mayonnaise sans oeuf.",
          "el_id": 20,
          "id": "19",
          "img": "/images/recommandations/autorise_mais.png",
          "status": "autorise_mais",
          "title": "plat_mayo"
        },
        "highlight": { # Highlight extrait exactement la partie du texte où le terme recherché a été trouvé
          "description": {
            "matched_tokens": [
              "recette"
            ], # L'extrait
            "snippet": "pouvez également essayer notre <mark>recette</mark> de mayonnaise sans oeuf."
          }
        },
        "highlights": [ # Highlight extrait exactement la partie du texte où le terme recherché a été trouvé
          {
            "field": "description",
            "matched_tokens": [
              "recette"
            ], # L'extrait
            "snippet": "pouvez également essayer notre <mark>recette</mark> de mayonnaise sans oeuf."
          }
        ], # text_match représente le score
        "text_match": 578730123365187700,
        "text_match_info": {
          "best_field_score": "1108091338752",
          "best_field_weight": 15,
          "fields_matched": 1,
          "score": "578730123365187705",
          "tokens_matched": 1
        }
      }
    ],
    "out_of": 63,
    "page": 1,
    "request_params": {
      "collection_name": "recommendations",
      "per_page": 10,
      "q": "recette kiwi"
    },
    "search_cutoff": false,
    "search_time_ms": 5
  },

Tests

Pour exécuter les tests :

python tests/test.py

Demo

Pour l’exécution de la démonstration suffit d’ouvrir la page ci-dessous dans un navigateur:

demo_html/search.html

Contribution

Les fiers participants sont:

Avec l'aimable participation des formateurs:

Licence

MIT

9moiscroquersearch's People

Contributors

freeconcepteur avatar jhonatancaldeira avatar joachimlombardi avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.