2009-02-13 6 views
5

Alors pourquoi le premier exemple de recherche ci-dessous ne renvoie aucun résultat? Et toutes les idées sur la façon de modifier le code ci-dessous pour faire des recherches numériques seraient très appréciées.Recherche de nombres avec Zend_Search_Lucene

Créer l'index

$index = new Zend_Search_Lucene('/myindex', true); 
$doc->addField(Zend_Search_Lucene_Field::Text('ssn', '123-12-1234')); 
$doc->addField(Zend_Search_Lucene_Field::Text('cats', 'Fluffy')); 
$index->addDocument($doc); 
$index->commit(); 

Recherche - Aucune

$index = new Zend_Search_Lucene('/myindex', true); 
$results = $index->find('123-12-1234'); 

Recherche - AVEC LES RÉSULTATS

$index = new Zend_Search_Lucene('/myindex', true); 
$results = $index->find('Fluffy'); 

Répondre

2

Ceci est un effet dont Analyzer vous avez choisi.

Je crois que le default Analyzer indexera seulement les termes qui correspondent à/[a-zA-Z] + /. Cela signifie que votre numéro de sécurité sociale n'est pas ajouté à l'index en tant que terme.

Même si vous avez basculé vers le texte + analyseur insensible à la casse numérique, ce que vous voulez ne fonctionnera toujours pas. L'expression pour un terme est/[a-zA-Z0-9] +/cela signifierait que vos termes ajoutés à l'index seraient 12,123,1234.

Si vous avez besoin de 123-12-1234 pour être considéré comme un terme valide, vous devrez probablement étendre Zend_Search_Lucene_Analysis_Analyzer_Common et faire en sorte que 123-12-1234 soit un terme.

Voir http://framework.zend.com/manual/en/zend.search.lucene.extending.html#zend.search.lucene.extending.analysis

Un autre choix est de stocker ssn comme Zend_Search_Lucene_Field :: les mots-clés. Depuis un mot clé n'est pas divisé en termes.

http://framework.zend.com/manual/en/zend.search.lucene.html#zend.search.lucene.index-creation.understanding-field-types

3

D'abord, vous devez changer votre texte analizer d'inclure les numéros

Zend_Search_Lucene_Analysis_Analyzer :: setDefault (nouveau Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum());

Ensuite, pour les champs avec des numéros que vous souhaitez utiliser Zend_Search_Lucene_Field :: Mot au lieu de Zend_Search_Lucene_Field :: Texte ce qui va sauter la création de jetons et enregistre la valeur « tel quel » dans l'index. Ensuite, vous pouvez rechercher par lui. Je ne sais pas comment il se comporte avec les flottants (ne fonctionnera probablement pas pour les flotteurs 3.0 ne va pas correspondre à 3) mais pour les nombres naturels (comme les ids) fonctionne comme un charme.

Questions connexes