Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 10-12-2009 18:21:03

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

[Zend_Search_Lucene] Résultat affichant la phrase contenant le mot clé

Bonjour, depuis quelque temps, vous l'aurez remarqué, je travail à créer un module de recherche dans un site web.

Et bien bonne nouvelle, j'ai réussis à le faire fonctionner même s'il est un peu lourd (plusieurs secondes pour la recherche) Merci à Nicol@s pour l'aide.

Lorsque j'affiche les résultats, je peux récupéré le titre de la page contenant le mot, l'url et les metas donnés. Ce que je cherche à faire, c'est également de pouvoir récupéré la phrase (extrait) qui contient le mot comme le site suivant:

Site Zend et module de recherche:

http://www.rockdetente.com/montreal/rec … 36&y=3

Donc, afficher le mot clé recherche et le contenu qui l'entoure. Quelle serait donc la meilleure solution de procéder pour être viable puisque chercher et récupéré le mot clé à travers le contenu d'un site web complet peut être très lourd comme charge de travail au serveur.

Merci de vos solutions et commentaires

Hors ligne

 

#2 10-12-2009 19:12:39

nicol@s
Membre
Lieu: Nantes
Date d'inscription: 22-06-2009
Messages: 18
Site web

Re: [Zend_Search_Lucene] Résultat affichant la phrase contenant le mot clé

Salut,

Pour ton problème de lenteur quel est la taille de ton index de recherche (nb de docs indexés et taille sur le disque) ? car je travaille avec un index (~10 MO) de plus de 50.000 docs et selon les requêtes j'obtiens des réponses en moins de 0.5 sec.

Celà peut venir du fait que tu indexes des champs de type Zend_Search_Lucene_Field::Text avec beaucoup de contenu (par exemple tout le contenu d'une page web), si c'est le cas, ça n'a d'intérêt que si tu veux récupérer ce contenu à partir d'un résultat de recherche, sinon utilise des champs Zend_Search_Lucene_Field::UnStored tu peux chercher sur les mots contenus mais le texte complet n'est pas stocké.

Ou encore c'est peut être le type de requête que tu utilises (wildcard?) ou juste un serveur sous taillé (le process de recherche est assez gourmand en mémoire).

Solution 1 : si tu utilises un champ Zend_Search_Lucene_Field::Text pour ton contenu, tu peux récupérer les mots qui entourent ta recherche à partir du résultat de recherche :

Code:

$recherche = "ma recherche";
$hits = $index->find($requete);
foreach ($hits as $hit) {
    $contenu = $hit->contenu;
    $pos = strpos($contenu, $recherche);
    // récupérer les mots avant et après l'indice $pos
}

Solution 2 : sinon, il te faut récupérer ton texte en bdd, s'il y est stocké, donc ajouter une clé primaire de ta bdd dans ton document Lucene, puis charger l'objet à partir de cette id, puis enfin... jouer avec des fonctions string pour récupérer les mots qui entoure ta recherche.

A+
Nicolas

PS: attention, selon le type de requêtes que tu construis tu peux retourner des résultats où les termes de recherche ne sont pas juxtaposés dans un champ de document, ou encore des résultats ou l'un des termes est dans un champ (par exemple 'titre') et les autres termes dans un autre champ (par exemple 'contenu').

Dernière modification par nicol@s (10-12-2009 19:20:42)

Hors ligne

 

#3 22-04-2014 13:20:51

adouma01
Nouveau membre
Date d'inscription: 22-04-2014
Messages: 1

Re: [Zend_Search_Lucene] Résultat affichant la phrase contenant le mot clé

Bonjour,

j'ai un souci pour affichacher les resultats de recherche par critére

voici le code de mon controller :
<?php

class Default_RechercheavanceeController extends Zend_Controller_Action
{

    public function init()
    {
        /* Initialize action controller here */
       
       
    }
public function indexAction()
{
}
    public function avanceAction()
    {
        $etat_article = new Default_Model_EtatarticleMapper();
        $this->view->aEtat_articles = $etat_article->fetchAll();
       

  $mode_payement  = new Default_Model_ModepayementMapper();
        $this->view->aMode_payements  = $mode_payement->fetchAll();

           
     
           $sous_categorie = new Default_Model_SouscategorieMapper();
        $this->view->aSous_categories= $sous_categorie->fetchAll();

         $type_vente = new Default_Model_TypeventeMapper();
         //var_dump($type_vente->fetchAll());exit();
        $this->view->aType_ventes= $type_vente->fetchAll();

       
       
       
     

        $request = $this->getRequest();

        $form = new Default_Form_Rechercheavance();

        if ($this->getRequest()->isPost()) {
            if ($form->isValid($request->getPost())) {
                                return $this->_helper->redirector('/recherche');
                               //return $this->_helper->redirector('rechercheavancee/recherche');
            }
                    }

        $this->view->form = $form;

    }

public function rechercheAction()
{       
    $annonce = new Default_Model_AnnonceMapper();
    $request = $this->getRequest();
    $form = new Default_Form_Rechercheavance();

     if ($this->getRequest()->isPost()) {
     //getRequest() peut être utilisé pour récupérer l'objet de requête utilisé pour appeler l'action.
            if ($form->isValid($request->getPost())) {
            $tab = $request->getPost();
           
            //var_dump($tab["Dateinsertion"]); exit();
            //var_dump($tab["prix"]); exit();
            //var_dump($tab["Mot_cle"]); exit();
            //$this->view->resultat= $annonce->search($tab["cp"]);
        $this->view->resultat= $annonce->search($tab["Mot_cle"],$tab["prix"],$tab["Designation_etat_art"],$tab["designation_mp"],$tab["designation_sous_categorie"],$tab["designation_type_vente"],$tab["Ville"],$tab["Cp"]);
            var_dump($this->resultat);
        //var_dump(foreach());
   

   
}}}
}
t en gros je voudrais afficher mes résultats sous forme de tableau avec donc un code dans mon .phtml dans le style :
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Page d'accueil</title>

       <link rel="stylesheet" href="../css/style.css" type="text/css" media="screen, projection">

</head>

<body>


<div id="corps_depann">
    <article>
   
      
       <section>
        <div id="section_depann">
           <h1>Recherche avanc&eacute;e </h1>
               <div id="form_depann">
                        <div id="form_tete_depann">
                          <h2>Crit&eacute;re de recherche</h2>
                       </div>
                       <div id="form_corps_depann">
                        
                         <form action="" method="POST" id="">
                            <table>
                            <?php foreach ($this->resultat as $annonce):  ?>
                            <tr>

                                <tr><td><h2>Mot cl&eacute;:</h2></td><td><?php  echo $this-> escape ($annonce ['Mot_cle']);?></td></tr>
                                <tr><td><h2>Prix:</h2></td><td><?php echo $this-> escape ($annonce ['prix']);?></td></tr>
                                <tr><td><h2>Etat de l'article:</h2></td><td><?php echo $this-> escape ($annonce ['Designation_etat_art']);?><td></tr>
                                <tr><td><h2>Condition de paiement:</h2></td><td><?php echo $this-> escape ($annonce ['designation_mp']);?></td></tr>

                                <tr><td><h2>Sous_categorie:</h2></td><td><?php echo $this-> escape ($annonce ['designation_sous_categorie']);?></td></tr>
                                <tr><td><h2>Type de vente:</h2></td><td><?php echo $this-> escape ($annonce ['designation_type_vente']);?></td></tr>
                                <tr><td><h2>Ville:</h2></td><td><?php echo $this-> escape ($annonce ['Ville']);?></td></tr>
                           
                                <tr><td><h2>Code postal:</h2></td><td><?php echo $this-> escape ($annonce ['Cp']);?></td></tr>
                                <tr><td><h2>Date insertion:</h2></td><td><?php echo $this-> escape ($annonce ['Dateinsertion']);?></td></tr></td></tr>
                                <tr><td><h2>Distance géographique:</h2></td><td><?php echo $this-> escape ($annonce ['Distancegeographique']);?></td></tr>
                                <tr><td></td>
                            
                                   </div>
                                </td></tr>
                                </tr>
                            <?php endforeach ?>
                               
                            </table>
                         </form>
                        
                       </div>
                     
                       
                      
                  </div>
       
         </div>
       </section>
 
    </article>

   
</div>

</body>


mais si je fais ca voici le message d'erreur que ca me met :

Critére de recherche
Warning: Invalid argument supplied for foreach() in /prod/proannonce/v1/application/modules/default/views/scripts/rechercheavancee/recherche.phtml on line 29
aide moi si il vous plait

Dernière modification par adouma01 (22-04-2014 13:21:21)

Hors ligne

 

#4 12-02-2015 12:01:48

Lodia
Nouveau membre
Date d'inscription: 12-02-2015
Messages: 1

Re: [Zend_Search_Lucene] Résultat affichant la phrase contenant le mot clé

Bonjour adouma01,

je voudrais savoir si vous avez eu une solution sur ce post, en effet je suis confronté à un problème similaire.
Je dois faire une recherche multicritères sur plusieurs tables de ma base de données en ZF2, je voudrais que vous savoir comment le faire.

Merci par avance et bonne journée,

Cordialement,

Lodia

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages