GroupDocs.Search per .NET 26.10 è ora disponibile. Questa è una release importante: il formato dell’indice è stato ridisegnato, quindi gli indici occupano meno spazio su disco, richiedono metà della RAM e si aprono da 2 a 4 volte più velocemente. La ricerca, l’eliminazione, l’ottimizzazione e la ricerca per immagini sono accelerate da diverse a centinaia di volte, le ricerche non attendono più l’indicizzazione e i dati dell’indice sono protetti con checksum e aggiornamenti atomici.
Gli indici esistenti creati dalle versioni 22.7–26.8 vengono convertiti al nuovo formato senza reindicizzazione. La release contiene 22 modifiche: 4 nuove funzionalità, 15 miglioramenti e 3 correzioni.
Evidenze di prestazioni
La maggior parte dei guadagni cresce con la dimensione dell’indice e il numero dei suoi segmenti.
| Cosa | Miglioramento in 26.10 |
|---|---|
| RAM richiesta da un indice caricato | 2 volte meno |
| Apertura di un indice | Da 2 a 4 volte più veloce |
| Dimensione dell’indice su disco | Cresce in proporzione ai dati indicizzati; più grande è l’indice, maggiore è il risparmio |
| Ricerca di una parola in indici grandi | Fino a 2 volte più veloce; parole rare da 10 a 40 volte più veloce |
| Ricerca fuzzy in indici grandi | Da 2,5 a 5 volte più veloce |
| Ricerca wildcard in indici grandi | Da 2,5 a 3 volte più veloce |
| Ricerca wildcard, espressione regolare, intervallo numerico e fuzzy per blocchi | Da 7 a 150 volte più veloce |
| Ricerca per intervallo di date | Da 2 a 27 volte più veloce |
| Eliminazione di documenti | Centinaia di volte più veloce, 4 volte meno memoria, nessuno spazio disco aggiuntivo |
| Ottimizzazione dell’indice | 4 volte più veloce, 4 volte meno memoria |
| Picco di RAM durante l’indicizzazione | 2 volte meno |
| Recupero del testo memorizzato di un documento | Fino a 15 volte più veloce |
| Dati di ricerca per immagini | 2,9 volte meno memoria, caricati 6,6 volte più velocemente, salvati 100 volte più velocemente; ricerca inversa di immagini fino a 1,8 volte più veloce |
| Ricerca mentre l’indice è in fase di modifica | Non più bloccata |
| Affidabilità dell’indice | Checksum e modifiche atomiche; le operazioni interrotte vengono completate o annullate |
| Thread di ricerca | Tutti i core del processore per impostazione predefinita; possono essere modificati in qualsiasi momento |
Novità di questa release
| Chiave | Riepilogo | Categoria |
|---|---|---|
| SEARCHNET-3665 | Implementare la possibilità di modificare il numero di thread di ricerca in qualsiasi momento | Feature |
| SEARCHNET-3666 | Implementare un’opzione per sostituire i caratteri surrogate non accoppiati | Feature |
| SEARCHNET-3667 | Implementare un’opzione per saltare i termini composti solo da caratteri misti | Feature |
| SEARCHNET-3668 | Implementare l’aggiornamento della versione dell’indice al nuovo formato senza reindicizzare i documenti | Feature |
| SEARCHNET-3669 | Implementare l’ottimizzazione del consumo di spazio su disco di un indice | Improvement |
| SEARCHNET-3670 | Implementare l’ottimizzazione del consumo di RAM di un indice caricato | Improvement |
| SEARCHNET-3671 | Implementare l’ottimizzazione della velocità di caricamento dell’indice | Improvement |
| SEARCHNET-3672 | Implementare l’ottimizzazione della velocità di ricerca in indici grandi | Improvement |
| SEARCHNET-3673 | Implementare l’ottimizzazione della ricerca fuzzy | Improvement |
| SEARCHNET-3674 | Implementare l’ottimizzazione della ricerca wildcard | Improvement |
| SEARCHNET-3675 | Implementare l’ottimizzazione dell’eliminazione e dell’aggiornamento dei documenti | Improvement |
| SEARCHNET-3676 | Implementare l’ottimizzazione dell’operazione di ottimizzazione dell’indice | Improvement |
| SEARCHNET-3677 | Consentire la ricerca mentre l’indice è in fase di modifica | Improvement |
| SEARCHNET-3678 | Migliorare l’affidabilità dell’indice | Improvement |
| SEARCHNET-3679 | Implementare l’ottimizzazione dell’uso della memoria durante l’indicizzazione | Improvement |
| SEARCHNET-3680 | Implementare l’ottimizzazione del recupero del testo del documento | Improvement |
| SEARCHNET-3681 | Implementare l’ottimizzazione della ricerca per immagini | Improvement |
| SEARCHNET-3682 | Implementare la gestione del case delle lettere in modo identico su tutte le piattaforme | Improvement |
| SEARCHNET-3688 | Implementare l’ottimizzazione della ricerca per blocchi | Improvement |
| SEARCHNET-3683 | Correggere il numero predefinito di thread di ricerca | Fix |
| SEARCHNET-3684 | Impedire indicizzazioni incoerenti dopo la modifica dei dizionari dei termini | Fix |
| SEARCHNET-3685 | Impedire la fusione di indici che elaborano il testo in modo diverso | Fix |
Funzionalità principali
Archiviazione e affidabilità dell’indice
- La dimensione dell’indice ora cresce in proporzione ai dati indicizzati, quindi gli indici grandi con molti segmenti risparmiano più spazio.
- Un indice caricato richiede metà della RAM e l’apertura di un indice è da 2 a 4 volte più veloce.
- I dati dell’indice sono protetti con checksum e tutte le modifiche vengono applicate in modo atomico. Se un’operazione viene interrotta da un errore, un’interruzione di corrente o la terminazione del processo, l’indice rimane nello stato coerente precedente.
Ricerca
- Vengono letti solo i segmenti che contengono i termini della query, il che velocizza la ricerca di parole, fuzzy, wildcard e per blocchi.
- La ricerca utilizza tutti i core del processore per impostazione predefinita e il numero di thread può essere modificato in qualsiasi momento tramite
IndexSettings.SearchThreads. - Le ricerche e le operazioni che modificano l’indice (indicizzazione, aggiornamento, eliminazione, fusione, ottimizzazione) non si bloccano più a vicenda. Ogni ricerca lavora con uno snapshot coerente dell’indice.
Indicizzazione e manutenzione
- L’eliminazione di documenti non riscrive più l’indice: i documenti vengono esclusi dalla ricerca immediatamente e rimossi fisicamente durante l’ottimizzazione.
- L’ottimizzazione dell’indice è 4 volte più veloce e utilizza 4 volte meno memoria; gli indici molto grandi vengono ottimizzati in diversi segmenti di dimensione limitata.
- L’indicizzazione consuma circa metà della RAM di picco.
Elaborazione del testo
- Il case delle lettere è gestito in modo identico su .NET Framework e .NET, quindi i risultati della ricerca non dipendono dalla piattaforma.
- I caratteri surrogate non accoppiati vengono sostituiti con U+FFFD anziché rimossi, e i termini composti solo da caratteri misti non vengono più indicizzati.
Modifiche all’API pubblica
Sono state aggiunte due proprietà alla classe GroupDocs.Search.IndexSettings:
Boolean ReplaceUnpairedSurrogates– sostituisce i caratteri surrogate UTF‑16 non accoppiati con il carattere di sostituzione Unicode (U+FFFD). Abilitata per impostazione predefinita.Boolean SkipBlendedOnlyTerms– esclude dall’indicizzazione i termini che consistono solo di caratteri misti. Abilitata per impostazione predefinita.
Entrambe le impostazioni sono fissate al momento della creazione di un indice.
Esempio di codice
L’esempio seguente aggiorna un indice creato con una versione precedente al nuovo formato senza reindicizzare i documenti.
string sourceIndexFolder = @"c:\MyOldIndex\"; // Specificare il percorso all’indice di una versione precedente
string targetIndexFolder = @"c:\MyNewIndex\"; // Specificare il percorso alla cartella per l’indice aggiornato
IndexUpdater updater = new IndexUpdater(); // Creazione di un aggiornatore di indice
if (updater.CanUpdateVersion(sourceIndexFolder)) // Verifica se la versione dell’indice può essere aggiornata
{
VersionUpdateResult result = updater.UpdateVersion(sourceIndexFolder, targetIndexFolder); // Aggiornamento della versione dell’indice; l’indice di origine non viene modificato
}
Note di aggiornamento
Tenere in considerazione le seguenti modifiche quando si passa da una versione precedente:
- Il formato dell’indice è cambiato. Gli indici delle versioni precedenti devono essere convertiti con la classe
IndexUpdaterprima di poter essere aperti. I documenti di origine non sono richiesti, l’indice convertito viene salvato in una cartella diversa e l’indice di origine non viene modificato. - I dizionari dei termini sono fissati una volta che un indice contiene documenti. L’alfabeto, il dizionario di tokenizzazione, le sostituzioni di caratteri, le parole di stop e le impostazioni
UseStopWordseUseCharacterReplacementsdevono essere configurati prima del primo documento indicizzato. Una modifica successiva generaInvalidOperationException. - Gli indici incompatibili non vengono fusi.
Index.MergegeneraInvalidOperationExceptionse gli indici da fondere suddividono il testo in termini in modo diverso. - La ricerca è multithread per impostazione predefinita. Con il valore predefinito
IndexSettings.SearchThreads, la ricerca utilizza tanti thread quanti sono i core del processore. Per limitare il numero di thread, impostare esplicitamente la proprietà. - Due nuove impostazioni dell’indice sono abilitate per impostazione predefinita. Per mantenere il comportamento precedente, impostare
ReplaceUnpairedSurrogateseSkipBlendedOnlyTermssufalseprima di creare un indice. - I documenti eliminati vengono rimossi fisicamente durante l’ottimizzazione. Chiamare
Index.Optimizeper recuperare lo spazio. - Il numero di blocchi è cambiato. La ricerca per blocchi non restituisce più un blocco per ogni segmento. Iterare sui blocchi finché
SearchResult.NextChunkSearchTokennon è nullo invece di fare affidamento sul numero di segmenti.
Come ottenere l’aggiornamento
NuGet
- NuGet – Installa il pacchetto più recente:
# Package Manager
NuGet\Install-Package GroupDocs.Search -Version 26.10.0
# .NET CLI
dotnet add package GroupDocs.Search --version 26.10.0
# Package Manager
NuGet\Install-Package GroupDocs.Search.NETFramework -Version 26.10.0
# .NET CLI
dotnet add package GroupDocs.Search.NETFramework --version 26.10.0
Download diretto
- Direct Download – Scarica gli assembly compilati per .NET dalla pagina ufficiale di rilascio:
https://releases.groupdocs.com/search/net/new-releases/groupdocs.search-for-.net-26.10-dlls-only/
https://releases.groupdocs.com/search/net/new-releases/groupdocs.search-for-.net-26.10/
Risorse
- Full Release Notes – https://releases.groupdocs.com/search/net/release-notes/2026/groupdocs-search-for-net-26-10-release-notes/
- Documentation – https://docs.groupdocs.com/search/net/
- Code Examples – https://github.com/groupdocs-search/GroupDocs.Search-for-.NET/
- Free Support Forum – https://forum.groupdocs.com/c/search/
- Usalo dagli agenti AI – il server GroupDocs.Search MCP esegue questo motore localmente per Claude, Cursor e Copilot: https://docs.groupdocs.com/search/mcp/ · Hai bisogno di un database vettoriale per porre domande su una cartella di documenti?