Zend_Search_Lucene
et Lucene Java supportent un langage de requête
puissant.
Il permet de rechercher des termes individuels, des phrases, des ensembles de termes ;
en utilisant des jokers ou des recherches floues ; en combinant des requêtes à l'aide
d'opérateurs booléens et ainsi de suite.
Une description détaillée du langage de requête peut être trouvé dans la documentation du composant Zend_Search_Lucene.
Ci-dessous, des exemples de quelques requêtes types communes et de stratégies.
Exemple 12. Effectuer une requête pour un mot seul
hello
Recherche le mot "hello" à travers les champs de tous les documents.
Champ de recherche par défaut
Note importante ! Lucene Java recherche uniquement dans les champs de "contenu" par
défaut, mais Zend_Search_Lucene
recherche à travers
tous les champs. Ce comportement peut être modifié en utilisant
la méthode Zend_Search_Lucene::setDefaultSearchField($fieldName)
.
Exemple 13. Effectuer une recherche de mots multiples
hello dolly
Recherche deux mots. Les deux mots sont facultatifs, au moins l'un des deux doit être présent dans le résultat
Exemple 14. Mots requis dans une requête
+hello dolly
Recherche deux mots ; "hello" est requis, "dolly" est facultatif.
Exemple 15. Interdire des mots dans les documents recherchés
+hello -dolly
Recherche avec deux mots ; "hello" est requis, 'dolly' est interdit. En d'autres termes, si le document contient "hello", mais contient aussi le mot "dolly", il ne sera pas retourné dans l'ensemble de résultats.
Exemple 16. Rechercher des phrases
"hello dolly"
Recherche de la phrases "hello dolly" ; un document correspond uniquement si la chaine exacte est présente.
Exemple 17. Effectuer des recherches dans des champs en particulier
title:"The Right Way" AND text:go
Recherche la phrase "The Right Way" au sein du champ title et le mot "go" dans la propriété text.
Exemple 18. Effectuer des recherches dans des champs en particulier aussi bien que dans le document complet
title:"The Right Way" AND go
Recherche la phrase "The Right Way" dans la propriété title et le mot "go" dans tous les champs du document.
Exemple 19. Effectuer des recherches dans des champs en particulier aussi bien que dans le document complet (Alternatif)
title:Do it right
Recherche le mot "Do" dans la propriété title et les mots "it" and "right" dans tous les champs ; si l'un d'entre eux correspond, le document correspondra à un résultat de recherche.
Exemple 20. Faire des requêtes avec le joker "?"
te?t
Recherche les mots correspondants au motif "te?t", où "?" est n'importe quel caractère unique.
Exemple 21. Faire des requêtes avec le joker "*"
test*
Recherche les mots correspondants au motif "test*", où "*" est n'importe quelle séquence de 0 caractère ou plus.
Exemple 22. Rechercher une gamme inclusive de termes
mod_date:[20020101 TO 20030101]
Recherche la gamme de termes (inclusif).
Exemple 23. Rechercher une gamme exclusive de termes
title:{Aida to Carmen}
Recherche la gamme de termes (exculsif).
Toutes les requêtes supportées peuvent être construites via
l'API de construction de requêtes de
Zend_Search_Lucene
. De plus l'analyse et la construction de requêtes
peuvent être combinées :
Exemple 26. Combinaison d'analyse et de construction de requêtes
$userQuery = Zend_Search_Lucene_Search_QueryParser::parse($queryStr); $query = new Zend_Search_Lucene_Search_Query_Boolean(); $query->addSubquery($userQuery, true /* required */); $query->addSubquery($constructedQuery, true /* required */);