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

Symfony PHP Discussion :

Lucene Fonction Find()


Sujet :

Symfony PHP

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 788
    Par défaut Lucene Fonction Find()
    Bonjour j'ai un problème avec mon moteur de recherche.
    Pour rechercher je fais comme ceci :
    $hits = $this->getLuceneIndex()->find($query);

    Si mon contenu est 'lol' et que je recherche 'lol' il va le trouver.
    Mais si mon contenu est 'Hello world' et que je recherche 'Hello world' il ne va rien trouver du tout!.
    Bref de plus j'aimerai bien que lorsque mon objet est une longue phrase du type
    'Salut je suis un kevin' et si je recherche juste 'Kevin' et bien qu'il trouve!!
    Comment faire??

    merci

  2. #2
    Membre confirmé Avatar de Nimothenicefish
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 190
    Par défaut
    Je te propose autre chose

    Un champ d'autocomplétion avec requête ajax derrière qui va te retourner une ou plusieurs proposition. Je te met ci-dessous un exemple d'utilisation :

    Dans le template editSucess.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php echo input_auto_complete_tag( 'ctms_user_title', $cur_user->getCtmsUserTitle(),
                                        'users/autocomplete_title',
                                        array('autocomplete' => 'on'),
                                        array('use_style'    => true)
                                    );
    ?>
    =>Lorsque l'utilisateur saisi un caractère dans le champ, une requête ajax est lancé faisant appel à l'action autocomplete_title qui va nous retourner les solutions et les faire apparaitre juste en dessous du champ.

    Dans l'action action.class.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    class usersActions extends sfActions
    {
      public function executeIndex($request)
      {
      }
     
      public function executeAutocomplete_title($request)
      {
        $title = $request->getParameter('ctms_user_title');
        $c = new Criteria();
        $c->add(CtmsUserTitlePeer::NAME, '%'.$title.'%', Criteria::LIKE);
        $c->addAscendingOrderByColumn(CtmsUserTitlePeer::NAME);
        $titles = CtmsUserTitlePeer::doSelect($c);
        $ret = '<ul>';
        foreach ($titles as $t)
            $ret .= '<li>'.$t->getName().'</li>';
        $ret .= '</ul>';
        return $this->renderText($ret);
      }
    }
    => Dans l'action je fait tout simplement une requete SQL avec un LIKE, qui nous retournera la(les) solution(s) sous un rendu HTML

    Voilà, j'espère que ça t'aidera

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 788
    Par défaut re
    merci pour ton aide mê si ce n'est pas vraiment ce que je recherche^^!

  4. #4
    Membre confirmé Avatar de Nimothenicefish
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 190
    Par défaut
    Beh pkoi c'est pas trop ce que tu recherche ? :/

    Pour ton moteur de recherche, tes données elles sont stockées où ? :o

    Si elles sont en BDD, als ma solution peut s'appliquer. Il suffit alors de créer un nouveau fichier d'action avec son template où sera afficher les solutions.

    Soit c'est moi qui est pas compris, soit ... ^^

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 788
    Par défaut re
    Oui mes données sont stockés dans la bdd.
    Mais moi par exemple ce n'est pas des petits mots à auto complété, c'est des phrases entières donc bon ...

    Ta technique est bien si tu recherches par exemple un titre de livre ou un auteur car c'est court mais dans mon cas cela ne va pas.
    Merci tout de même

  6. #6
    Membre confirmé Avatar de Nimothenicefish
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 190
    Par défaut
    Ce que tu cherche en faite c'est à partir de quelques mots clés saisis retrouvés la phrase correspondante ?
    Dans mon cas, cela fonctionne même avec des phrases si on le souhaite seulement il faut que ce que l'on saisisse dans le champ correspondant exactement une partie de la phrase et non pas quelques mots présent dans celle-ci..

    Ton cas correspond auquel ? :o

  7. #7
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 788
    Par défaut
    Moi je veux à partir de quelques mots de la phrase retrouver la phrase...
    Il faut recoder une méthode pour cela?
    Car find() ne semble pas faire cela:/

  8. #8
    Membre confirmé Avatar de Nimothenicefish
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 190
    Par défaut
    Je ne connais pas cette méthode find()
    Tu l'a trouvé où dans la doc ?

    A mon avis, c'est à toi de tout coder pour que ta fonction de recherche puisse de renvoyer ce que tu désire ...

  9. #9
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 788
    Par défaut re
    Ok je veux bien la coder mais comment?
    Car tu sais que LUCENE stocke les infos dans des fichiers donc il ne faut pas faire une requête à la base de donnée.


    Merci de ton aide

  10. #10
    Membre confirmé Avatar de Nimothenicefish
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 190
    Par défaut
    Des données ne sont pas dans une BDD mais dans des fichiers ? :o
    Ah ça me rappel ce bon vieux temps a développer sous Windev ^^
    Tu sais au moins comment avoir accès à ses données là ?

  11. #11
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 788
    Par défaut re
    LOOOOOOL
    Bien sur que mes données sont dans mysql... (ou un autre sgbdr peu importe).
    Mais ce que je veux dire c'est que si tu été curieux ( je te fais pas de reproche c'est déjà cool d'essayer de m'aider ) tu aurais remarqué que Lucene stocke ces données pour faire des recherches dans un dossier (data il me semble).

    C'est pour cela qu'on modifie la méthode save du module comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public function save(PropelPDO $con = null)
    {
      // ...
     
      $ret = parent::save($con);
     
      $this->updateLuceneIndex();//Cette ligne sert à renseigner aux fichiers de lucene les index... C'est dans ces fichiers que seront  fait les recherches!
     
      return $ret;
    }
    Donc en gros la méthode find de Lucene fait les recherches dans les fichiers propres à Lucene et non dans la database!

  12. #12
    Membre confirmé Avatar de Nimothenicefish
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 190
    Par défaut
    Ah d'accord je comprend mieux ..

    Beh ma fois je suis curieux, sauf que là je suis en entreprise donc sans compte le faite que j'ai essayer de t'aider (histoire en plus de faire une pause si on peut dire ), j'ai pas eu le temps de faire des recherches sur Lucene

    Cela dit, ça m'a l'air plutôt intéressant à exploiter

    Merci pour cette petite explication

  13. #13
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 788
    Par défaut re
    Bien à toi, bonne continuation.
    Et pour moi UP , on sait jamais^^!

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 66
    Par défaut
    J'avoue ne pas avoir expérimenté moi même lucene,alors si mes hypothèses sont fausses, peut-être que tu devrais poster dans le forum ZF

    http://framework.zend.com/manual/en/...-language.html

    Pour ton exemple avec Kevin :

    apriori il te suffit d'utiliser *kevin* ?

    Pour ton exemple avec une phrase ( hello world ) :
    Toujours dans le lien plus haut :
    A Phrase is a group of words surrounded by double quotes such as "hello dolly".

  15. #15
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 788
    Par défaut re
    Oui je vois sa, merci pour le lien.
    Mais pour le faire automatiquement sans mettre les ** ?
    Je peux faire une méthode qui ajoute cela au début et à la fin de ma chaîne avant de traiter avec find?


    Merci

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 66
    Par défaut
    tu fais les questions et les reponses
    Je peux faire une méthode qui ajoute cela au début et à la fin de ma chaîne avant de traiter avec find?

Discussions similaires

  1. Utilisation de la fonction find
    Par ylabarre dans le forum VBA Outlook
    Réponses: 0
    Dernier message: 29/08/2007, 16h02
  2. [C++ .NET] Comment utiliser fonction Find ?
    Par thecrax dans le forum Framework .NET
    Réponses: 3
    Dernier message: 17/08/2006, 09h02
  3. [VBA-E]Problème avec la fonction Find
    Par Mirx1 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 27/04/2006, 18h43
  4. [VBA-E]Fonction .find
    Par marie10 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 16/01/2006, 11h03
  5. [VBA-E] Fonction "FIND"
    Par cinc dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/09/2005, 11h16

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