2010-08-10 15 views
3

J'utilise Zend_Search_Lucene pour la recherche en texte intégral d'enregistrements dans plusieurs tables différentes dans mon application. Je viens de mettre en œuvre cette fonctionnalité, et actuellement l'index est construit sur la première utilisation de la fonctionnalité de recherche après le déploiement de l'application. Ce n'est évidemment pas ce que je voudrais dans la production. Je recherche un moyen facile d'effectuer l'indexation dans le cadre de la logique de déploiement de l'application, puis d'effectuer un index incrémental des enregistrements ajoutés/mis à jour une fois toutes les demi-heures environ.Meilleure façon d'effectuer une réindexation en ligne des tables pour la recherche avec Zend_Search_Lucene

À quoi dois-je m'attendre pour mettre cela en œuvre?

Merci pour toute l'aide que vous pourriez être en mesure de fournir.

Répondre

1

Aucun besoin d'indexation en dehors du déploiement. Ici, je suggère une solution.

Créez un répertoire par défaut dans votre application, par exemple searchdata. A l'intérieur, cela crée des chemins séparés vers les différents types de données (disons pour les villes, un dossier comme city_index). Dans le fichier de configuration (de votre application), spécifiez ces chemins. Ecrivez des scripts PHP pour qu'il lise les données de la table et crée l'index. Ces scripts utilisent les chemins de configuration pour créer l'index. Écrire un script maître qui exécutera tous ces scripts.

Sur votre serveur, exécutez ces scripts une fois. Cette recherche va continuer (utilisez les chemins de configuration pour chercher). (Aucune indexation lors de la première recherche)

Si une nouvelle ville a été ajoutée alors dans votre code où vous ajoutez cette ville (fonction modèle) avec la mise à jour DB, mettez à jour l'index également. Optimisez également le fichier d'index, ce qui diminuera le temps de recherche. Cette opération n'est pas fréquente, donc la mise à jour à la volée n'est pas un problème.

+0

J'aime l'idée d'ajouter à l'index à chaque écriture d'enregistrement. Le seul problème est que j'ai certains types d'enregistrements (tels que les commentaires, par exemple) qui peuvent être ajoutés beaucoup plus fréquemment que d'autres, tels que les utilisateurs. Ajouter à l'index et l'optimisation frappe le système de fichiers, donc c'est assez lent. Recommanderiez-vous encore cette approche? – ubermensch