Démarrer avec Apache luence support de formation avancé
Démarrer avec Apache luence support de formation avancé
Apache Lucene est une bibliothèque de recherche moderne à code source ouvert, conçue pour fournir des résultats pertinents ainsi que des performances élevées. De plus, Lucene a subi d'importants changements au fil des ans, en tant que projet individuel pour l'une des solutions de recherche leaders disponibles. Lucene est utilisé dans une vaste gamme d'applications, des appareils mobiles aux ordinateurs de bureau, en passant par les solutions à l'échelle Internet. L'évolution de Lucene a parfois été assez dramatique, notamment celle de la version actuelle de Lucene 4.0.
Ce document présente à la fois un aperçu des fonctionnalités de Lucene ainsi que des détails sur son modèle de développement de communauté, son architecture et sa mise en œuvre, y compris la couverture de ses fonctionnalités d’indexation et de scoring.
- INTRODUCTION
Apache Lucene est une bibliothèque de recherche open source basée sur Java qui fournit des interfaces de programmation pour effectuer des tâches de recherche courantes et connexes, telles que l'indexation, l'interrogation, la mise en surbrillance, l'analyse de langage et bien d'autres. Lucene est écrit et géré par un groupe de contributeurs et de committers de Apache Software Foundation (ASF) [1] et est sous licence Apache Software License v2 [2]. Il est construit par une communauté de «volontaires» assez unie (selon ASF, la plupart des contributeurs sont payés pour travailler sur Lucene par leurs employeurs respectifs) en suivant un ensemble de principes connus sous le nom de «Apache Way» [3].
Aujourd’hui, Lucene bénéficie d’une adoption généralisée, alimentant la recherche sur les sites Web, les applications et les appareils les plus populaires, tels que Twitter, Netflix et Instagram [20, 4, 5], ainsi que sur de nombreuses autres applications basées sur la recherche [6]. Lucene a également créé plusieurs services basés sur la recherche, tels que Apache Solr [7], qui fournissent des extensions, une configuration et une infrastructure autour de Lucene, ainsi que des liaisons natives pour des langages de programmation autres que Java. Au moment de la rédaction de ce document, Lucene 4.0 est sur le point d'être publié (il sera probablement publié d'ici à sa publication) et représente une étape importante dans le développement de Lucene en raison d'un certain nombre de nouvelles fonctionnalités et d'amélioration de l'efficacité par rapport à la version précédente. versions précédentes de
Lucene Ce document portera principalement sur Lucene 4.0.
Les principales capacités de Lucene sont centrées sur la création, la maintenance et l’accessibilité de l’index inversé de Lucene [31].
Après avoir passé en revue les antécédents de Lucene dans la section 2 et les travaux connexes dans la section 3, le reste de cet article portera sur les fonctionnalités, l’architecture et la méthodologie de développement open source utilisée dans la construction de Lucene 4.0. Dans la section 4, nous donnerons un aperçu général des fonctionnalités de Lucene. Dans la section 5, nous examinerons
L’architecture et les fonctionnalités de Lucene sont plus détaillées en examinant comment Lucene utilise ses fonctionnalités d’indexation et de requête. La section 6 détaille le modèle de développement open source de Lucene et explique en quoi il contribue directement à la réussite du projet. La section 7 fournira une méta-analyse de la performance de Lucene dans diverses évaluations de recherche telles que TREC, tandis que les sections 8 et 9 complèteront le document en jetant un regard sur l'avenir de Lucene et sur les conclusions pouvant être tirées de ce document, le projet. et la communauté plus large de Lucene.
- ARRIÈRE PLAN
Créé à l'origine en 1997 par Doug Cutting comme moyen d'apprendre
Java [8] et ensuite donné à Apache Software
Foundation (ASF) en 2001 [9], Lucene a publié 32 versions officielles comprenant des versions majeures, mineures et des mises à jour [10, 11]. La plus récente de ces versions, au moment de la rédaction de cette publication, est Lucene 3.6.0.
Depuis ses débuts, Lucene a mis en œuvre un modèle d’espace vectoriel modifié qui prend en charge les modifications incrémentielles de l’indice [12, 19, 37]. Pour l'interrogation, Lucene s'est largement développée à partir de la première version officielle 1.2 d'ASF. Cependant, même de la
Dans sa version 1.2, Lucene prenait en charge divers types de requêtes, notamment: terme sur le terrain avec boosts, caractères génériques, fuzzy (utilisation de Levenshtein
Distance [13]), recherches de proximité et opérateurs booléens (AND, OR, NOT) [14]. Lucene 3.6.0 continue à prendre en charge toutes ces requêtes et les nombreuses autres qui ont été ajoutées tout au long de la vie du projet, notamment les expressions régulières, les phrases complexes, les distances spatiales et les fonctions de scoring arbitraires basées sur les valeurs d'un champ (par exemple: en utilisant un horodatage ou un prix comme facteur de notation) [10]. Pour plus d'informations sur ces fonctionnalités et
Lucene 3 en général, voir [15].
En trois ans de développement, Lucene 4.0 s’appuie sur le travail de nombreux systèmes et idées antérieurs, pas seulement sur Lucene elle-même.
L'autorisation de réaliser des copies numériques ou imprimées de tout ou partie de cette œuvre à des fins personnelles ou pour une utilisation en classe est accordée gratuitement, à condition que les copies ne soient pas réalisées ou distribuées à des fins lucratives ou commerciales, et que les copies portent le présent avis et la mention complète en première page. . Copier autrement, ou republier, publier sur des serveurs ou redistribuer à des listes, nécessite une autorisation spécifique préalable et / ou des frais.
Atelier SIGIR 2012 sur la recherche d'informations en source ouverte.
16 août 2012, Portland, OR USA.
Lucene intègre un certain nombre de nouveaux modèles de calcul de la similarité, qui seront décrits plus tard. D'autres ont également modifié Lucene au cours des années: [16] ont modifié Lucene pour ajouter BM25 et BM25F; [17] ont ajouté “sweet spot similarity” et ILPS à l'université d'Amsterdam a incorporé la modélisation du langage dans Lucene [18]. Lucene inclut également un certain nombre de nouvelles abstractions pour séparer logiquement le format d'index et les structures de données associées (Lucene les appelle Codecs et elles sont théoriquement similaires à Backends [32] de Xapian) depuis la couche de stockage - voir la section API de codec pour plus de détails. .
- TRAVAUX CONNEXES
Il existe aujourd'hui de nombreux moteurs de recherche open source [30] proposant différents jeux de fonctionnalités, caractéristiques de performance et modèles de licence logicielle. Xapian [32] est une bibliothèque IR portable écrite en langage de programmation C ++ qui prend en charge les modèles de récupération probabilistes. Le projet Lemur [33] est une boîte à outils pour la modélisation de langage et la recherche d'informations. La plate-forme IR Terrier [34] est une boîte à outils open source de recherche et d’expérimentation prenant en charge une grande variété de modèles IR.
Gestion de gigaoctets pour Java (MG4J) [35] est un moteur de recherche en texte intégral gratuit conçu pour les collections de documents volumineuses.
- CARACTERISTIQUES LUCENE 4
Lucene 4.0 comprend un certain nombre de fonctionnalités qui peuvent être divisées en quatre catégories principales: analyse du contenu et des requêtes entrants, indexation et stockage, recherche et modules auxiliaires (tout le reste). Les trois premiers éléments contribuent à ce que l’on appelle communément le noyau de Lucene, tandis que le dernier consiste en des bibliothèques de codes qui se sont révélés utiles pour la résolution de problèmes liés à la recherche (par exemple, la mise en évidence des résultats).
4.1 Analyse linguistique
Les fonctions d’analyse de Lucene sont chargées d’enregistrer le contenu sous forme de documents à indexer ou de requêtes à rechercher et de les convertir en une représentation interne appropriée pouvant ensuite être utilisée en fonction des besoins. Au moment de l'indexation, l'analyse crée des jetons qui sont finalement insérés dans l'index inversé de Lucene, tandis qu'au moment de la requête, des jetons sont créés pour aider à former les représentations de requête appropriées. Le processus d’analyse comprend trois tâches qui sont chaînées pour agir sur le contenu entrant: 1) filtrage et normalisation facultatifs des caractères (par exemple, suppression des signes diacritiques), 2) filtrage par jetons, et 3) filtrage par jetons (par exemple, suppression, lemmatisation, suppression des mots vides, n- création de gramme). L’analyse est décrite plus en détail dans la section sur le modèle de document de Lucene ci-dessous.
4.2 Indexation et stockage
Les couches d’indexation et de stockage de Lucene sont composées des fonctions principales suivantes, dont beaucoup seront décrites plus en détail dans la section Architecture et implémentation:
- Indexation de documents définis par l'utilisateur, les documents pouvant être constitués d'un ou plusieurs champs contenant le contenu à traiter et chaque champ pouvant être analysé ou non à l'aide des fonctions d'analyse décrites précédemment.
- Stockage de documents définis par l'utilisateur.
- Indexation sans verrouillage [20]
- Indexation en temps quasi réel permettant de rechercher des documents dès qu’ils ont terminé l’indexation.
- Indexation segmentée avec stratégies de fusion et de fusion enfichables [19]
- Abstractions permettant différentes stratégies pour les structures de données de liste d'entrées / sorties, de stockage et de publication [36]
- Prise en charge transactionnelle des ajouts et des restaurations
- Prise en charge d'une variété de statistiques au niveau des termes, des documents et des corpus permettant une variété de modèles de notation [24].
4.3 Interrogation
En ce qui concerne la recherche, Lucene prend en charge diverses options de requête, ainsi que la possibilité de filtrer, de rechercher des résultats et de trier les résultats, ainsi que de générer des retours de pseudo-pertinence. Pour l'interrogation, Lucene propose plus de 50 types différents de représentations de requête, ainsi que plusieurs analyseurs syntaxiques de requêtes et un framework d'analyse syntaxique pour aider les développeurs à écrire leur propre analyseur syntaxique de requêtes [24]. Plus d'informations sur les capacités de requête seront fournies ultérieurement.
De plus, Lucene 4.0 prend désormais en charge un système de modèle de scoring [24] totalement enfichable qui peut être remplacé par les développeurs.
Il est également livré avec plusieurs modèles prédéfinis tels que le modèle de notation de l’espace vectoriel traditionnel de Lucene, Okapi BM25 [21].
Modélisation du langage [25], basée sur l'information [22] et divergence de l'aléatoire [23].
4.4 Caractéristiques auxiliaires
Les modules auxiliaires de Lucene contiennent diverses fonctionnalités couramment utilisées dans la création d’applications basées sur la recherche. Ces bibliothèques sont constituées de code qui n'est pas considéré comme essentiel au processus d'indexation et de recherche pour tout le monde, mais néanmoins utile pour de nombreuses applications. Ils sont emballés séparément du noyau
Lucene, mais sont publiés en même temps que le noyau et partagent le numéro de version du noyau. Il existe actuellement 13 modules différents et ils incluent du code permettant d'effectuer: la mise en surbrillance des résultats (génération d'extraits), la facettisation, la recherche spatiale, le regroupement de documents par clé (par exemple, regrouper tous les documents avec la même adresse URL de base), le routage de documents (via une -mémoire, index de document unique), recherche spatiale par points et suggestion automatique.
- ARCHITECTURE ET MISE EN ŒUVRE
L’architecture et la mise en œuvre de Lucene ont considérablement évolué et évolué au cours de sa vie. Une grande partie du travail a été consacrée à la convivialité et aux performances, qui se situent souvent dans les domaines de l’efficacité de la mémoire et de la suppression des synchronisations. Dans cette section, nous détaillerons certaines des classes de base de Lucene les plus couramment utilisées, puis nous examinerons comment l’indexation et la recherche sont construites au-dessus de celles-ci. Pour commencer, la figure 1 illustre l'architecture de haut niveau du noyau de Lucene.
5.1 Fondations
Lucene 4 repose sur deux fondements: l’analyse de texte et notre utilisation d’automates à états finis, qui seront tous deux décrits dans les sous-sections ci-dessous.
5.1.1 Analyse de texte
La chaîne d'analyse de texte génère un flux de jetons à partir des données d'entrée dans un champ (Figure 3). Les jetons dans la chaîne d’analyse sont représentés par une collection d’attributs. Outre l'attribut principal «terme» attendu qui contient la valeur du jeton, il peut exister de nombreux autres attributs associés à un jeton, tels que la position du jeton, les décalages de début et de fin, le type de jeton, les données de charge utile arbitraire (un tableau d'octets à stocker). l’index à la position actuelle), des indicateurs de nombre entier et d’autres attributs personnalisés définis par l’application (par exemple, des balises de partie de la parole).
Les chaînes d'analyse sont constituées de filtres de caractères (utiles pour éliminer les signes diacritiques), de jetons (qui sont les sources des flux de jetons) et d'une série de filtres de jetons modifiant le flux de jetons d'origine. Les attributs de jeton personnalisés peuvent être utilisés pour transmettre des bits d'informations par jeton entre les éléments de la chaîne.
Lucene comprend un total de 5 implémentations de filtrage de caractères, 18 stratégies de tokenization et 97 implémentations de filtrage de jetons et couvre 32 langues différentes [24]. Ces flux de jetons remplissant des fonctions spécifiques telles que la création de jetons par modèles, règles et dictionnaires (par exemple, espaces, regex, chinois / japonais / coréen, soins intensifs), filtres de jetons spécialisés pour une indexation efficace des valeurs et des dates numériques (prise en charge de la recherche par plage numérique) ), suppression spécifique de la langue, suppression de mots arrêtés, création de n-grammes de caractères ou de mots, marquage (UIMA), etc. À l’aide de ces blocs de construction existants ou personnalisés, il est possible d’exprimer des pipelines d’analyse de texte très complexes.
5.1.2 Automates à états finis
Lucene 4.0 nécessite beaucoup moins de mémoire principale que les versions précédentes. La partie en mémoire de l'index inversé est implémentée avec un nouveau package de transducteurs à états finis (FST).
Le package FST de Lucene prend en charge la construction temporelle linéaire de l’automate minimal [38], la compression FST [39], les recherches inversées et les automates pondérés. De plus, l'API prend en charge les algèbres de sortie pouvant être connectées. Le traitement des synonymes, l'analyse de texte en japonais, la correction orthographique et la suggestion automatique sont désormais tous basés sur le package d'automates de Lucene, des améliorations supplémentaires étant prévues pour les prochaines versions.
