2009-08-25 6 views
1

J'indexe actuellement une base de données avec lucene. Je pensais stocker l'ID de table dans l'index, mais je ne trouve pas un moyen de récupérer les documents par ce champ. Je suppose que clarifiera davantage la question de pseudo-code:Champ complet de Lucene

document.add("_id", 7, Field.Index.UN_TOKENIZED, Field.Store.YES); 
// How can I query the document with _id=7 
// without getting the document with _id=17 or _id=71? 
+1

Quelle version de l'API Lucene utilisez-vous? Quelle méthode utilisez-vous (Document.add() prend un Fieldable, à partir de Lucene 2.4)? – Avi

+0

J'utilise en fait le port php (fourni par Zend) et je ne savais pas que cela pourrait faire la différence car la syntaxe de la requête devrait être la même. – soulmerge

+0

La syntaxe de la requête est différente. Le principe reste. En tant que port de php, Zend supporte actuellement Lucene 2.3, qui est à deux versions de la version actuelle de Java Lucene. –

Répondre

1

EDIT pour Zend Lucene: Vous aurez besoin d'un champ de type de mots-clés afin qu'il soit recherché. Pour l'indexation, utilisez quelque chose comme:

$doc->addField(Zend_Search_Lucene_Field::Keyword('_id', '7')); 

Pour la recherche, utilisez:

$idTerm = new Zend_Search_Lucene_Index_Term('_id', '7'); 
$idQuery = new Zend_Search_Lucene_Search_Query_Term($idTerm); 
1

Juste pour dire que je viens avec succès mis en œuvre ce mon moteur de recherche Zend Lucene. Cependant, après un certain temps de dépannage, j'ai découvert que le nom du champ et la valeur du champ sont à l'opposé de la manière montrée. Pour corriger l'exemple:

// Fine - no change here 
$doc->addField(Zend_Search_Lucene_Field::Keyword('_id', '7')); 

// Reversed order of parameters 
$idTerm = new Zend_Search_Lucene_Index_Term('7', '_id',); 
$idQuery = new Zend_Search_Lucene_Search_Query_Term($idTerm); 

J'espère que cela aide quelqu'un!