Programmer's Reference Guide
| API de construction de requêtes |
Jeu de caractères
Support UTF-8 et caractères sur un octet
Zend_Search_Lucene utilise l'UTF-8 en interne. Les fichiers d'index stockent des données Unicode dans le "format UTF-8 modifié" de Java. Zend_Search_Lucene supporte totalement ce format, à une exception près. [1]
L'encodage des caractères d'entrée peut être spécifié grâce à l'API de Zend_Search_Lucene. Les données seront converties automatiquement en UTF-8.
Analyseur de texte par défaut
Cependant, l'analyseur de texte par défaut (aussi utilisé par l'analyseur de requête) utilise ctype_alpha().
ctype_alpha() n'est pas compatible UTF-8, donc l'analyseur convertit le texte vers "ASCII//TRANSLIT" avant l'indexation. Le même processus est utilisé de manière transparente lors du requêtage. [2]
Note: L'analyseur par défaut isole les chiffres. Utilisez le parseur "Num" si vous voulez que les chiffres soient considérés comme des mots.
Analyseurs de texte compatibles UTF-8
Zend_Search_Lucene contient aussi des analyseurs compatibles UTF-8 : Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8, Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num, Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive, Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num_CaseInsensitive.
N'importe quel analyseur peut être activé avec un code comme celui-ci:
- Zend_Search_Lucene_Analysis_Analyzer::setDefault(
- new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
Les analyseurs UTF-8 ont été améliorés dans Zend Framework 1.5. Les anciennes versions considéraient les caractères non-ASCII comme des lettres. Les nouveaux analyseurs sont quant à eux plus précis sur ce point.
Ceci pourrait vous obliger à reconstruire votre index afin que vos données et vos requêtes de recherche soient au même format. Des résultats faux peuvent apparaître sinon.
Tous ces analyseurs nécessitent que la libraire PCRE (Perl-compatible regular expressions) soit compilée avec le support d'UTF-8. Ce support d'UTF-8 pour PCRE est activé par défaut dans les sources des libraires PCRE livrées avec PHP, mais si vous avez utilisé des librairies partagées pour la compilation de PHP, alors le support d'UTF-8 peut dépendre de l'OS.
Utilisez ce code pour vérifier si le support d'UTF-8 est assuré pour PCRE :
Les analyseurs UTF-8 insensibles à la casse ont aussi besoin de l'extension » mbstring pour être activés.
Si vous voulez les analyseurs UTF-8 insensibles à la casse, mais que vous n'avez pas mbstring, normalisez alors vos données avant de les indexer ainsi que vos requêtes avant vos recherches, ceci en les tranformant en casse minuscule :
// Indexation
setlocale(LC_CTYPE, 'de_DE.iso-8859-1');
...
Zend_Search_Lucene_Analysis_Analyzer::setDefault(
new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
...
$doc = new Zend_Search_Lucene_Document();
$doc->addField(Zend_Search_Lucene_Field::UnStored(
'contents', strtolower($contents))
);
// champ titre (indexed, unstored)
$doc->addField(Zend_Search_Lucene_Field::UnStored(
'title', strtolower($title))
);
// champ titre (unindexed, stored)
$doc->addField(Zend_Search_Lucene_Field::UnIndexed('_title', $title));
- // Recherche
- ...
- Zend_Search_Lucene_Analysis_Analyzer::setDefault(
- new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
- ...
| API de construction de requêtes |
Select a Version
Languages Available
Components
Search the Manual
Navigation
- Guide de référence du programmeur
- Guide de référence du programmeur
- Guide de référence Zend Framework
- Zend_Search_Lucene
- Vue d'ensemble
- Créer des index
- Chercher dans un index
- Langage de requêtes
- API de construction de requêtes
- Jeu de caractères
- Extensibilité
- Agir avec Lucene Java
- Avancé
- Bonnes pratiques

+ Add A Comment
Please do not report issues via comments; use the ZF Issue Tracker.
If you have a JIRA/Crowd account, we suggest you login first before commenting.