Pesquisa de texto completo de documentos

Muitas vezes, precisamos de uma API de pesquisa de texto completo que permita que nossos aplicativos pesquisem em documentos por informações específicas especificadas como uma consulta de pesquisa textual. Os documentos podem ser de qualquer formato, como Word (Doc, Docx), PDF, HTML, EPUB, Planilha (XLS, XLSX), Apresentação (PPT, PPTX), imagens e vídeos.

GroupDocs.Search é uma poderosa API de pesquisa de texto completo que permite pesquisar mais de 70 formatos de documento em seus aplicativos. Para possibilitar a pesquisa instantânea em milhares de documentos, eles devem ser adicionados ao índice.

Por que usar GroupDocs.Search como desenvolvedor?

  • Nenhum software adicional é necessário para pesquisar documentos de formatos suportados.
  • Grande variedade de opções de indexação e pesquisa são fornecidas para atender a quaisquer requisitos.
  • Uma ampla seleção de tipos de pesquisa está disponível em consultas de formulário de texto ou objeto.
  • O alto desempenho de indexação e pesquisa é alcançado por algoritmos e estruturas de dados exclusivos, otimizações e execução multi-thread.
  • São suportadas várias formas de visualizar os resultados da pesquisa no texto dos documentos.

Consulte o artigo Sobre os mecanismos de pesquisa para saber qual o lugar que a API GroupDocs.Search ocupa na classificação dos mecanismos de pesquisa.

Instalação

O GroupDocs.Search para .NET está hospedado em NuGet e pode ser facilmente instalado usando o Gerenciador de Pacotes NuGet. Como alternativa, você pode baixar a DLL da API na seção Downloads.

Pesquisar em documentos do Office usando C#

As etapas a seguir explicam como pesquisar palavras ou frases em vários documentos (Word, Excel, PDF e outros formatos de documentos).

  • Crie um novo índice: primeiro, você precisa criar um índice. Um índice pode ser criado na memória ou no disco. Um índice criado na memória não pode ser salvo após sair do programa. Por outro lado, um índice criado em disco pode ser carregado no futuro para continuar funcionando. Os detalhes sobre como criar um índice são descritos na seção Criando um índice.
  • Inscrever-se em eventos de índice: depois de criar um índice, você precisa adicionar documentos ao índice para indexação. A indexação de documentos pode ser bem-sucedida ou malsucedida por vários motivos, por exemplo, devido a erros de leitura do disco ou a presença de uma senha para acessar um documento. Para receber informações sobre erros de indexação, você pode assinar o evento ErrorOccurred. Para trabalhar com eventos, consulte a seção Pesquisar eventos de índice.
  • Indexar documentos: a indexação de documentos pode ser realizada de forma síncrona ou assíncrona. A indexação síncrona significa que um thread que iniciou o processo de indexação estará ocupado até que a operação seja concluída. No entanto, com mais frequência, é necessário realizar a indexação de forma assíncrona, com a possibilidade de executar outras tarefas na thread que iniciou a operação. Uma descrição detalhada de todos os aspectos do processo de indexação é fornecida na seção Indexação.
  • Executar pesquisa: quando os documentos são indexados, o índice está pronto para lidar com consultas de pesquisa. Os seguintes tipos de consultas de pesquisa são suportados: simples, difusa, sensível a maiúsculas e minúsculas, booleana, frasal, facetada, com curingas e outras. A descrição das consultas de pesquisa de vários tipos é apresentada na seção Pesquisando.
  • Usar resultados de pesquisa: quando uma pesquisa é concluída, você precisa interpretar um resultado de alguma forma. O resultado pode ser representado por uma simples lista de documentos encontrados, ou as palavras e frases encontradas podem ser destacadas no texto do documento. Para obter mais informações sobre o processamento dos resultados da pesquisa, consulte Resultados da pesquisa.
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));
}

O código acima gera a seguinte saída e arquivo HTML.

Pesquisar em campos de documentos usando C#

A pesquisa facetada está filtrando os resultados da pesquisa definindo nomes de campos de documentos válidos para pesquisa. A pesquisa facetada permite pesquisar apenas em determinados campos de documentos, por exemplo, apenas no campo de conteúdo ou no campo de nome do arquivo. Um exemplo simples de pesquisa facetada é apresentado abaixo com consultas em forma de texto e 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);

Usando campos específicos de formato

Para cada formato de documento, existem campos padrão que podem estar presentes em documentos desse tipo. A biblioteca fornece as seguintes classes contendo constantes com os nomes dos campos de documento padrão: EpubFieldNames, FictionBookFieldNames, MailFieldNames, PresentationFieldNames, SpreadsheetFieldNames , WordsFieldNames.

Há também campos que podem estar presentes em documentos de qualquer tipo. Os nomes desses campos são representados na classe CommonFieldNames.

Um exemplo de uso de nomes de campo padrão de documentos é apresentado no exemplo a seguir.

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

Informações detalhadas sobre a pesquisa facetada são apresentadas na página Pesquisa facetada.

Conclusão

Este artigo explicou como pesquisar documentos (DOCX, PDF, Excel, arquivos de texto) para obter informações específicas em C#. Também explicou como pesquisar nos campos de documentos. O GroupDocs.Search contém vários outros recursos, verifique a documentação para saber mais sobre ele.