Développement d'applications web, Zend framework, iPhone, Mac os X et Wordpress

Zend Search Lucene : Indexation en temps réél

zend-frameworkNous allons voir dans cet article l’indexation de nos données en temps réél. C’est à dire la mise à jour de notre index à chaque insertion dans notre base de données MySQL.

Une fois que nous avons créer notre index (voir l’article précédent), nous allons insérer nos nouvelles données à chaque fois que nous créons un articles dans le cas d’un blog ou un produit dans le cas d’une boutique en ligne.  Pour cela nous allons ouvrir notre index précédemment créer et ajouter nos données exactement de la même façon que dans le premier artcle concernant Zend Search Lucene.

Le code suivant est dans un contexte MVC et utilise Zend_Application. L’inclusion des classes Zend est donc implicite. Les données reçues viennent d’un formulaire (objet zend form). Voici le code d’une action qui créé un article :

<?php
    public function createAction()
    {
	$request = $this->getRequest();
	$form = new Form_ArticleForm();
	if ($this->getRequest()->isPost())
	{
	    // Récupération des valeurs du formulaire
	    $formData = $this->getRequest()->getPost();

	    if($form->isValid($this->getRequest()->getPost()))
	    {
	    	// Récupération des identifiants de catégorie
		$lesCategories = $formData['idCategorie'];

		// Suppression des id de catégorie de la tableau des valeurs
		unset($formData['idCategorie']);
		unset($formData['submit']);
		unset($formData['MAX_FILE_SIZE']);
		unset($formData['csrf']);

		// Définition de la date de création et de modification
		$formData['dateCreation'] = new Zend_Db_Expr('NOW()');
		$formData['dateModification'] = new Zend_Db_Expr('NOW()');

		// Insertion d'un article dans la BDD
	 	$this->_articles->insert($formData);

	    	// Récupération du dernière ID de la table article
	    	$idArticle = $this->_articles->getDefaultAdapter()->lastInsertId($this->_articles, "id");

	    	// Insertion dans la table articles_catgeories
	    	$tArticlesCategories = new Model_DbTable_ArticlesCategories();

                if(isset($lesCategories) && sizeof($lesCategories) > 0)
	    	{
	    	    foreach ($lesCategories as $categorie)
	    	    {
	    		$tArticlesCategories->insert(array("idArticle" => $idArticle, "idCategorie" => $categorie));
	    	    }
	    	}

                // Ouverture de l'index
                $index = Zend_Search_Lucene::open(BASE_PATH . '/decryptages_index');

                // Création d'un nouveau document Zend Search Lucene
                doc = new Zend_Search_Lucene_Document();
                $doc->addField(Zend_Search_Lucene_Field::Keyword('slug', $actu["slug"]));
		$doc->addField(Zend_Search_Lucene_Field::UnIndexed('id', $actu["id"]));
		$doc->addField(Zend_Search_Lucene_Field::UnIndexed('dateCreation', $actu["dateCreation"]));
		$doc->addField(Zend_Search_Lucene_Field::Text('titre', $actu["titre"]));
		$doc->addField(Zend_Search_Lucene_Field::Text('chapeau', $actu["content"]));
		$doc->addField(Zend_Search_Lucene_Field::UnStored('content', $actu["content"]));
		$doc->addField(Zend_Search_Lucene_Field::Text('categorie', $actu["nom"]));

                // Ajout du document à l'index
                $index->addDocument($doc);
                $index->commit();

                // Optimisation de l'index
                $index->optimize();

                // Redirectionvers l'action index
		return $this->_helper->redirector('index');
	    }
	    else
	    {
	        $this->view->errorMessages = $form->getMessages();
	    	$form->populate($formData);
	    }
	}
	$this->view->form=$form;
	$this->view->placeholder('title')->set('Ajouter un nouvel article');
    }

Un prochain article sur la récupération des données indexées devrait voir le jour cette semaine.

Zend Search Lucene : Création d’un index à partir de données stockées en base de données MySQL

Plugin flash manquant

Articles en relation :

  1. Zend Search Lucene : Création d’un index à partir de données stockées en base de données MySQL
Cet article a été publié dans Zend Framework avec les mots-clefs : , , , , . Bookmarker le permalien. Laisser un commentaire ou faire un trackback : URL de trackback.

Un commentaire

  1. paz
    Le 21 avril 2011 à 10 h 49 min | Permalien

    la suite SVP :) merci pour ces 2 premiers articles limpides !

Laisser un commentaire

Votre e-mail ne sera jamais publié ni communiqué. Les champs obligatoires sont indiqués par *

*
*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

  • Plugin flash manquant