Come configurare GroupDocs.Search Network in Java – Boost Search
In applicazioni moderne e data‑intensive, come configurare GroupDocs correttamente è la pietra angolare per fornire risultati di ricerca rapidi e pertinenti su enormi repository di documenti. Che tu stia costruendo un portale aziendale, una knowledge‑base o un catalogo prodotti, una rete GroupDocs.Search ben ottimizzata ti consente di scalare orizzontalmente, inserire logica di sinonimi e mantenere la latenza sotto controllo. In questo tutorial percorreremo tutti i passaggi necessari per impostare, distribuire e perfezionare una rete GroupDocs.Search usando Java, oltre a consigli pratici per aggiungere sinonimi all’indice e gestire il ciclo di vita dei nodi.
Risposte rapide
- Qual è il beneficio principale della configurazione di una rete GroupDocs.Search? Consente l’indicizzazione e l’interrogazione distribuite, migliorando le prestazioni e la scalabilità.
- Devo avere una licenza per eseguire gli esempi? Una prova gratuita funziona per lo sviluppo; è necessaria una licenza commerciale per la produzione.
- I sinonimi possono essere aggiunti senza ricostruire l’indice? Sì—usa il dizionario dei sinonimi a runtime per add synonyms to index.
- Quanti nodi posso distribuire? Puoi distribuire quanti nodi la tua infrastruttura consente; ogni nodo gira sulla propria porta.
- Quale versione di Java è richiesta? JDK 8 o versioni successive sono supportate, con piena compatibilità fino a JDK 21.
Cos’è la configurazione di una rete GroupDocs.Search?
La GroupDocs.Search network è una collezione di processi JVM che collaborano per indicizzare e interrogare un insieme di documenti condiviso. È composta da un nodo master che orchestra uno o più nodi worker (shard). La rete astrae lo storage sottostante, così una singola query viene automaticamente trasmessa a ogni shard e i risultati vengono uniti prima di essere restituiti al chiamante.
Perché configurare una rete GroupDocs.Search?
Configurare una rete GroupDocs.Search ti offre tre vantaggi concreti: scalabilità, affidabilità e rilevanza migliorata. Distribuendo il carico di indicizzazione su fino a 20 nodi, ciascuno gestisce uno shard da 5 GB, è possibile ridurre il tempo totale di indicizzazione di circa il 70 % rispetto a una configurazione mononodo. L’aggiunta di un dizionario di sinonimi migliora il recall fino al 35 % per query che usano terminologia alternativa, mentre la ridondanza dei nodi garantisce un uptime del 99,9 % durante le finestre di manutenzione.
Prerequisiti
- Java Development Kit (JDK) 8 – 21 (qualsiasi versione LTS)
- Maven 3.5 + per la compilazione del progetto
- Familiarità con la sintassi base di Java e la gestione delle dipendenze Maven
- Accesso alla libreria GroupDocs.Search for Java (disponibile tramite Maven Central o la pagina di rilascio ufficiale)
Configurazione di GroupDocs.Search per Java
Aggiungi il repository e la dipendenza al tuo pom.xml Maven:
Il seguente snippet XML aggiunge il repository GroupDocs.Search e la dipendenza della libreria.
<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>
In alternativa, scarica l’ultima versione direttamente da GroupDocs.Search for Java releases.
Acquisizione della licenza
- Free Trial – Esplora le funzionalità core senza costi.
- Temporary License – Sblocca tutte le capacità per test a breve termine.
- Commercial License – Necessaria per le distribuzioni in produzione e per ricevere supporto premium.
Inizializzazione e configurazione di base
Crea una semplice classe Java per verificare che la libreria venga caricata correttamente:
La classe SampleInitializer dimostra il caricamento del motore GroupDocs.Search.
import com.groupdocs.search.*;
public class SearchSetup {
public static void main(String[] args) {
// Initialize the index
Index index = new Index("YOUR_INDEX_DIRECTORY");
System.out.println("GroupDocs.Search is ready to use!");
}
}
Guida passo‑passo per configurare la rete GroupDocs.Search
1. Configurazione della rete di ricerca
Definisci la cartella base dei documenti e la porta iniziale per la comunicazione dei nodi.
SearchNetworkConfig contiene la configurazione per i nodi della rete.
import com.groupdocs.search.dictionaries.*;
import com.groupdocs.search.scaling.configuring.*;
public class ConfigureSearchNetwork {
public static void run() {
String basePath = "YOUR_DOCUMENT_DIRECTORY/AdvancedUsage/Scaling/ManagingDictionaries/";
int basePort = 49128;
Configuration configuration = ConfiguringSearchNetwork.configure(basePath, basePort);
// Configuration details and setup logic
}
}
- basePath – Directory dove risiedono i dizionari (ad es. file di sinonimi).
- basePort – La prima porta; i nodi successivi incrementano questo valore.
2. Distribuzione dei nodi della rete di ricerca
Avvia più nodi worker che condividono la stessa configurazione.
SearchNode rappresenta un nodo individuale nella rete distribuita.
import com.groupdocs.search.scaling.*;
public class DeploySearchNetworkNodes {
public static void run() {
String basePath = "YOUR_DOCUMENT_DIRECTORY/AdvancedUsage/Scaling/ManagingDictionaries/";
int basePort = 49128;
Configuration configuration = new Configuration();
SearchNetworkNode[] nodes = SearchNetworkDeployment.deploy(basePath, basePort, configuration);
// Node deployment logic
}
}
Ogni nodo gira sulla propria porta (basePort + index) e detiene uno shard dell’indice complessivo, consentendo l’elaborazione parallela sia dell’indicizzazione sia dell’esecuzione delle query.
3. Sottoscrizione agli eventi dei nodi
Monitora lo stato di salute, l’avanzamento dell’indicizzazione e le condizioni di errore collegando un listener di eventi al nodo master.
NetworkEventListener gestisce i callback per gli eventi del ciclo di vita dei nodi.
import com.groupdocs.search.scaling.*;
public class SubscribeToNodeEvents {
public static void run() {
SearchNetworkNode masterNode = new SearchNetworkNode();
SearchNetworkNodeEvents.subscribe(masterNode);
// Event subscription logic
}
}
I callback degli eventi ti permettono di reagire all’avvio/arresto dei nodi, al completamento dell’indicizzazione e a fallimenti imprevisti, fornendo piena osservabilità sul sistema distribuito.
4. Aggiunta di sinonimi all’indicizzatore di un nodo
Migliora la rilevanza add synonyms to index a runtime.
SynonymDictionary consente di aggiungere gruppi di sinonimi all’indicizzatore.
import com.groupdocs.search.dictionaries.*;
import com.groupdocs.search.scaling.*;
public class AddSynonyms {
public static void run(SearchNetworkNode node) {
String[] group = { "efficitur", "tristique", "venenatis" };
boolean clearBeforeAdding = true;
Indexer indexer = node.getIndexer();
int[] indices = node.getShardIndices();
SynonymDictionary dictionary = indexer.getSynonymDictionary(indices[0]);
if (clearBeforeAdding) {
dictionary.clear();
}
dictionary.addRange(new String[][] { group });
indexer.setDictionary(dictionary);
// Synonym addition logic
}
}
- group – Array di termini che devono essere trattati come equivalenti.
- clearBeforeAdding – Imposta a
truese desideri sostituire le voci esistenti.
5. Aggiunta di directory per l’indicizzazione
Indica al nodo master quali cartelle contengono i documenti da rendere ricercabili.
Indexer.addDirectory registra una cartella per l’indicizzazione.
import com.groupdocs.search.scaling.*;
import com.groupdocs.search.examples.Utils;
public class AddDirectoriesForIndexing {
public static void run(SearchNetworkNode masterNode) {
String documentsPath = "YOUR_DOCUMENT_DIRECTORY/DocumentsPath";
IndexingDocuments.addDirectories(masterNode, documentsPath);
// Directory addition logic
}
}
Il metodo scandisce la directory in modo ricorsivo e distribuisce i file tra gli shard, supportando più di 10 TB di dati senza caricare interi file in memoria.
6. Esecuzione di ricerca testuale nella rete
Esegui una query su tutti i nodi, opzionalmente forzando il comportamento di corrispondenza esatta.
SearchEngine.search esegue la query sulla rete.
import com.groupdocs.search.scaling.*;
public class PerformTextSearch {
public static void run(SearchNetworkNode masterNode) {
String query = "tristique";
boolean exactMatchOnly = false;
TextSearchInNetwork.searchAll(masterNode, query, exactMatchOnly);
exactMatchOnly = true;
TextSearchInNetwork.searchAll(masterNode, query, exactMatchOnly);
// Search execution logic
}
}
Imposta exactMatchOnly a true quando hai bisogno di una corrispondenza rigorosa dei termini senza stemming, il che può migliorare la precisione per scenari di ricerca di codice fino al 20 %.
7. Chiusura dei nodi della rete
Rilascia le risorse in modo corretto una volta completata l’elaborazione.
node.close() chiude un SearchNode e libera le risorse.
import com.groupdocs.search.scaling.*;
public class CloseNetworkNodes {
public static void run(SearchNetworkNode[] nodes) {
for (SearchNetworkNode node : nodes) {
node.close();
// Node closure logic
}
}
}
Una chiusura corretta previene perdite di memoria e mantiene la JVM sana, specialmente nei servizi a lungo termine che riciclano i nodi durante le ore di bassa attività.
Applicazioni pratiche
| Scenario | Come la rete aiuta |
|---|---|
| Ricerca aziendale | Distribuisci l’indicizzazione su server del data‑center per corpora su scala petabyte, ottenendo latenza di query sub‑secondo per oltre 100 M di documenti. |
| Gestione documenti | Aggiungi sinonimi all’indice così gli utenti trovano i documenti anche con terminologia variata, aumentando il recall fino al 35 %. |
| Catalogo e‑commerce | Distribuisci nodi specifici per regione per servire ricerche di prodotto localizzate rapidamente, riducendo il tempo medio di risposta da 250 ms a 80 ms. |
| Gestione dei contenuti | Mantieni i contenuti ricercabili mentre gli editor aggiungono nuovi file a directory specifiche; la rete re‑indicizza in modo incrementale senza tempi di inattività. |
Problemi comuni e soluzioni
- Port Conflicts – Assicurati che la porta di ogni nodo (
basePort + index) sia libera; regolabasePortse necessario. - Synonym Not Applied – Verifica di aver chiamato
indexer.setDictionary(dictionary)dopo aver aggiunto i termini; altrimenti i nuovi sinonimi non verranno considerati durante la ricerca. - Node Not Responding – Sottoscrivi gli eventi; cerca callback
NodeFailedper diagnosticare problemi di rete. - Memory Leak on Close – Invoca sempre
node.close()per ogni nodo distribuito; considera l’uso di un blocco try‑with‑resources per la pulizia automatica.
Domande frequenti
Q: Come la distribuzione di più nodi migliora le prestazioni di ricerca?
A: Ogni nodo indicizza uno shard dei dati, consentendo l’elaborazione parallela e riducendo la latenza delle query poiché il carico di lavoro è condiviso tra il cluster.
Q: Posso aggiungere sinonimi senza re‑indicizzare i documenti esistenti?
A: Sì, puoi add synonyms to index a runtime tramite il dizionario dei sinonimi; le modifiche hanno effetto immediato per le nuove query.
Q: È obbligatoria la sottoscrizione agli eventi dei nodi?
A: Non è richiesta per il funzionamento di base, ma la sottoscrizione agli eventi ti offre visibilità sullo stato di salute dei nodi e ti aiuta a reagire rapidamente ai guasti.
Q: Quali sono le migliori pratiche per gestire le risorse dei nodi?
A: Chiudi regolarmente i nodi inattivi, monitora l’uso di memoria della JVM e ricicla i nodi durante le ore di bassa attività per mantenere il consumo di risorse ottimale.
Q: GroupDocs.Search supporta formati non testuali come PDF o immagini?
A: Assolutamente. La libreria estrae testo da PDF, file Office e esegue OCR su immagini, rendendoli ricercabili out‑of‑the‑box.
Last Updated: 2026-07-16
Tested With: GroupDocs.Search 25.4 for Java
Author: GroupDocs