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 IndexUpdater prima 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 UseStopWords e UseCharacterReplacements devono essere configurati prima del primo documento indicizzato. Una modifica successiva genera InvalidOperationException.
  • Gli indici incompatibili non vengono fusi. Index.Merge genera InvalidOperationException se 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 ReplaceUnpairedSurrogates e SkipBlendedOnlyTerms su false prima di creare un indice.
  • I documenti eliminati vengono rimossi fisicamente durante l’ottimizzazione. Chiamare Index.Optimize per 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.NextChunkSearchToken non è 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

Risorse