全文検索は、ドキュメントのコレクション内のテキスト/クエリを検索する方法です。このアプローチは、用語/フレーズのすべてのインスタンスをすばやく見つけ、テキストインデックスを使用して機能します。この記事では、Javaを使用してドキュメント内のフルテキストをプログラムで検索する方法を学習します。

全文検索

この後、さまざまな検索手法を実装し、ワードプロセッシングドキュメント、スプレッドシート、プレゼンテーション、HTMLファイル、PDFファイル、電子書籍、電子メールメッセージ、ZIPアーカイブ、およびその他の多くのドキュメント形式の検索ソリューションを構築できます。

以下のトピックについて説明します。

全文検索用のJavaAPI

GroupDocs.Searchは、サードパーティのツールやソフトウェアに依存することなく、任意のアプリケーションに統合できる全文検索JavaAPIを提供します。 ドキュメント形式の大規模なリストを検索することができます。 APIを使用して実行できる検索手法のいくつかは次のとおりです。

  • 大文字と小文字を区別する検索
  • 正規表現検索
  • ファセット検索
  • あいまい検索
  • 同音異義語検索
  • 同義語検索

ダウンロードまたは構成

ダウンロードセクションからJARファイルをダウンロードするか、mavenベースのJavaアプリケーションのpom.xmlの最新のリポジトリと依存関係の構成を取得することができます。

<repository>
	<id>GroupDocsJavaAPI</id>
	<name>GroupDocs Java API</name>
	<url>http://repository.groupdocs.com/repo/</url>
</repository>
<dependency>
        <groupId>com.groupdocs</groupId>
        <artifactId>groupdocs-search</artifactId>
        <version>21.3</version> 
</dependency>

フォルダに保存されているファイル内で検索を実行するには、2つの手順があります。

  • インデックス作成
  • 検索を実行します

Javaを使用したインデックスファイル

インデックスには、すべてのドキュメントのスキャンされたテキストが含まれています。したがって、検索操作を実行する場合は、元のドキュメントのテキストではなく、インデックスのみが参照されます。同じまたは異なるファイル形式の何千ものドキュメントを即座に検索できるようにするには、インデックスを作成してこれらのドキュメントを追加する必要があります。ドキュメントにインデックスが付けられると、インデックスは検索クエリを処理できるようになります。

次の単純な2行でインデックスを作成し、ドキュメントフォルダをインデックスに追加します。

Index index = new Index("indexingFolderPath");
index.add("documentsFolderPath");

(Word、PDF、Excel、HTML) など、同じ形式または異なる形式の複数のドキュメントにインデックスを付けた後、特定の検索クエリ(検索用語「描画」) を処理することができます。以下は、Javaを使用してフォルダ内の複数のドキュメントでテキスト検索を実行する方法の手順です。

  • ドキュメントのソースフォルダとインデックスフォルダを指定します。
  • インデックスフォルダを使用してインデックスを作成します。
  • ソースフォルダをインデックスに追加します。
  • クエリ文字列を準備します。
  • Indexクラスのsearchメソッドで検索してください。
  • 各ドキュメントのプロパティについて、各検索結果をトラバースします。

次のソースコードは、提供されたフォルダのすべてのドキュメントに対してJavaでテキスト検索を実行します。

// Javaを使用して、フォルダ内の複数のPDF、Word、Excel、HTMLドキュメントで指定されたテキストを検索します
Index index = new Index("path/indexingFolder");
index.add("path/documentsFolderPath");

// 指定されたテキストをインデックスで検索
SearchResult result = index.search("Draw");

for (int i = 0; i < result.getDocumentCount(); i++) {
    FoundDocument document = result.getFoundDocument(i);
    System.out.println("Document Path: " + document.getDocumentInfo().getFilePath());
    System.out.println("Occurrence : " + document.getOccurrenceCount());
}

その指定されたフォルダを持つすべてのドキュメントで、ドキュメントパスと検索語の出現回数を取得します。これが視覚化のためのスクリーンショットです。

全文検索テキスト出力

Javaでテキスト検索結果を強調表示する

ここで、同じ全文検索を実行し、クエリに一致するすべての出現箇所を強調表示してみましょう。

次の手順は、テキスト検索結果を強調表示する方法を示しています。

  • インデックスを作成し、ドキュメントフォルダをインデックスに追加します。
  • クエリ文字列を準備します。
  • 検索方式でドキュメントフォルダを検索してください。
  • 結果をトラバースしながら、HtmlHighlighterを使用して蛍光ペンを作成します。
  • 検索結果を強調表示するには、強調表示方法を使用します。

次のコードは、Javaを使用して検索結果が強調表示されたHTML出力を生成します。

// Javaのフォルダ内の複数のドキュメントの全文検索結果を強調表示する
Index index = new Index("path/indexingFolder");
index.add("path/documentsFolderPath"); // Synchronous indexing documents from the specified folder

String query = "draw"; // Specify a search query
SearchResult result = index.search(query); // Searching in the index

for (int i = 0; i < result.getDocumentCount(); i++) 
{
    FoundDocument document = result.getFoundDocument(i);

    String path = "path/Highlighted-"+ i +".html";
    OutputAdapter outputAdapter = new FileOutputAdapter(path); 
    HtmlHighlighter highlighter = new HtmlHighlighter(outputAdapter); // Creating the highlighter
    index.highlight(document, highlighter); // Generates HTML formatted output document with highlighted search results
}

出力として、複数のHTMLファイルを取得します。各ファイルには、個別のドキュメント(excel.xlsx、source.docx、target.docxなど) のコンテンツが強調表示された検索用語/単語とともに表示されます。以下に示すのは、上記のコードを使用して取得したDOCXファイル、TXTファイル、およびPDFファイルの強調表示されたHTML出力です。

Javaを使用してコンテンツ内の全文検索結果を強調表示する

無料のAPIライセンスを取得する

評価の制限なしにAPIを使用するために、無料の一時ライセンスを取得できます。

結論

この記事では、Javaのフォルダの複数のドキュメント内のテキストを検索する方法を学びました。さらに、GroupDocs.Search for Javaを使用して、MS Wordファイル、TXTファイル、およびPDFファイルの検索結果のテキストをHTML形式でプログラムで強調表示する方法について説明しました。

ドキュメントを使用してAPIの詳細を学ぶことができます。 GitHubには、さらに多くの例があります。お問い合わせは、フォーラムまでお問い合わせください。

関連項目