문서의 전체 텍스트 검색

우리는 종종 애플리케이션이 텍스트 검색 쿼리로 지정된 특정 정보에 대한 문서를 검색할 수 있도록 하는 전체 텍스트 검색 API가 필요합니다. 문서는 Word(Doc, Docx), PDF, HTML, EPUB, 스프레드시트(XLS, XLSX), 프레젠테이션(PPT, PPTX), 이미지 및 비디오와 같은 모든 형식이 될 수 있습니다.

GroupDocs.Search는 애플리케이션에서 70개 이상의 문서 형식을 검색할 수 있는 강력한 전체 텍스트 검색 API입니다. 수천 개의 문서를 즉시 검색할 수 있으려면 해당 문서를 색인에 추가해야 합니다.

GroupDocs.Search를 개발자로 사용하는 이유는 무엇입니까?

  • 지원되는 형식의 문서를 검색하기 위해 추가 소프트웨어가 필요하지 않습니다.
  • 모든 요구 사항을 충족하기 위해 다양한 색인 및 검색 옵션이 제공됩니다.
  • 텍스트 또는 개체 형식 쿼리에서 다양한 검색 유형을 사용할 수 있습니다.
  • 고유한 알고리즘 및 데이터 구조, 최적화 및 다중 스레드 실행을 통해 높은 인덱싱 및 검색 성능을 얻을 수 있습니다.
  • 문서의 텍스트에서 검색 결과를 시각화하는 다양한 방법이 지원됩니다.

검색 엔진 분류에서 GroupDocs.Search API가 차지하는 위치는 검색 엔진 정보 문서를 참조하십시오.

설치

GroupDocs.Search for .NET은 NuGet에서 호스팅되며 NuGet 패키지 관리자를 사용하여 쉽게 설치할 수 있습니다. 또는 다운로드 섹션에서 API의 DLL을 다운로드할 수 있습니다.

C#을 사용하여 Office 문서 검색

다음 단계에서는 여러 문서(Word, Excel, PDF 및 기타 문서 형식)에서 단어 또는 구를 검색하는 방법을 설명합니다.

  • 새 인덱스 생성: 먼저 인덱스를 생성해야 합니다. 인덱스는 메모리나 디스크에 만들 수 있습니다. 메모리에 생성된 인덱스는 프로그램을 종료한 후 저장할 수 없습니다. 반대로 디스크에 생성된 인덱스는 향후 작업을 계속하기 위해 로드될 수 있습니다. 인덱스 생성에 대한 자세한 내용은 색인 생성 섹션에 설명되어 있습니다.
  • 인덱스 이벤트 구독: 인덱스를 생성한 후, 인덱싱을 위해 인덱스에 문서를 추가해야 합니다. 문서 인덱싱은 디스크에서 읽기 오류 또는 문서에 액세스하기 위한 암호가 있는 등 다양한 이유로 성공하거나 실패할 수 있습니다. 인덱싱 오류에 대한 정보를 받으려면 ErrorOccurred 이벤트를 구독하면 됩니다. 이벤트로 작업하려면 검색 인덱스 이벤트 섹션을 참조하십시오.
  • 문서 인덱싱: 문서 인덱싱은 동기식 또는 비동기식으로 수행할 수 있습니다. 동기 인덱싱은 인덱싱 프로세스를 시작한 스레드가 작업이 완료될 때까지 사용 중임을 의미합니다. 그러나 작업을 시작한 스레드에서 다른 작업을 실행할 수 있는 기능을 사용하여 인덱싱을 비동기적으로 수행해야 하는 경우가 더 많습니다. 인덱싱 프로세스의 모든 측면에 대한 자세한 설명은 인덱싱 섹션에서 제공됩니다.
  • 검색 수행: 문서가 색인화되면 색인은 검색 쿼리를 처리할 준비가 됩니다. 단순, 퍼지, 대소문자 구분, 부울, 구, 패싯, 와일드카드 포함 등의 검색 쿼리가 지원됩니다. 다양한 유형의 검색어에 대한 설명은 검색 섹션에 나와 있습니다.
  • 검색 결과 사용: 검색이 완료되면 결과를 어떻게든 해석해야 합니다. 결과는 찾은 문서의 간단한 목록으로 표시하거나 찾은 단어와 구문을 문서 텍스트에서 강조 표시할 수 있습니다. 검색 결과 처리에 대한 자세한 내용은 검색 결과를 참조하십시오.
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));
}

위의 코드는 다음과 같은 출력과 HTML 파일을 생성합니다.

C#을 사용하여 문서 필드에서 검색

패싯 검색은 검색할 유효한 문서 필드 이름을 설정하여 검색 결과를 필터링하는 것입니다. 패싯 검색을 사용하면 문서의 특정 필드(예: 콘텐츠 필드 또는 파일 이름 필드)에서만 검색할 수 있습니다. 텍스트 및 개체 형식의 쿼리와 함께 간단한 패싯 검색 예제가 아래에 나와 있습니다.

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

형식별 필드 사용

각 문서 형식에 대해 이 유형의 문서에 있을 수 있는 표준 필드가 있습니다. 라이브러리는 표준 문서 필드의 이름이 있는 상수를 포함하는 다음 클래스를 제공합니다. EpubFieldNames, FictionBookFieldNames, MailFieldNames, PresentationFieldNames, SpreadsheetFieldNames , WordsFieldNames.

모든 유형의 문서에 있을 수 있는 필드도 있습니다. 이러한 필드의 이름은 CommonFieldNames 클래스에 표시됩니다.

문서의 표준 필드 이름을 사용하는 예는 다음 예에 나와 있습니다.

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

패싯 검색에 대한 자세한 정보는 패싯 검색 페이지에 나와 있습니다.

결론

이 문서에서는 문서(DOCX, PDF, Excel, 텍스트 파일)를 통해 C#의 특정 정보를 검색하는 방법을 설명했습니다. 또한 문서 필드에서 검색하는 방법에 대해서도 설명했습니다. GroupDocs.Search에는 몇 가지 다른 기능이 포함되어 있습니다. 자세한 내용은 문서를 확인하십시오.