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

Requêtes MySQL Discussion :

Full text et recherche d'expression


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Full text et recherche d'expression
    Bonjour,

    Je débute dans la recherche fulltext, et a priori ca a l'air de fonctionner de mon coté. Pas de problème particulier.
    Par contre je voulais savoir si il y a un moyen d'effectuer une recherche d'expression. Je ne trouve pas de mention de ca dans la documentation.
    Par exemple si je recherche 'ministre Lemieux' a date ca me sort tous les ministres et tous les lemieux, mais pas seulement tous les ministre lemieux.

    Est ce possible ? Sinon d'après vous le meilleur moyen d'y arriver ?
    Sachant que la table contient a date près de 3000 records.

    Merci d'avance.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Personne n'a d'idée ou je ne suis pas clair ?
    Salut,

    Juste un petit up. Et si par hasard je n'étais pas assez clair n'hésitez pas

    Merci encore

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Salut,

    Normalement, la recherche fulltext classe les enreg trouvé par odre de pertinence, donc en premier, tu doit avoir les enreg ou y'a ministre et lemieux le plus possible, puis les enreg avec ministre et lemieux juste 1 fois, puis soit ministre, soit lemieux.

    Je trouve que c'est assez la classe, utile et suffisant pour la plupart des cas.


    Moi j'avais une autre question, désolé de la poster ici, mais ca pourra peut etre te servir:

    c'est quand je cherche en fulltext le mot "carre" (carré), il me sort tout les carré, mais pas les "carrée" au féminin, et ca, c'est grave chiant ! Je ne sais pas comment faire, j'ai cherché, mais rien.

    Merci

    A+

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 739
    Points
    11 739
    Par défaut
    Citation Envoyé par kangt Voir le message
    Par exemple si je recherche 'ministre Lemieux' a date ca me sort tous les ministres et tous les lemieux, mais pas seulement tous les ministre lemieux.
    Tu as trois solutions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    -- Solution FULLTEXT en BOOLEAN MODE :
    SELECT...
    WHERE MATCH(colonne) AGAINST('"ministre Lemieux"' IN BOOLEAN MODE)
    -- '" est une apostrophe (simple quote) suivie d'un guillemet (double quote)
    -- "' est évidemment le contraire
     
    -- Solution LIKE :
    SELECT...
    WHERE colonne LIKE '%ministre Lemieux%'
     
    -- Solution REGEXP
    SELECT...
    WHERE colonne REGEXP '[[:<:]]ministre Lemieux[[:>:]]'

  5. #5
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 739
    Points
    11 739
    Par défaut
    Citation Envoyé par dangerous.sly Voir le message
    c'est quand je cherche en fulltext le mot "carre" (carré), il me sort tout les carré, mais pas les "carrée" au féminin, et ca, c'est grave chiant ! Je ne sais pas comment faire, j'ai cherché, mais rien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ... WHERE MATCH(colonne) AGAINST('carre carree carres carrees') ;
     
    ... WHERE MATCH(colonne) AGAINST('carre*' IN BOOLEAN MODE) ;

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Antoun Voir le message
    Tu as trois solutions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    -- Solution FULLTEXT en BOOLEAN MODE :
    SELECT...
    WHERE MATCH(colonne) AGAINST('"ministre Lemieux"' IN BOOLEAN MODE)
    -- '" est une apostrophe (simple quote) suivie d'un guillemet (double quote)
    -- "' est évidemment le contraire
    certes...
    moi j'ai un probleme pour les quotes..
    par exemple, si je veux chercher l'expression "guerre d'algerie", pas moyen de faire marcher le moteur, il trouve rien
    j'ai tenté
    1 '\"guerre d\'algerie\"' -> il trouve rien
    2 "guerre d\'algerie\" -> il me fait un OU sur les deux termes
    3 '"guerre d\'algerie"' -> il trouve rien
    je pensai que le mieux etait la requete suivante mais il ne trouve rien (ici, votre oeil averti remarquera que j'ai doublequoté dans ma base tous les quotes pour que le moteur de mysql decoupe les mots convenablement, par exemple, dans ma base, d'algerie est stocké comme d''algerie, ce qui permet de trouver le document quand on cherche algerie).

    une idée pour la recherche d'expression contenant un quote?



    SELECT * ,
    MATCH (
    Id, Titre, LegendeImage,
    TYPE , Transcription, Generique, Forme, Genre, Resume, Locuteurs, Personnes, Lieux, Themes, ContexteHistorique, ContexteMedia, ProducteurDiffuseur
    )
    AGAINST (
    '"guerre d\'\'algerie"'
    IN BOOLEAN
    MODE
    ) AS Pertinence
    FROM documents
    WHERE MATCH (
    Id, Titre, LegendeImage,
    TYPE , Transcription, Generique, Forme, Genre, Resume, Locuteurs, Personnes, Lieux, Themes, ContexteHistorique, ContexteMedia, ProducteurDiffuseur
    )
    AGAINST (
    '"guerre d\'\'algerie"'
    IN BOOLEAN
    MODE
    )
    GROUP BY Id
    ORDER BY Pertinence DESC
    LIMIT 0 , 30

  7. #7
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 739
    Points
    11 739
    Par défaut
    Chez moi cela fonctionne sans pb. Je pense que tes données sont mal saisies.

    Voici mon test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    create table documents (titre varchar(255)) engine myisam;
    create fulltext index ft_titre on documents(titre) ;
    insert into documents values ('La guerre d''Algerie') ;
    insert into documents values ('La guerre du Kippour') ;
     
    select *
    from documents
    where Match(titre) against('"guerre d''Algerie"' in boolean mode) ;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche Full Text
    Par fadeninev dans le forum SQLite
    Réponses: 1
    Dernier message: 20/10/2006, 11h21
  2. [recherche FULL TEXT ]
    Par viny dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 20/09/2006, 18h08
  3. [MySQL] Recherche FULL TEXT IN BOOLEAN MODE et les Quotes
    Par GarGamel55 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 23/01/2006, 21h01
  4. [Info]moteur de recherche full text en environnement j2ee
    Par ddams dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 03/11/2004, 20h39
  5. Recherche FULL Text existe que dans MySql ?
    Par seb.49 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 01/06/2004, 23h30

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