Come implementare la ricerca full‑text java con GroupDocs.Search

In era delle applicazioni guidate dai dati, java full text search è essenziale per trasformare enormi collezioni di documenti in basi di conoscenza ricercabili istantaneamente. Che tu stia costruendo un portale di livello enterprise o un’utilità desktop leggera, una rete di ricerca ben configurata può ridurre la latenza delle query da secondi a millisecondi e mantenere i risultati pertinenti man mano che i dati crescono. Questo tutorial ti guida nell’implementazione di GroupDocs.Search for Java, nell’aggiunta di file da indicizzare, nella configurazione delle directory sui nodi e nell’abilitazione dell’indicizzazione in tempo reale affinché il tuo indice rimanga aggiornato senza interventi manuali.

Perché è importante: Un indice java full text search riduce la latenza delle query, scala con il volume dei dati e porta potenti capacità full‑text a qualsiasi soluzione basata su Java — portali web, app desktop o microservizi cloud.

Risposte rapide

  • Qual è lo scopo principale di GroupDocs.Search? Fornisce un motore di ricerca java scalabile che indicizza e ricerca documenti attraverso una rete distribuita.
  • Quale versione dovrei usare? L’ultima versione stabile (ad es., 25.4) è consigliata per nuovi progetti.
  • Ho bisogno di una licenza? È disponibile una prova gratuita di 30 giorni; è necessaria una licenza permanente per l’uso in produzione.
  • Posso aggiungere sia file che intere directory? Sì – usa gli helper addFiles e addDirectories per ingerire i contenuti.
  • Quale versione di Java è richiesta? Java 8 o superiore, con Maven per la gestione delle dipendenze.
  • Come funziona l’indicizzazione in tempo reale java? Sottoscrivendo gli eventi del nodo è possibile attivare il re‑indicizzazione automatico quando i file cambiano.

Cos’è “create searchable index java”?

Creare un indice ricercabile in Java significa costruire una struttura dati che mappa i termini ai documenti che li contengono, consentendo query full‑text rapide. GroupDocs.Search for Java astrae il lavoro pesante, permettendoti di concentrarti sull’alimentazione dei documenti e sulla messa a punto del comportamento di ricerca.

Perché usare GroupDocs.Search per Java?

GroupDocs.Search fornisce un motore di ricerca java che scala orizzontalmente, supporta oltre 50 formati di input e output, e offre indicizzazione guidata dagli eventi. Distribuire più nodi distribuisce il carico di indicizzazione, mentre i controlli di integrità integrati mantengono la rete affidabile. Fornisce inoltre API RESTful e analizzatori personalizzabili per una rilevanza finemente ottimizzata.

Prerequisiti

  • JDK 8+ installato sulla tua macchina di sviluppo.
  • Un IDE come IntelliJ IDEA o Eclipse.
  • Conoscenza di base di Java e Maven.
  • Accesso alla libreria GroupDocs.Search for Java (download o Maven).

Configurazione di GroupDocs.Search per Java

Dipendenza Maven

Aggiungi il repository e la dipendenza al tuo pom.xml:

<repositories>
   <repository>
      <id>repository.groupdocs.com</id>
      <name>GroupDocs Repository</name>
      <url>https://releases.groupdocs.com/search/java/</url>
   </repository>
</repositories>

<dependencies>
   <dependency>
      <groupId>com.groupdocs</groupId>
      <artifactId>groupdocs-search</artifactId>
      <version>25.4</version>
   </dependency>
</dependencies>

Suggerimento: Mantieni il numero di versione aggiornato controllando la pagina ufficiale delle release.

Puoi anche scaricare il JAR direttamente dal sito ufficiale: GroupDocs.Search for Java releases.

Acquisizione della licenza

  • Prova gratuita: valutazione di 30 giorni.
  • Licenza temporanea: Richiedi per test estesi.
  • Acquisto: Richiesto per le distribuzioni in produzione.

Inizializzazione di base

Crea un oggetto di configurazione che punta a una cartella dove verranno memorizzati i file dell’indice e definisce la porta di comunicazione di base:

import com.groupdocs.search.Configuration;

class InitializeSearch {
    public static void main(String[] args) {
        String basePath = "your/base/path";
        int basePort = 8080;
        
        Configuration config = new ConfiguringSearchNetwork().configure(basePath, basePort);
        // Use this configuration for subsequent operations
    }
}

Come creare un indice ricercabile java con GroupDocs.Search?

Carica un oggetto SearchConfiguration, avvia un SearchNetworkNode e chiama node.getIndexer().addFiles(...) per popolare l’indice. Questo modello a una riga avvia una rete di ricerca full‑text java completamente funzionale, pronta ad accettare query immediatamente. Puoi quindi scalare aggiungendo più nodi che condividono lo stesso percorso base e intervallo di porte.

Funzionalità 1 – configurazione e impostazione della rete

La classe SearchConfiguration contiene tutte le impostazioni necessarie per avviare un nodo.

import com.groupdocs.search.Configuration;
import com.groupdocs.search.scaling.*;

class ConfiguringSearchNetwork {
    public static Configuration configure(String basePath, int basePort) {
        // Configure the search network with specified base path and port
        return new Configuration(basePath, basePort);
    }
}
  • basePath – Directory dove verranno persistiti i dati dell’indice.
  • basePort – Porta di partenza; ogni nodo incrementerà a partire da questo valore.

Funzionalità 2 – distribuzione dei nodi della rete di ricerca

SearchNetworkNode rappresenta un servizio di indicizzazione individuale che può essere eseguito su qualsiasi macchina.

import com.groupdocs.search.scaling.*;

class SearchNetworkDeployment {
    public static SearchNetworkNode[] deploy(String basePath, int basePort, Configuration configuration) {
        // Deploy nodes based on the provided configuration
        return new SearchNetworkNode[]{new SearchNetworkNode()};
    }
}

SearchNetworkNode è il componente runtime principale che ospita un indice, elabora eventi di aggiunta/rimozione e risponde alle query di ricerca. Distribuire più nodi ti consente di creare cluster java full text search che scalano orizzontalmente.

Funzionalità 3 – sottoscrizione agli eventi del nodo

Gli aggiornamenti in tempo reale mantengono l’indice sincronizzato con le modifiche del file system.

import com.groupdocs.search.scaling.*;

class SearchNetworkNodeEvents {
    public static void subscribe(SearchNetworkNode node) {
        // Logic to subscribe to the specified node's events
    }
}

Ascoltando gli eventi, puoi attivare automaticamente il re‑indicizzazione quando arrivano nuovi file, ottenendo indicizzazione guidata dagli eventi senza script manuali.

Funzionalità 4 – aggiunta di directory al nodo di rete

Usa questo helper per aggiungere directory al nodo, raccogliendo ricorsivamente tutti i documenti supportati.

import java.io.File;
import java.util.ArrayList;

class DirectoryAdder {
    public static void addDirectories(SearchNetworkNode node, String... directoryPaths) {
        ArrayList<String> files = new ArrayList<>();
        for (String directoryPath : directoryPaths) {
            final File folder = new File(directoryPath);
            listFiles(folder, files);
        }
        addFiles(node, files.toArray(new String[0]));
    }

    private static void listFiles(final File folder, ArrayList<String> list) {
        for (final File fileEntry : folder.listFiles()) {
            if (fileEntry.isDirectory()) {
                listFiles(fileEntry, list);
            } else {
                list.add(fileEntry.getPath());
            }
        }
    }
}

Funzionalità 5 – aggiunta di file al nodo di rete

Quando hai bisogno di un controllo fine, aggiungi file alla ricerca individualmente:

import com.groupdocs.search.Document;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import org.apache.commons.io.FilenameUtils;
import com.groupdocs.search.Indexer;
import com.groupdocs.search.options.*;

class FileAdder {
    public static void addFiles(SearchNetworkNode node, String... filePaths) {
        try {
            InputStream[] streams = new FileInputStream[filePaths.length];
            Document[] documents = new Document[filePaths.length];
            for (int i = 0; i < filePaths.length; i++) {
                String filePath = filePaths[i];
                InputStream stream = new FileInputStream(filePath);
                streams[i] = stream;
                
                // Create a document from the input stream
                String fileName = FilenameUtils.getName(filePath);
                String extension = "." + FilenameUtils.getExtension(filePath);
                Document document = Document.createFromStream(
                    fileName,
                    new Date(),
                    extension,
                    stream);
                documents[i] = document;
            }

            // Initialize the indexer and configure options
            Indexer indexer = node.getIndexer();
            IndexingOptions options = new IndexingOptions();
            options.setUseRawTextExtraction(false);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Casi d’uso comuni

  • Portali documentali enterprise che necessitano di ricerca istantanea su migliaia di PDF e file Office.
  • Piattaforme di e‑discovery legale dove nuove prove vengono aggiunte continuamente e devono essere ricercabili in tempo reale.
  • Sistemi di gestione dei contenuti che archiviano immagini, presentazioni e fogli di calcolo e richiedono ricerche full‑text.

Problemi comuni e soluzioni

ProblemaMotivoSoluzione
Nessun documento appare nei risultati di ricercaIndice non committatoChiama node.getIndexer().commit() dopo aver aggiunto i file.
Errore di conflitto di portaUn altro servizio utilizza basePortScegli un basePort diverso o verifica le porte libere.
Formato file non supportatoLa libreria non dispone di parserAssicurati che l’estensione del file sia supportata o aggiungi un estrattore personalizzato.

Suggerimenti per la risoluzione dei problemi

  • Verifica lo stato del nodo: Usa l’endpoint di health‑check integrato (http://localhost:{port}/health) per confermare che ogni nodo sia in esecuzione.
  • Monitora l’uso della memoria: Grandi batch di documenti possono aumentare l’utilizzo di memoria; indicizza in blocchi più piccoli e chiama commit() periodicamente.
  • Controlla i log: GroupDocs.Search scrive log dettagliati nella cartella basePath — rivedili per errori di parsing o timeout di rete.

Domande frequenti

D: Posso usare GroupDocs.Search su un’applicazione Java basata su cloud?
R: Sì. La libreria funziona con qualsiasi runtime Java, e puoi puntare basePath a una cartella montata in rete o a un mount di storage cloud.

D: Come aggiorno l’indice quando un file cambia?
R: Sottoscrivi gli eventi del nodo (vedi Funzionalità 3) e chiama nuovamente addFiles o addDirectories per i percorsi modificati.

D: C’è un limite al numero di nodi che posso distribuire?
R: Praticamente, il limite è definito dall’hardware e dalla larghezza di banda della rete. L’API non impone un limite rigido.

D: Devo riavviare i nodi dopo aver aggiunto nuovi file?
R: No. L’aggiunta di file attiva l’indicizzazione automaticamente; è necessario eseguire il commit solo se differisci l’operazione.

D: Quali formati di documento sono supportati di default?
R: PDF, DOC/DOCX, XLS/XLSX, PPT/PPTX, TXT, HTML e molti tipi di immagine — oltre 50 formati in totale.

D: Come posso abilitare l’indicizzazione in tempo reale java per una cartella che riceve upload continuamente?
R: Implementa un watcher del file system (ad es., java.nio.file.WatchService) che chiama DirectoryAdder.addDirectories(node, path) ogni volta che viene rilevato un nuovo file.


Ultimo aggiornamento: 2026-09-27
Testato con: GroupDocs.Search for Java 25.4
Autore: GroupDocs

Tutorial correlati