Java で全文検索と全文検索を実行する方法
全文検索と検索は、大規模なテキスト データから特定のキーワードや語句を見つけるための手法です。 。検索エンジン、電子メール システム、文書管理システムなど、大量のテキスト データを処理するアプリケーションでは、全文検索および検索機能が非常に重要です。
Java は広く使用されているプログラミング言語として、全文検索および検索機能の実装に役立つ豊富なライブラリとツールを提供します。この記事では、Lucene ライブラリを使用して全文検索と検索を実装する方法を紹介し、いくつかの具体的なコード例を示します。
まず、Lucene ライブラリをプロジェクトに導入する必要があります。 Lucene ライブラリは、次の方法で Maven プロジェクトに導入できます:
<dependencies> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>8.10.1</version> </dependency> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-analyzers-common</artifactId> <version>8.10.1</version> </dependency> </dependencies>
全文検索を実行する前に、まずインデックスを作成する必要があります。このインデックスには、後続の検索操作を実行できるように、検索対象のテキスト データに関する関連情報が含まれています。以下は、インデックスを作成するための簡単なコード例です。
import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import java.io.IOException; import java.nio.file.Paths; public class Indexer { private IndexWriter indexWriter; public Indexer(String indexDir) throws IOException { Directory dir = FSDirectory.open(Paths.get(indexDir)); Analyzer analyzer = new StandardAnalyzer(); IndexWriterConfig config = new IndexWriterConfig(analyzer); indexWriter = new IndexWriter(dir, config); } public void close() throws IOException { indexWriter.close(); } public void addDocument(String content) throws IOException { Document doc = new Document(); doc.add(new TextField("content", content, Field.Store.YES)); indexWriter.addDocument(doc); } }
上記のコード例では、IndexWriter
を使用してインデックスを作成し、TextField
を使用してインデックス付きフィールドを定義します。田畑。インデックス付けするコンテンツをインデックスに追加する場合は、最初に Document
オブジェクトを作成し、次にそのオブジェクトにフィールドを追加し、最後に addDocument
メソッドを呼び出して Document を追加する必要があります。
オブジェクトがインデックスに追加されます。
インデックスを作成した後、検索操作を実行できます。以下は簡単な検索サンプル コードです。
import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import java.io.IOException; import java.nio.file.Paths; public class Searcher { private IndexSearcher indexSearcher; private QueryParser queryParser; public Searcher(String indexDir) throws IOException { Directory dir = FSDirectory.open(Paths.get(indexDir)); Analyzer analyzer = new StandardAnalyzer(); IndexReader indexReader = DirectoryReader.open(dir); indexSearcher = new IndexSearcher(indexReader); queryParser = new QueryParser("content", analyzer); } public ScoreDoc[] search(String queryString, int numResults) throws Exception { Query query = queryParser.parse(queryString); TopDocs topDocs = indexSearcher.search(query, numResults); return topDocs.scoreDocs; } public Document getDocument(int docID) throws IOException { return indexSearcher.doc(docID); } }
上記のサンプル コードでは、IndexSearcher
を使用して検索操作を実行します。検索を実行する前に、検索するクエリを表す Query
オブジェクトを作成し、QueryParser
を使用してクエリ文字列を Query
オブジェクトに解析する必要があります。 。次に、IndexSearcher
の search
メソッドを使用して検索を実行し、検索結果のランキングを返します。
全文取得・検索機能を使用したサンプルコードです:
public class Main { public static void main(String[] args) { String indexDir = "/path/to/index/dir"; try { Indexer indexer = new Indexer(indexDir); indexer.addDocument("Hello, world!"); indexer.addDocument("Java is a programming language."); indexer.addDocument("Lucene is a full-text search engine."); indexer.close(); Searcher searcher = new Searcher(indexDir); ScoreDoc[] results = searcher.search("Java", 10); for (ScoreDoc result : results) { Document doc = searcher.getDocument(result.doc); System.out.println(doc.getField("content").stringValue()); } } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
上記サンプルコードでは、まず#を作成します。 ## Indexer を使用してインデックスを作成し、テキスト データを追加します。次に、検索を実行し、検索結果のテキスト コンテンツを出力するための
Searcher を作成します。
以上がJava で全文取得と検索を実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。