Búsqueda de texto completo de documentos

A menudo necesitamos una API de búsqueda de texto completo que permita a nuestras aplicaciones buscar en los documentos información específica especificada como una consulta de búsqueda textual. Los documentos pueden ser de cualquier formato como Word (Doc, Docx), PDF, HTML, EPUB, Hoja de cálculo (XLS, XLSX), Presentación (PPT, PPTX), imágenes y videos.

GroupDocs.Search es una potente API de búsqueda de texto completo que le permite buscar en más de 70 formatos de documentos en sus aplicaciones. Para que sea posible buscar instantáneamente en miles de documentos, deben agregarse al índice.

¿Por qué usar GroupDocs.Search como desarrollador?

  • No se requiere software adicional para buscar documentos de formatos admitidos.
  • Se proporciona una gran variedad de opciones de indexación y búsqueda para cumplir con cualquier requisito.
  • Se encuentra disponible una amplia selección de tipos de búsqueda en forma de texto o de objeto.
  • El alto rendimiento de indexación y búsqueda se logra mediante algoritmos y estructuras de datos únicos, optimizaciones y ejecución de subprocesos múltiples.
  • Se admiten varias formas de visualizar los resultados de la búsqueda en el texto de los documentos.

Consulte el artículo Acerca de los motores de búsqueda para saber qué lugar ocupa GroupDocs.Search API en la clasificación de los motores de búsqueda.

Instalación

GroupDocs.Search para .NET está alojado en NuGet y se puede instalar fácilmente mediante NuGet Package Manager. Alternativamente, puede descargar la DLL de la API desde la sección Descargas.

Buscar a través de documentos de Office usando C#

Los siguientes pasos explican cómo buscar palabras o frases en varios documentos (Word, Excel, PDF y otros formatos de documentos).

  • Crear un nuevo índice: En primer lugar, debe crear un índice. Un índice se puede crear en la memoria o en el disco. Un índice creado en la memoria no se puede guardar después de salir de su programa. En cambio, un índice creado en disco puede cargarse en el futuro para seguir funcionando. Los detalles sobre la creación de un índice se describen en la sección Creación de un índice.
  • Suscribirse a eventos de índice: Después de crear un índice, debe agregar documentos al índice para la indexación. La indexación de documentos puede tener éxito o no por varios motivos, por ejemplo, debido a errores de lectura del disco o la presencia de una contraseña para acceder a un documento. Para recibir información sobre errores de indexación, puede suscribirse al evento ErrorOccurred. Para trabajar con eventos, consulte la sección Buscar eventos en el índice.
  • Documentos indexados: la indexación de documentos se puede realizar de forma síncrona o asíncrona. La indexación síncrona significa que un subproceso que inició el proceso de indexación estará ocupado hasta que se complete la operación. Sin embargo, con mayor frecuencia, es necesario realizar la indexación de forma asíncrona, con la capacidad de ejecutar otras tareas en el subproceso que inició la operación. En la sección Indización se proporciona una descripción detallada de todos los aspectos del proceso de indexación.
  • Realizar búsqueda: Cuando los documentos están indexados, el índice está listo para manejar consultas de búsqueda. Se admiten los siguientes tipos de consultas de búsqueda: simple, difusa, sensible a mayúsculas y minúsculas, booleana, frasal, facetada, con comodines y otras. La descripción de consultas de búsqueda de varios tipos se presenta en la sección Búsqueda.
  • Usar resultados de búsqueda: Cuando se completa una búsqueda, debe interpretar un resultado de alguna manera. El resultado se puede representar mediante una lista simple de documentos encontrados, o las palabras y frases encontradas se pueden resaltar en el texto del documento. Para obtener más información sobre el procesamiento de los resultados de la búsqueda, consulte Resultados de la búsqueda.
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));
}

El código anterior genera el siguiente resultado y archivo HTML.

Buscar en Campos de Documentos usando C#

La búsqueda por facetas filtra los resultados de la búsqueda al establecer nombres de campo de documento válidos para buscar. La búsqueda por facetas le permite buscar solo en ciertos campos de documentos, por ejemplo, solo en el campo de contenido o en el campo de nombre de archivo. A continuación se presenta un ejemplo simple de búsqueda por facetas con consultas en forma de texto y objeto.

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);

Uso de campos específicos de formato

Para cada formato de documento, existen campos estándar que pueden estar presentes en documentos de este tipo. La biblioteca proporciona las siguientes clases que contienen constantes con los nombres de campos de documentos estándar: EpubFieldNames, FictionBookFieldNames, MailFieldNames, PresentationFieldNames, SpreadsheetFieldNames , Nombres de campos de palabras.

También hay campos que pueden estar presentes en documentos de cualquier tipo. Los nombres de dichos campos se representan en la clase CommonFieldNames.

En el siguiente ejemplo se presenta un ejemplo del uso de nombres de campo estándar de documentos.

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);

La información detallada sobre la búsqueda por facetas se presenta en la página Búsqueda por facetas.

Conclusión

Este artículo ha explicado cómo buscar en documentos (DOCX, PDF, Excel, archivos de texto) información particular en C#. También explicó cómo buscar en los campos de los documentos. GroupDocs.Search contiene varias otras funciones, consulte la documentación para obtener más información al respecto.