Ricerca full-text di documenti

Spesso abbiamo bisogno di un’API di ricerca full-text che consenta alle nostre applicazioni di cercare nei documenti informazioni particolari specificate come query di ricerca testuale. I documenti possono essere di qualsiasi formato come Word (Doc, Docx), PDF, HTML, EPUB, Spreadsheet (XLS, XLSX), Presentation (PPT, PPTX), immagini e video.

GroupDocs.Search è una potente API di ricerca full-text che ti consente di cercare oltre 70 formati di documento nelle tue applicazioni. Per rendere possibile la ricerca istantanea su migliaia di documenti, è necessario aggiungerli all’indice.

Perché utilizzare GroupDocs.Search come sviluppatore?

  • Non è necessario alcun software aggiuntivo per eseguire ricerche nei documenti dei formati supportati.
  • Viene fornita una grande varietà di opzioni di indicizzazione e ricerca per soddisfare qualsiasi esigenza.
  • È disponibile un’ampia selezione di tipi di ricerca nelle query sotto forma di testo o oggetto.
  • Le elevate prestazioni di indicizzazione e ricerca sono ottenute da algoritmi e strutture di dati unici, ottimizzazioni ed esecuzione multi-thread.
  • Sono supportati vari modi per visualizzare i risultati della ricerca nel testo dei documenti.

Consulta l’articolo Informazioni sui motori di ricerca per sapere quale posto occupa l’API GroupDocs.Search nella classificazione dei motori di ricerca.

Installazione

GroupDocs.Search for .NET è ospitato su NuGet e può essere facilmente installato utilizzando NuGet Package Manager. In alternativa, puoi scaricare la DLL dell’API dalla sezione Download.

Cerca nei documenti di Office usando C#

I passaggi seguenti spiegano come cercare parole o frasi in più documenti (Word, Excel, PDF e altri formati di documenti).

  • Crea un nuovo indice: prima di tutto devi creare un indice. Un indice può essere creato in memoria o su disco. Un indice creato in memoria non può essere salvato dopo l’uscita dal programma. Al contrario, un indice creato su disco potrebbe essere caricato in futuro per continuare a funzionare. I dettagli sulla creazione di un indice sono descritti nella sezione Creazione di un indice.
  • Iscriviti agli eventi dell’indice: Dopo aver creato un indice, devi aggiungere i documenti all’indice per l’indicizzazione. L’indicizzazione dei documenti può avere esito positivo o negativo per vari motivi, ad esempio a causa di errori di lettura dal disco o della presenza di una password per accedere a un documento. Per ricevere informazioni sugli errori di indicizzazione, puoi iscriverti all’evento ErrorOccurred. Per lavorare con gli eventi, vedere la sezione Cerca eventi nell’indice.
  • Indicizza documenti: l’indicizzazione dei documenti può essere eseguita in modo sincrono o asincrono. L’indicizzazione sincrona significa che un thread che ha avviato il processo di indicizzazione sarà occupato fino al completamento dell’operazione. Tuttavia, più spesso, è necessario eseguire l’indicizzazione in modo asincrono, con la possibilità di eseguire altre attività nel thread che ha avviato l’operazione. Una descrizione dettagliata di tutti gli aspetti del processo di indicizzazione è fornita nella sezione Indicizzazione.
  • Esegui ricerca: quando i documenti vengono indicizzati, l’indice è pronto per gestire le query di ricerca. Sono supportati i seguenti tipi di query di ricerca: semplice, fuzzy, case sensitive, boolean, phrasal, faceted, con caratteri jolly e altri. La descrizione delle query di ricerca di vario tipo è presentata nella sezione Ricerca.
  • Utilizza i risultati di ricerca: quando una ricerca è completata, devi in qualche modo interpretare un risultato. Il risultato può essere rappresentato da un semplice elenco di documenti trovati, oppure le parole e le frasi trovate possono essere evidenziate nel testo del documento. Per ulteriori informazioni sull’elaborazione dei risultati della ricerca, vedere Risultati della ricerca.
string indexFolder = @"/Users/muhammadsohailismail/MyIndex/"; // Specify the path to the index folder
string documentsFolder = @"/Users/muhammadsohailismail/MyDocuments/"; // Specify the path to a folder containing documents to search

// a) Create new index or
// b) Open existing index
Index index = new Index(indexFolder);

// c) Subscribe to index events
index.Events.ErrorOccurred += (sender, args) =>
{
    Console.WriteLine(args.Message); // Writing error messages to the console
};

// d) Add files synchronously
index.Add(documentsFolder); // Synchronous indexing documents from the specified folder

// f) Perform search
string query = "Worthy"; // Specify a search query
SearchResult result = index.Search(query); // Searching in the index

// g) Use search results
// Printing the result
Console.WriteLine("Documents found: " + result.DocumentCount);
Console.WriteLine("Total occurrences found: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);
    Console.WriteLine("\\tDocument: " + document.DocumentInfo.FilePath);
    Console.WriteLine("\\tOccurrences: " + document.OccurrenceCount);
}

// Highlight occurrences in text
if (result.DocumentCount > 0)
{
    FoundDocument document = result.GetFoundDocument(0); // Getting the first found document
    string path = @"/Users/muhammadsohailismail/Output/Highlighted.html";
    OutputAdapter outputAdapter = new FileOutputAdapter(path); // Creating the output adapter to a file
    HtmlHighlighter highlighter = new HtmlHighlighter(outputAdapter); // Creating the highlighter object
    index.Highlight(document, highlighter); // Generating output HTML formatted document with highlighted search results

    Console.WriteLine();
    Console.WriteLine("Generated HTML file can be opened with Internet browser.");
    Console.WriteLine("The file can be found by the following path:");
    Console.WriteLine(Path.GetFullPath(path));
}

Il codice precedente genera il seguente output e file HTML.

Cerca nei campi dei documenti usando C#

La ricerca sfaccettata consente di filtrare i risultati della ricerca impostando nomi di campi documento validi per la ricerca. La ricerca sfaccettata consente di cercare solo in determinati campi di documenti, ad esempio solo nel campo del contenuto o nel campo del nome del file. Di seguito viene presentato un semplice esempio di ricerca sfaccettata con query in forma di testo e oggetto.

string indexFolder = @"c:\\MyIndex\\";
string documentsFolder = @"c:\\MyDocuments\\";
 
// Creating an index in the specified folder
Index index = new Index(indexFolder);
 
// Indexing documents from the specified folder
index.Add(documentsFolder);
 
// Search in the content field with text query
SearchResult result1 = index.Search("content: Einstein");
 
// Search in the content field with object query
SearchQuery wordQuery = SearchQuery.CreateWordQuery("Einstein");
SearchQuery fieldQuery = SearchQuery.CreateFieldQuery(CommonFieldNames.Content, wordQuery);
SearchResult result2 = index.Search(fieldQuery);

Utilizzo di campi specifici del formato

Per ogni formato di documento esistono campi standard che possono essere presenti in documenti di questo tipo. La libreria fornisce le seguenti classi contenenti costanti con i nomi dei campi di documenti standard: EpubFieldNames, FictionBookFieldNames, MailFieldNames, PresentationFieldNames, SpreadsheetFieldNames , NomiCampo Parole.

Ci sono anche campi che possono essere presenti in documenti di qualsiasi tipo. I nomi di tali campi sono rappresentati nella classe CommonFieldNames.

Un esempio di utilizzo dei nomi di campo standard dei documenti è presentato nell’esempio seguente.

string indexFolder = @"c:\\MyIndex\\";
string documentsFolder = @"c:\\MyDocuments\\";
 
// Creating an index in the specified folder
Index index = new Index(indexFolder);
 
// Indexing documents from the specified folder
index.Add(documentsFolder);
 
// Search in the content field with text query
string query1 = WordsFieldNames.Company + ": Dycum";
SearchResult result1 = index.Search(query1);
 
// Search in the content field with object query
SearchQuery wordQuery = SearchQuery.CreateWordQuery("Dycum");
SearchQuery fieldQuery = SearchQuery.CreateFieldQuery(WordsFieldNames.Company, wordQuery);
SearchResult result2 = index.Search(fieldQuery);

Informazioni dettagliate sulla ricerca sfaccettata sono presentate nella pagina Ricerca sfaccettata.

Conclusione

Questo articolo ha spiegato come cercare nei documenti (DOCX, PDF, Excel, file di testo) informazioni particolari in C#. Spiega anche come cercare nei campi dei documenti. GroupDocs.Search contiene molte altre funzionalità, controlla la documentazione per saperne di più.