Prima di entrare nei dettagli, diamo una panoramica della tecnica di ricerca full-text. La ricerca full-text è fondamentalmente un modo più avanzato per cercare un testo/una query su una raccolta di documenti. Questo approccio trova rapidamente tutte le istanze di un termine e funziona utilizzando indici di testo. In questo articolo impareremo come eseguire ricerche full-text a livello di codice nei documenti usando C#.

Successivamente, puoi implementare varie tecniche di ricerca per cercare testo in documenti di elaborazione testi, fogli di calcolo, presentazioni, file HTML, eBook PDF, messaggi di posta elettronica, archivi ZIP e molti altri file.

Uno degli esempi di implementazione della ricerca full-text è negli elaboratori di testi e negli editor di testo. Ti aiuta a trovare una frase o una parola in qualsiasi punto del documento.

Ricerca a tutto testo

Di seguito vengono trattati i seguenti argomenti:

API .NET per la ricerca di testo

GroupDocs.Search for .NET è un’API di ricerca back-end che consente la ricerca full-text e può essere integrata in qualsiasi applicazione .NET senza alcuna dipendenza da strumenti o software di terze parti. Ti consente di cercare su una moltitudine di formati di documento nelle tue applicazioni.

Puoi scaricare le DLL o il programma di installazione MSI dalla sezione download o installare l’API nella tua applicazione .NET tramite NuGet.

PM> Install-Package GroupDocs.Search

Ricerca a tutto testo utilizzando C#

Esistono due passaggi principali per eseguire o implementare una ricerca full-text.

  • Indicizzazione
  • Esegui la ricerca

Indicizzazione

Per rendere possibile la ricerca istantanea tra migliaia di documenti con lo stesso formato di file o uno diverso, è necessario creare un indice e aggiungervi questi documenti.

Cos’è un indice?

Un indice possiede il testo scansionato di tutti i documenti. Pertanto, quando si esegue un’operazione di ricerca (cercare una query specifica), viene fatto riferimento solo all’indice, anziché al testo dei documenti originali.

Creazione dell’indice

Un indice può essere creato in memoria o su un disco. L’indice creato in memoria non può essere salvato dopo l’uscita dal programma. Al contrario, un indice creato sul disco potrebbe essere caricato in futuro per continuare a funzionare. L’esempio seguente mostra come creare un indice su un disco.

Index index = new Index("indexPath/FolderName/");

Quando i documenti vengono indicizzati, l’indice è pronto per gestire le query di ricerca. Di seguito sono elencate alcune delle tecniche di ricerca che possono essere eseguite utilizzando GroupDocs.Search for .NET:

  • Ricerca case sensitive
  • Ricerca di espressioni regolari
  • Ricerca di frasi
  • Ricerca sfaccettata
  • Ricerca sinonimo
  • Ricerca con caratteri jolly

Esegui la ricerca in C#

A partire da un caso d’uso. Se disponiamo di più documenti (Word, PDF, Excel e HTML) e desideriamo eseguire una query di ricerca specifica (termine di ricerca “video”) su di essi.

Di seguito sono riportati i passaggi per eseguire la ricerca di testo su più documenti all’interno di una cartella:

  • Decidi la cartella dei documenti di origine e la cartella dell’indice.
  • Preparare la stringa di query.
  • Crea Indice usando la cartella dell’indice.
  • Aggiungi la cartella dei documenti di origine all’indice.
  • Eseguire una ricerca utilizzando il metodo Cerca classe Indice.
  • Attraversa e cerca i risultati per le proprietà di ogni documento.

Il codice sorgente seguente esegue una ricerca di testo usando C# su tutti i documenti della cartella fornita.

// Cerca nel testo della query in tutti i documenti della cartella fornita in C#
string indexFolder =  @"indexPath/GroupDocs/index/";
string documentsFolder = @"documentPath/GroupDocs/source/";
string query = "video";

// Creazione dell'indice nella cartella specificata e aggiunta della cartella dei documenti all'indice
Index index = new Index(indexFolder);
index.Add(documentsFolder);

// Ricerca nell'indice
SearchResult result = index.Search(query);
Console.WriteLine("Documents found: " + result.DocumentCount);

// Attraversa ogni documento del risultato della ricerca
foreach (FoundDocument document in result)
{
    Console.WriteLine("Document Path : " + document.DocumentInfo.FilePath);
    Console.WriteLine("Occurance : " + document.OccurrenceCount);
}

Otterremo il percorso del documento e il numero di occorrenze del termine di ricerca in tutti i documenti disponibili nella cartella dei documenti. Ecco lo screenshot da visualizzare.

Output di testo di ricerca completa

Evidenzia i risultati della ricerca di testo in C#

Eseguiamo ora la stessa ricerca di testo, ma questa volta evidenzieremo tutte le occorrenze che corrispondono alla query.

I seguenti passaggi mostrano come evidenziare i risultati della ricerca di testo:

  • Preparare la stringa di query.
  • Crea Indice usando il percorso della cartella dell’indice.
  • Aggiungi la cartella dei documenti di origine all’indice.
  • Cerca nella cartella dei documenti usando il metodo Cerca.
  • Durante l’esplorazione dei risultati della ricerca, creare l’Evidenziatore.
  • Utilizzare il metodo Evidenzia della classe Indice per evidenziare i risultati della ricerca.

Il codice seguente genera l’output HTML con i risultati di ricerca evidenziati usando C#.

string indexFolder =    @"indexPath/GroupDocs/index/";
string documentFolder = @"documentPath/GroupDocs/source/";
string query = "draw";

// Crea un indice nella cartella specificata e aggiungi la cartella documenti all'Indice
Index index = new Index(indexFolder);
index.Add(documentFolder);

// Cerca la parola d'ordine
SearchResult result = index.Search(query);

// Evidenzia tutte le occorrenze nel testo
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);
                    
    string path = indexFolder + "Highlighted-"+ i +".html";
    OutputAdapter outputAdapter = new FileOutputAdapter(path); 
    Highlighter highlighter = new HtmlHighlighter(outputAdapter); 
    index.Highlight(document, highlighter);
}

Come output, otterremo più file HTML. Ciascun file mostrerà il contenuto di un documento diverso (es. excel.xlsx, source.docx, target.docx) con il termine/parola di ricerca evidenziato. Di seguito è riportato l’output HTML evidenziato di un file DOCX.

Evidenzia i risultati della ricerca full-text nel contenuto

Ottieni una licenza API gratuita

Puoi ottenere una licenza temporanea gratuita per utilizzare l’API senza i limiti di valutazione.

Conclusione

In questo articolo, abbiamo imparato a cercare testo all’interno di più documenti di una cartella usando C#. Inoltre, abbiamo discusso su come evidenziare a livello di codice il testo dei risultati di ricerca in formato HTML.

Puoi saperne di più sull’API utilizzando la documentazione. Molti altri esempi sono disponibili su GitHub. Per domande, contattaci tramite il forum.

Guarda anche