ドキュメントの全文検索

多くの場合、アプリケーションがテキスト検索クエリとして指定された特定の情報についてドキュメントを検索できるようにする全文検索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);

フォーマット固有のフィールドの使用

ドキュメント形式ごとに、このタイプのドキュメントに存在する可能性のある標準フィールドがあります。ライブラリは、標準のドキュメントフィールドの名前を持つ定数を含む次のクラスを提供します:EpubFieldNamesFictionBookFieldNamesMailFieldNamesPresentationFieldNamesSpreadsheetFieldNamesWordsFieldNames

あらゆるタイプのドキュメントに存在する可能性のあるフィールドもあります。このようなフィールドの名前は、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には他にもいくつかの機能が含まれています。詳細については、ドキュメントを確認してください。