Forum Programmation.SQL Implémentation d'un moteur de recherche booléen

Posté par  . Licence CC By‑SA.
Étiquettes :
1
27
août
2016

Bonjour à tous.

J'ai des données (~1000 entrées) dans une table d'une base sqlite pour le moment. Cette table à 13 champs (8 TEXT, 5 INTEGER, certains champs à null pour certaines entrées). J'ai également 2 tables utilisées pour représenter 2 relations n:n entre les entrées de la première table.

Je souhaite créer un moteur de recherche légèrement au dessus du basique qui prendrais des prédicats entrés par l'utilisateur, transformerais ça en requête SQL et afficherai le résultat. Voila le genre de recherche que je voudrais pouvoir faire :

  • champ numérique : test = > < >= <=
  • champ textuel : égalité et sous-chaine
  • opérateur booléen classique AND OR (le AND implicite serait top)
  • un opérateur en lien avec mes tables de relations (i.e. RELATIONR1 id1 ferai une jointure et me sortirai les clés primaires des entrées validant la relation 1 avec l'entrée de clé primaire id1)
  • (un peu moins classique je pense) critères raccourcis, une sorte de préprocesseur qui transformerais certains mot clé en prédicat classique; un exemple fictif serait "mineur" comme raccourci de "age < 18 AND emancipe = 0"

Je souhaite faire une application entièrement exécutée dans le navigateur web donc javascript only (j'utilise sqlite.js).

Mes pistes pour le moment :

  • Ecrire un parser/lexer (avec jison?), hélas je n'y connais pas grand chose mais ça me donnerai l'occasion d'apprendre
  • Me pencher sur les technos noSQL mais je n'y connais pas, j'aime le SQL et mes jointures et je ne sais pas nager dans tout ce bullshit.
  • Utiliser l'outil magique que mes recherches n'ont pas trouvé et que vous aller me donner.
  • Découvrir comment s’appelle vraiment ce que je cherche à faire et retourner lire.
  • # Trouvé !

    Posté par  . Évalué à 1.

    J'ai commencé mes recherches sur les lexer/parser et à jouer avec jison et au moment ou je commençais à m'arracher les cheveux, j'ai trouvé quelque chose qui ressemble furieusement à ce que je cherchais :
    https://gist.github.com/stt/1296753

    Et là, je remarque que ce que j'avais commencé à pondre était pas si loin du but.

    Il me reste à étudier ça et à l'adapter à mes besoins.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.