est une boîte à outils de moteur de recherche en texte intégral open source, mais ce n'est pas un moteur de recherche en texte intégral complet, mais une architecture de moteur de recherche en texte intégral qui fournit un moteur de requête complet et moteur d'indexation, partie moteur d'analyse de texte (deux langues occidentales, anglais et allemand). L'objectif de Lucene est de fournir aux développeurs de logiciels une boîte à outils simple et facile à utiliser pour implémenter facilement la fonction de recherche en texte intégral dans le système cible, ou pour créer un moteur de recherche en texte intégral complet basé sur celle-ci.
(1) Le format du fichier d'index est indépendant de la plateforme d'application. Lucene définit un ensemble de formats de fichiers d'index basés sur des octets de 8 bits afin que des systèmes ou des applications compatibles sur différentes plates-formes puissent partager les fichiers d'index créés.
(2) Sur la base de l'index inversé du moteur de recherche en texte intégral traditionnel, une indexation par blocs est mise en œuvre, ce qui peut établir de petits index de fichiers pour les nouveaux fichiers et améliorer la vitesse d'indexation. Ensuite, grâce à la fusion avec l'index d'origine, l'objectif d'optimisation est atteint.
(3) L'excellente architecture système orientée objet facilite l'apprentissage des extensions Lucene et facilite l'expansion de nouvelles fonctions.
(4) Conception d'une interface d'analyse de texte indépendante de la langue et du format de fichier. L'indexeur termine la création de fichiers d'index en acceptant le flux de jetons. Les utilisateurs n'ont qu'à implémenter l'interface d'analyse de texte pour développer de nouvelles langues. et les formats de fichiers.
(5) Un ensemble de moteurs de requête puissants a été implémenté par défaut. Les utilisateurs n'ont pas besoin d'écrire leur propre code pour permettre au système d'obtenir de puissantes capacités de requête. L'implémentation de requêtes de Lucene implémente des opérations booléennes et des requêtes floues. par défaut (Fuzzy Search[11]), requête de groupe, etc.
Tout d'abord, vous pouvez jeter un œil à cette photo, qui circule depuis longtemps, à mon avis, c'est le cas. :
A gauche : c'est la collecte de diverses données, telles que en ligne, texte, base de données, etc., et les données collectées sont indexées via Lucene
À droite : c'est l'utilisateur via Certaines recherches, après indexation, sont un processus de retour de résultats
Il est très simple d'importer quelques packages jar et de créer un fichier d'index
Je suis en utilisant la dernière version du package principal 6.6.0 : lucene-core-6.6.0.jar. Vous pouvez le télécharger sur le site officiel http://lucene.apache.org/. Ce package vous suffit pour le tester.
Le fichier d'index est : index. Vous pouvez choisir ce nom de fichier à volonté, car le contenu à l'intérieur est généré automatiquement, c'est-à-dire un répertoire d'index, vous pouvez télécharger l'outil en ligne pour le visualiser. , vous pouvez essayer
Cependant, ce package jar : IKAnalyzer6.5.0.jar est un package d'extension pour le traitement de la segmentation des mots de l'analyseur et prend en charge la segmentation des mots chinois. Ces deux répertoires sont au même niveau que le répertoire src <.>
Sans plus tarder, commençons par le code : Tout d'abord, sur la base de la carte conceptuelle lucene ci-dessus, nous avons besoin pour créer un index en premier. J'ai lancé ces exceptions directement ici. En fait, elles doivent être traitées trop paresseusespublic static void createindex() throws Exception { //创建文件目录 创建在项目目录下的index中 Directory dir=FSDirectory.open(FileSystems.getDefault().getPath(System.getProperty("user.dir")+"/index")); //分词处理 是一个抽象类 一种单字分词,标准的 Analyzer analyzer=new IKAnalyzer(); //创建IndexWriterConfig对象 IndexWriterConfig config=new IndexWriterConfig(analyzer); //创建IndexWriter对象 IndexWriter iWriter=new IndexWriter(dir, config); //清除之前的索引 iWriter.deleteAll(); //创建文档对象 Document doc=new Document(); //向文档中添加文本内容字段,及字段类型 doc.add(new Field("fieldname","坚持到底gl博主的博文,转载请注释出处", TextField.TYPE_STORED)); //将文档添加到indexWriter中,写入索引文件中 iWriter.addDocument(doc); //关闭写入 iWriter.close(); }
public static void search(String string) throws Exception { Directory dir=FSDirectory.open(FileSystems.getDefault().getPath(System.getProperty("user.dir")+"/search")); //打开索引目录的 DirectoryReader dReader=DirectoryReader.open(dir); IndexSearcher searcher=new IndexSearcher(dReader); //第一个参数 field值 ,第二个参数用户需要检索的字符串 Term t=new Term("fieldname",string); //将用户需要索引的字符串封装成lucene能识别的内容 Query query=new TermQuery(t); //查询,最大的返回值10 TopDocs top=searcher.search(query, 10); //命中数,那个字段命中,命中的字段有几个 System.out.println("命中数:"+top.totalHits); //查询返回的doc数组 ScoreDoc[] sDocs= top.scoreDocs; for (ScoreDoc scoreDoc : sDocs) { //输出命中字段内容 System.out.println(searcher.doc(scoreDoc.doc).get(field)); } }
public static void main(String[] args) throws Exception { String chString="坚持到底的文章,转载请注释出处"; Analyzer analyzer=new IKAnalyzer(); TokenStream stream=analyzer.tokenStream("word", chString); stream.reset(); CharTermAttribute cta=stream.addAttribute(CharTermAttribute.class); while (stream.incrementToken()) { System.out.println(cta.toString()); } stream.close(); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!