Table des matières
1. Présentez la bibliothèque Lucene
2. Créer un index
3. 执行搜索
4. 使用示例
Maison Java javaDidacticiel Comment effectuer une récupération et une recherche de texte intégral en Java

Comment effectuer une récupération et une recherche de texte intégral en Java

Oct 08, 2023 am 09:31 AM
java编程 (java programming) Recherche en texte intégral (index en texte intégral) recherche

Comment effectuer une récupération et une recherche de texte intégral en Java

Comment effectuer une récupération et une recherche de texte intégral en Java

La récupération et une recherche de texte intégral est une technique permettant de trouver des mots-clés ou des expressions spécifiques dans des données textuelles à grande échelle. Dans les applications qui traitent de grandes quantités de données textuelles, telles que les moteurs de recherche, les systèmes de messagerie et les systèmes de gestion de documents, les fonctions de récupération et de recherche en texte intégral sont très importantes.

En tant que langage de programmation largement utilisé, Java fournit une multitude de bibliothèques et d'outils qui peuvent nous aider à mettre en œuvre des fonctions de récupération et de recherche de texte intégral. Cet article explique comment utiliser la bibliothèque Lucene pour implémenter la récupération et la recherche en texte intégral, et fournit des exemples de code spécifiques.

1. Présentez la bibliothèque Lucene

Tout d'abord, nous devons introduire la bibliothèque Lucene dans le projet. La bibliothèque Lucene peut être introduite dans le projet Maven des manières suivantes :

<dependencies>
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-core</artifactId>
        <version>8.10.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-analyzers-common</artifactId>
        <version>8.10.1</version>
    </dependency>
</dependencies>
Copier après la connexion

2. Créer un index

Avant d'effectuer une recherche en texte intégral, nous devons d'abord créer un index. Cet index contient des informations sur les données textuelles à rechercher afin que nous puissions effectuer des opérations de recherche ultérieures. Ce qui suit est un exemple de code simple pour créer un index :

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

import java.io.IOException;
import java.nio.file.Paths;

public class Indexer {
    private IndexWriter indexWriter;

    public Indexer(String indexDir) throws IOException {
        Directory dir = FSDirectory.open(Paths.get(indexDir));
        Analyzer analyzer = new StandardAnalyzer();
        IndexWriterConfig config = new IndexWriterConfig(analyzer);
        indexWriter = new IndexWriter(dir, config);
    }

    public void close() throws IOException {
        indexWriter.close();
    }

    public void addDocument(String content) throws IOException {
        Document doc = new Document();
        doc.add(new TextField("content", content, Field.Store.YES));
        indexWriter.addDocument(doc);
    }
}
Copier après la connexion

Dans l'exemple de code ci-dessus, nous utilisons IndexWriter pour créer l'index et utilisons TextField pour définir le champ. . Lors de l'ajout de contenu à indexer à l'index, nous devons d'abord créer un objet Document, puis ajouter des champs à l'objet, et enfin appeler la méthode addDocument pour ajouter le < code>Document L'objet est ajouté à l'index. IndexWriter来创建索引,并使用TextField来定义要索引的字段。将要索引的内容添加到索引中时,我们需要先创建一个Document对象,然后将字段添加到该对象中,最后调用addDocument方法将Document对象添加到索引中。

3. 执行搜索

创建完索引后,我们就可以进行搜索操作了。以下是一个简单的搜索示例代码:

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

import java.io.IOException;
import java.nio.file.Paths;

public class Searcher {
    private IndexSearcher indexSearcher;
    private QueryParser queryParser;

    public Searcher(String indexDir) throws IOException {
        Directory dir = FSDirectory.open(Paths.get(indexDir));
        Analyzer analyzer = new StandardAnalyzer();
        IndexReader indexReader = DirectoryReader.open(dir);
        indexSearcher = new IndexSearcher(indexReader);
        queryParser = new QueryParser("content", analyzer);
    }

    public ScoreDoc[] search(String queryString, int numResults) throws Exception {
        Query query = queryParser.parse(queryString);
        TopDocs topDocs = indexSearcher.search(query, numResults);
        return topDocs.scoreDocs;
    }

    public Document getDocument(int docID) throws IOException {
        return indexSearcher.doc(docID);
    }
}
Copier après la connexion

在上面的示例代码中,我们使用IndexSearcher来执行搜索操作。在执行搜索之前,我们需要先创建一个Query对象来表示要搜索的查询,并使用QueryParser来解析查询字符串为Query对象。然后,我们使用IndexSearchersearch方法执行搜索,并返回搜索结果的排名。

4. 使用示例

下面是一个使用全文检索和搜索功能的示例代码:

public class Main {
    public static void main(String[] args) {
        String indexDir = "/path/to/index/dir";
        
        try {
            Indexer indexer = new Indexer(indexDir);
            indexer.addDocument("Hello, world!");
            indexer.addDocument("Java is a programming language.");
            indexer.addDocument("Lucene is a full-text search engine.");
            indexer.close();

            Searcher searcher = new Searcher(indexDir);
            ScoreDoc[] results = searcher.search("Java", 10);
            for (ScoreDoc result : results) {
                Document doc = searcher.getDocument(result.doc);
                System.out.println(doc.getField("content").stringValue());
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Copier après la connexion

在上面的示例代码中,我们首先创建一个Indexer来创建索引,并添加一些文本数据。然后,我们创建一个Searcher

3. Effectuer une recherche

Après avoir créé l'index, nous pouvons effectuer des opérations de recherche. Ce qui suit est un exemple de code de recherche simple : 🎜rrreee🎜Dans l'exemple de code ci-dessus, nous utilisons IndexSearcher pour effectuer l'opération de recherche. Avant d'effectuer une recherche, nous devons créer un objet Query pour représenter la requête à rechercher, et utiliser QueryParser pour analyser la chaîne de requête dans Query objet. Nous utilisons ensuite la méthode search de IndexSearcher pour effectuer la recherche et renvoyer le classement des résultats de la recherche. 🎜🎜4. Exemple d'utilisation🎜🎜Ce qui suit est un exemple de code qui utilise la fonction de récupération et de recherche de texte intégral : 🎜rrreee🎜Dans l'exemple de code ci-dessus, nous créons d'abord un Indexeur pour créer un index. , et ajoutez des données texte. Ensuite, nous créons un Searcher pour effectuer la recherche et imprimer le contenu textuel des résultats de la recherche. 🎜🎜Grâce à l'exemple de code ci-dessus, nous pouvons facilement implémenter des fonctions de récupération et de recherche de texte intégral en Java à l'aide de la bibliothèque Lucene. Grâce à Lucene, nous pouvons trouver efficacement des mots-clés ou des expressions spécifiques dans des données textuelles à grande échelle, améliorant ainsi l'efficacité et les performances des applications de traitement de texte. 🎜

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment effectuer une récupération et une recherche de texte intégral en Java Comment effectuer une récupération et une recherche de texte intégral en Java Oct 08, 2023 am 09:31 AM

Comment effectuer une récupération et une recherche de texte intégral en Java La récupération et une recherche de texte intégral est une technique permettant de trouver des mots-clés ou des expressions spécifiques dans des données textuelles à grande échelle. Dans les applications qui traitent de grandes quantités de données textuelles, telles que les moteurs de recherche, les systèmes de messagerie et les systèmes de gestion de documents, les fonctions de récupération et de recherche en texte intégral sont très importantes. En tant que langage de programmation largement utilisé, Java fournit une multitude de bibliothèques et d'outils qui peuvent nous aider à mettre en œuvre des fonctions de récupération et de recherche de texte intégral. Cet article présentera comment utiliser la bibliothèque Lucene pour implémenter la récupération et la recherche en texte intégral, et fournira un

ChatGPT Java : Comment réaliser une génération et une optimisation intelligentes de code ChatGPT Java : Comment réaliser une génération et une optimisation intelligentes de code Oct 24, 2023 pm 12:18 PM

ChatGPTJava : Comment mettre en œuvre la génération et l'optimisation de code intelligent Introduction : Avec le développement rapide de la technologie de l'intelligence artificielle, la génération et l'optimisation de code intelligent sont devenues des sujets brûlants dans le domaine de la programmation. ChatGPT est un modèle de langage puissant basé sur OpenAI qui permet l'interaction entre le langage naturel et les machines. Cet article expliquera comment utiliser ChatGPT pour implémenter des opérations intelligentes de génération et d'optimisation de code, et fournira quelques exemples de code spécifiques. 1. Génération de code intelligente : utilisez ChatGPT pour créer une génération de code intelligente

Pourquoi devrions-nous suivre les conventions de dénomination Java ? Pourquoi devrions-nous suivre les conventions de dénomination Java ? Sep 19, 2023 pm 01:57 PM

Les conventions de dénomination Java facilitent la compréhension des programmes en les rendant plus faciles à lire. En Java, les noms de classe doivent généralement être des noms, sous forme de titre commençant par une lettre majuscule, la première lettre de chaque mot étant en majuscule. Les noms d'interface doivent généralement être des adjectifs, sous forme de titre, commençant par une lettre majuscule, la première lettre de chaque mot étant en majuscule. Pourquoi devriez-vous suivre les normes de dénomination Java Réduisez les efforts requis pour lire et comprendre le code source. Permet aux révisions de code de se concentrer sur des problèmes plus importants que les normes de syntaxe et de dénomination. Permettez aux outils de révision de la qualité du code de se concentrer principalement sur les problèmes importants plutôt que sur les préférences de syntaxe et de style. Conventions de dénomination pour différents identifiants de type Les noms de packages doivent être tous en minuscules. Exemple packagecom.tutorialspoint;Le nom de l'interface doit être en majuscule

Comment résoudre l'exception de format de données Java (DataFormatException) Comment résoudre l'exception de format de données Java (DataFormatException) Aug 27, 2023 am 10:14 AM

Comment résoudre l'exception de format de données Java (DataFormatException) En programmation Java, nous rencontrons souvent diverses situations anormales. Parmi eux, l'exception de format de données (DataFormatException) est un problème courant mais également très difficile. Cette exception sera levée lorsque les données d'entrée ne peuvent pas répondre aux exigences de format spécifiées. Résoudre cette anomalie nécessite certaines compétences et expériences. Cet article détaille comment résoudre les exceptions de format de données Java et fournit quelques exemples de code.

ChatGPT Java : Comment mettre en œuvre une extraction intelligente d'informations et un traitement structuré ChatGPT Java : Comment mettre en œuvre une extraction intelligente d'informations et un traitement structuré Oct 28, 2023 am 10:00 AM

ChatGPTJava : Comment mettre en œuvre l'extraction intelligente d'informations et le traitement structuré, des exemples de code spécifiques sont nécessaires Introduction : Avec le développement rapide de la technologie de l'intelligence artificielle, l'extraction intelligente d'informations et le traitement structuré jouent un rôle de plus en plus important dans le domaine du traitement des données. Dans cet article, nous présenterons comment utiliser ChatGPTJava pour implémenter des fonctions intelligentes d'extraction d'informations et de traitement structuré, et fournirons des exemples de code spécifiques. 1. Extraction intelligente d'informations L'extraction intelligente d'informations fait référence au processus d'extraction d'informations clés à partir de données non structurées. En Ja

Comment implémenter l'algorithme de tri par base en utilisant Java Comment implémenter l'algorithme de tri par base en utilisant Java Sep 19, 2023 pm 03:39 PM

Comment implémenter un algorithme de tri par base en utilisant Java ? L'algorithme de tri par base est un algorithme de tri non comparatif qui trie les éléments en fonction de leur valeur en bits. Son idée principale est de regrouper les nombres à trier selon les unités, dizaines, centaines et autres chiffres, puis de trier chaque chiffre tour à tour pour finalement obtenir une séquence ordonnée. Ce qui suit présentera en détail comment implémenter l'algorithme de tri par base à l'aide de Java et fournira des exemples de code. Tout d’abord, l’algorithme de tri par base doit préparer un tableau bidimensionnel pour enregistrer les nombres à trier. Le nombre de lignes du tableau est déterminé par le nombre de bits, par exemple

En Java, comment ajouter de nouveaux éléments à un tableau ? En Java, comment ajouter de nouveaux éléments à un tableau ? Jan 03, 2024 pm 03:30 PM

L'ajout de nouveaux éléments à un tableau est une opération courante en Java et peut être réalisée à l'aide de diverses méthodes. Cet article présentera plusieurs méthodes courantes d'ajout d'éléments à un tableau et fournira des exemples de code correspondants. 1. Une manière courante d'utiliser un nouveau tableau consiste à créer un nouveau tableau, à copier les éléments du tableau d'origine dans le nouveau tableau et à ajouter de nouveaux éléments à la fin du nouveau tableau. Les étapes spécifiques sont les suivantes : Créez un nouveau tableau dont la taille est 1 plus grande que le tableau d'origine. C'est parce qu'un nouvel élément est ajouté. Copiez les éléments du tableau d'origine dans le nouveau tableau. Ajouter à la fin du nouveau tableau

Comment implémenter un système d'épicerie Java Switch avec fonction de partage social Comment implémenter un système d'épicerie Java Switch avec fonction de partage social Nov 01, 2023 pm 05:15 PM

Comment mettre en œuvre un système d'épicerie Java Switch avec fonction de partage social Avec le développement de la technologie et la popularité des médias sociaux, de plus en plus de personnes sont habituées à partager leur expérience d'achat et leurs réflexions lors de leurs achats. Afin de répondre aux besoins des utilisateurs, un bon système d'achat doit non seulement effectuer des achats de manière pratique et rapide, mais doit également fournir des fonctions de partage social. Cet article explique comment implémenter un système d'épicerie Java Switch avec fonction de partage social. Tout d’abord, nous devons déterminer les canaux de partage social à mettre en œuvre. Les canaux les plus courants incluent WeChat, Weibo, QQ, etc. En Java, vous pouvez utiliser le troisième

See all articles