IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Firebird Discussion :

Moteur de recherche dans fichiers


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    230
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 230
    Par défaut Moteur de recherche dans fichiers
    Bonjour,

    J'étudie la possibilité de proposer un moteur de recherche dans mon application (FB3 + Delphi Berlin). Je ne sais pas vraiment pas où et comment commencer cet outil. Je ne sais même pas si je peux proposer cet outil (à cause du délai de dev).

    Mon application doit permettre la recherche de mots clefs dans des fichiers (txt ou Word) contenus dans la BDD.

    Lors de l'insertion de ces fichiers, je pense scanner le fichier et indexer tous les mots de ce fichier. Voilà dans l'idée mais dans la pratique je suis perdu :
    - Comment faire l'indexation ? Comment architecturer ma (mes) table contenant la recherche ?
    - Est-il "malin" d'indexer tous les mots des fichiers ?

    Merci pour vos retours.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 598
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    si j'ai bien compris le fichier est contenu dans un Blob dans la BDD ? disons table FICHIERS(ID BIGINT NOT NULL,CONTENU BLOB SUB_TYPE TEXT)
    pour faire une recherche à l'intérieur d'un blob, depuis FB 2.0 on peut le faire avec CONTAINING
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ID FROM FICHIERS WHERE CONTENU CONTAINING 'ce que je cherche'
    équivalent de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LIKE '%ce que je cherche%'
    et il y a aussi la fonction SIMILAR TO plus "expression régulière" pour faire des recherches

    bien évidemment ce sera lent.

    D'autres se sont déjà posé la question ici ou là, cette faq http://www.firebirdfaq.org/faq328/ peut, peut-être, t'aider

    je te conseille de lire le papier de la conférence (dernier lien de cette FAQ) qui est même proposé avec un exe+source D7

  3. #3
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 884
    Par défaut
    Salut à tous.

    Sous MySql, nous avons le "Full Text Search" qui permet d'indexer tous les mots contenues dans plusieurs colonnes.
    C'est bien plus rapide que le classique "like", qui lui indexe la chaîne de caractères.
    Sauf que j'ignore totalement si cette approche existe aujourd'hui dans FireBird.
    Et faire un traitement pour récolter tous les mots n'est pas aussi facile à faire que cela.
    Ce qui nécessite à chaque modification d'une colonne de recréer l'index.

    @+

  4. #4
    Membre confirmé
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    230
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 230
    Par défaut
    Salut,

    Merci pour vos réponses.

    si j'ai bien compris le fichier est contenu dans un Blob dans la BDD ? disons table FICHIERS(ID BIGINT NOT NULL,CONTENU BLOB SUB_TYPE TEXT)
    Pour l'instant rien n'a été développé (phase d'étude) mais cela devrait ressemblait à ta description.

    D'autres se sont déjà posé la question ici ou là, cette faq http://www.firebirdfaq.org/faq328/ peut, peut-être, t'aider
    je te conseille de lire le papier de la conférence (dernier lien de cette FAQ) qui est même proposé avec un exe+source D7
    En parcourant ces liens, il existe des solutions dont Sphinx qui semble être la plus puissante et la plus à jour. Je vais étudier cette solution.

    Sous MySql, nous avons le "Full Text Search" qui permet d'indexer tous les mots contenues dans plusieurs colonnes.
    Sais-tu si cette fonctionnalité est performante? Pas prévu de passer sous MySql pour ce projet mais je suis curieux.

    Merci

  5. #5
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 884
    Par défaut
    Salut lefju cabro.

    Citation Envoyé par lefju cabro
    Sais-tu si cette fonctionnalité est performante? Pas prévu de passer sous MySql pour ce projet mais je suis curieux.
    Je ne te conseille pas de passer sous MySql. J'aime bien FireBird qui a quelques fonctionnalités en plus que ne possède pas MySql.
    Mais bon, il y a aussi des manques qui peuvent être contournés.

    Pour le FTS sous MySql, pour l'avoir utilisé, oui c'est performant par rapport au classique "like".
    Le passage disons du "like" au FTS, consiste a découper mot par mot un texte et ensuite d'indexer chaque mot.
    L'index FTS n'est pas un index classique et nécessite donc des fonctionnalités que ne possède pas aujourd'hui FireBird.

    @+

  6. #6
    Membre confirmé
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    230
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 230
    Par défaut Recherche fichier Word
    Bonjour,

    Des outils comme Sphinx permettent du "Full Text Search" mais uniquement pour les fichiers textes.

    Existe-t-il une méthode pour faire une recherche de mots clefs dans des BLOB contenant des fichiers Word ? Faut-il passer par l'indexation des mots du fichier Word lors de l'import de celui-ci dans la base ? Si oui ça se fait facilement ?

    Merci

    Lefju

  7. #7
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 884
    Par défaut
    Salut lefju cabro.

    Citation Envoyé par lefju cabro
    Existe-t-il une méthode pour faire une recherche de mots clefs dans des BLOB contenant des fichiers Word ?
    Le BLOB (= binary large object) est une structure binaire.
    Cela sert pour mettre des images, entre autre.
    Pourquoi mettre du texte dans une structure binaire ?
    Utilisez plutôt les types "varchar" ou "text".

    Citation Envoyé par lefju cabro
    Faut-il passer par l'indexation des mots du fichier Word lors de l'import de celui-ci dans la base ?
    Normalement, vous devez définir des colonnes contenant vos textes.
    Vous ne devez pas faire de découpage car c'est l'index de type FTS qui va réaliser ce travail.
    La déclarative FTS va se faire sur les colonnes que vous désirez indexer.
    Tout ce que vous avez à faire, c'est déclarer la requête qui va effectuer la recherche de vos mots.

    Citation Envoyé par lefju cabro
    Si oui ça se fait facilement ?
    Sous FireBird, je ne sais pas répondre à cela car je ne l'ai jamais utilisé.
    Sous MySql, c'est assez simple à mettre en oeuvre.

    @+

  8. #8
    Membre confirmé
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    230
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 230
    Par défaut
    Salut Artemus24,

    Merci pour ton message.

    Le BLOB (= binary large object) est une structure binaire.
    Cela sert pour mettre des images, entre autre.
    Pourquoi mettre du texte dans une structure binaire ?
    Utilisez plutôt les types "varchar" ou "text".
    J'utilise les BLOB pour insérer des fichiers texte (*.txt). J'aimerai également y insérer des fichiers Word (*.docx).


    Normalement, vous devez définir des colonnes contenant vos textes.
    Vous ne devez pas faire de découpage car c'est l'index de type FTS qui va réaliser ce travail.
    La déclarative FTS va se faire sur les colonnes que vous désirez indexer.
    Tout ce que vous avez à faire, c'est déclarer la requête qui va effectuer la recherche de vos mots.
    Sauf erreur de ma part les outils FTS comme Sphinx fonctionne uniquement sur de la donnée texte; donc pas possible sur des fichiers Word.

    Pour contourner cela je stocke mes fichiers Word au format xml (ou html) dans la base comme cela le FTS pourra effectuer des recherches.

    A+

    Lefju

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 598
    Billets dans le blog
    65
    Par défaut
    Bonjour,
    Citation Envoyé par lefju cabro Voir le message
    J'utilise les BLOB pour insérer des fichiers texte (*.txt). J'aimerai également y insérer des fichiers Word (*.docx).
    Pour contourner cela je stocke mes fichiers Word au format xml (ou html) dans la base comme cela le FTS pourra effectuer des recherches.
    Je vais peut être dire une bêtise mais il me semble que docx est un fichier au format xml. Si Sphinx fonctionne sur un XML alors pas de soucis

    Sauf erreur de ma part les outils FTS comme Sphinx fonctionne uniquement sur de la donnée texte
    de la donnée texte c.a.d. un BLOB de SUB TYPE TEXT, AMHA pour un .docx cela ne devrait pas poser de problème, du moins c'est ainsi que je le comprend.

    Citation Envoyé par Artemus24
    Le BLOB (= binary large object) est une structure binaire.
    Cela sert pour mettre des images, entre autre.
    Pourquoi mettre du texte dans une structure binaire ?
    Firebird (et Interbase) distingue deux types de BLOB : les binaires mais aussi les Blobs text, à la différence d'une colonne VARCHAR de taille limitée le "firebird blob sub_type text" est un bon moyen de stocker des fichiers texte, html, xml ... en bref tous les fichiers pouvant être ouvert par un éditeur de texte standard

  10. #10
    Membre confirmé
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    230
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 230
    Par défaut
    Bonjour SergioMaster,

    Je vais peut être dire une bêtise mais il me semble que docx est un fichier au format xml. Si Sphinx fonctionne sur un XML alors pas de soucis
    Je n'utilise pas (encore) Sphinx mais effectivement il fonctionne sur le XML. Mais je pense que mon fichier DOCX inséré dans mon BLOB est binaire donc Sphinx ne pourra pas le traiter. Ca tient la route ce que je raconte ?

    Sauf erreur de ma part les outils FTS comme Sphinx fonctionne uniquement sur de la donnée texte
    de la donnée texte c.a.d. un BLOB de SUB TYPE TEXT, AMHA pour un .docx cela ne devrait pas poser de problème, du moins c'est ainsi que je le comprend.
    Dans ma bdd j'ai inséré des fichiers docx dans des blobs binaire mais une requête simple sur ce blob (select * from fiche_client where binary_2 CONTAINING 'test1') me retourne vide. Je ne sais pas si Sphinx fera mieux.
    J'ai le même résultat avec des blob subtext.


    Firebird (et Interbase) distingue deux types de BLOB : les binaires mais aussi les Blobs text, à la différence d'une colonne VARCHAR de taille limitée le "firebird blob sub_type text" est un bon moyen de stocker des fichiers texte, html, xml ... en bref tous les fichiers pouvant être ouvert par un éditeur de texte standard
    Actuellement j'utilise certainement des BLOB Binaire (définition dans la table: monChamps BLOB) et non pas Texte, cela serait mieux dans mon cas

    Des infos sur les différentes type de BLOB sous FB ici.

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 598
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    méa culpa, docx est un format propriétaire Microsoft OpenXML (ils sont gonflés d'utiliser le mot Open !) en fait un XML mais compressé !
    Du coup cela implique un blob binaire effectivement !

    Mais sachant cela il doit être possible de créer une UDF permettant d'analyser le contenu de document.xml de ce docx.
    (je me suis "amusé" à ouvrir un docx avec 7z pour découvrir cela)

    A mon avis c'est réalisable

Discussions similaires

  1. [JSP/SERVLET] Moteur de recherche dans fichiers PDF
    Par crewstyle dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 27/04/2007, 16h18
  2. Moteur de recherche dans PDF
    Par jhice dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 09/05/2006, 14h58
  3. recherche dans fichier xml
    Par piro dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/03/2006, 08h11
  4. Réponses: 4
    Dernier message: 28/10/2005, 09h59
  5. Recherche dans fichiers
    Par Tchinkatchuk dans le forum Linux
    Réponses: 2
    Dernier message: 17/06/2005, 10h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo