Premiers pas avec Lucene : Recherche dans l'index
Dans la continuité de l'entrée précédente, qui parlait de l'indexation de données avec Lucene, je vais aujourd'hui parler des
Prenons un petit exemple ; dans l'index que nous avons créé hier, essayons de rechercher les documents dont le
Les différentes étapes à suivre dont les suivantes :
Un petit exemple de code pour concrétiser tout ça :
Les résultats sont automatiquement triés par pertinence. Il est possible de récupérer un "score" représentatif de la pertinence d'un résultat grâce à la méthode
Voici donc un premier et rapide aperçu du mécanisme de requêtes dans des index Lucene. Le système de requête en entier est bien plus complexe, et permet des requêtes beaucoup plus poussées. Je continuerais donc cette série d'articles au fur et à mesure de mes découvertes. En attendant, la documentation officielle de Lucene est très complète.
Query, les objets permettant de faire des requêtes de recherche dans l'index.Prenons un petit exemple ; dans l'index que nous avons créé hier, essayons de rechercher les documents dont le
content contient le mot-clé "Java".Les différentes étapes à suivre dont les suivantes :
- Créer un
IndexReader, un objet capable de lire l'index. - Créer un objet de type
IndexSearcher, un objet capable de faire une recherche dans un index, à travers unIndexReader. - Créer un objet de type
QueryParser. Cet objet va parser la requête passée, et l'interpréter afin de fournir les résultats les plus pertinents. - Parser la requête, nous obtiendrons un objet de type
Query, contenant la requête à exécuter. - Exécuter la requête, qui nous renvera une liste de résultats (sous la forme d'un objet de type
Hits, contenant les résultats. - Itérer sur cette liste, afin d'afficher les résultats de notre recherche.
Un petit exemple de code pour concrétiser tout ça :
IndexReader index = IndexReader.open(INDEX_ROOT);
Searcher searcher = new IndexSearcher(index);
QueryParser parser = new QueryParser("content", new StandardAnalyzer());
Query results = parser.parse("Java");
Hits hits = searcher.search(results);
Iterator<Hit> iterator = hits.iterator();
while (iterator.hasNext()) {
Hit hit = iterator.next();
System.out.println(hit.get("title") + ", by " + hit.get("author"));
}
Les résultats sont automatiquement triés par pertinence. Il est possible de récupérer un "score" représentatif de la pertinence d'un résultat grâce à la méthode
Hit.getScore().Voici donc un premier et rapide aperçu du mécanisme de requêtes dans des index Lucene. Le système de requête en entier est bien plus complexe, et permet des requêtes beaucoup plus poussées. Je continuerais donc cette série d'articles au fur et à mesure de mes découvertes. En attendant, la documentation officielle de Lucene est très complète.