Java を使用して Elasticsearch に基づく全文検索アプリケーションを開発する方法
全文検索は、今日の情報化時代において非常に重要なテクノロジです。大量のテキストデータから、ユーザーが必要とするキーワードや関連情報を検索します。 Elasticsearch は、オープンソースの分散検索エンジンとして、その効率的な全文検索機能、リアルタイムのデータ分析、およびスケーラビリティにより広く使用されています。この記事では、Java を使用して Elasticsearch に基づく全文検索アプリケーションを開発する方法と、具体的なコード例を紹介します。
- 準備作業
開発を開始する前に、次の作業を準備する必要があります。 - Java 開発環境 (JDK) のインストール
- Elasticsearch サーバーのインストールおよびサービスを開始します。
- Elasticsearch Java クライアント ライブラリをインポートします。たとえば、Maven を使用して次の依存関係をインポートします。
<dependencies> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>7.10.0</version> </dependency> </dependencies>
- Elasticsearch クライアントを作成します
最初に、Elasticsearch サーバーへの接続に使用するクライアントを作成する必要があります。次のコードを使用してクライアント インスタンスを作成できます。
import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestClientBuilder; import org.elasticsearch.client.RestHighLevelClient; public class ElasticsearchClient { public static RestHighLevelClient createClient() { // 配置Elasticsearch服务器地址 RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "http")); // 创建高级客户端实例 RestHighLevelClient client = new RestHighLevelClient(builder); return client; } }
- インデックスの作成
次に、ドキュメント データを保存するためのインデックス (Index) を作成する必要があります。インデックスはデータベースのテーブルに似ており、さまざまな種類のドキュメント データをさまざまなインデックスに保存できます。次のコードを使用してインデックスを作成できます。
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest; import org.elasticsearch.action.admin.indices.create.CreateIndexResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.XContentFactory.*; public class IndexCreator { public static void createIndex(String indexName) { try { RestHighLevelClient client = ElasticsearchClient.createClient(); // 创建索引请求 CreateIndexRequest request = new CreateIndexRequest(indexName); // 设置索引的映射规则 XContentBuilder mappingBuilder = XContentFactory.jsonBuilder(); mappingBuilder.startObject(); mappingBuilder.startObject("properties"); mappingBuilder.startObject("title"); mappingBuilder.field("type", "text"); mappingBuilder.endObject(); mappingBuilder.startObject("content"); mappingBuilder.field("type", "text"); mappingBuilder.endObject(); mappingBuilder.endObject(); mappingBuilder.endObject(); request.mapping(mappingBuilder); // 执行创建索引请求 CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT); // 处理响应结果 if (response.isAcknowledged()) { System.out.println("索引创建成功:" + indexName); } else { System.out.println("索引创建失败:" + indexName); } // 关闭客户端连接 client.close(); } catch (Exception e) { e.printStackTrace(); } } }
- インデックス ドキュメント
インデックスを取得した後、ドキュメント データをインデックスに保存できます。ドキュメントはデータベースのレコードに似ており、複数のドキュメントを同じインデックスの下に保存できます。次のコードを使用して、ドキュメント データをインデックスに保存できます。
import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.xcontent.XContentType; public class DocumentIndexer { public static void indexDocument(String indexName, String documentId, String title, String content) { try { RestHighLevelClient client = ElasticsearchClient.createClient(); // 创建文档索引请求 IndexRequest request = new IndexRequest(indexName); request.id(documentId); request.source("title", title); request.source("content", content); // 执行文档索引请求 IndexResponse response = client.index(request, RequestOptions.DEFAULT); // 处理响应结果 if (response.status().getStatus() == 201) { System.out.println("文档索引成功:" + documentId); } else { System.out.println("文档索引失败:" + documentId); } // 关闭客户端连接 client.close(); } catch (Exception e) { e.printStackTrace(); } } }
- ドキュメントの検索
ドキュメント インデックスを使用すると、全文検索を通じてキーワードを含むドキュメントを検索できます。 . .次のコードを使用してドキュメント検索を実行できます。
import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.QueryBuilders.*; import org.elasticsearch.search.builder.SearchSourceBuilder; public class DocumentSearcher { public static void searchDocument(String indexName, String keyword) { try { RestHighLevelClient client = ElasticsearchClient.createClient(); // 创建搜索请求 SearchRequest request = new SearchRequest(indexName); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.query(QueryBuilders.matchQuery("content", keyword)); request.source(sourceBuilder); // 执行搜索请求 SearchResponse response = client.search(request, RequestOptions.DEFAULT); // 处理响应结果 if (response.getHits().getTotalHits().value > 0) { System.out.println("搜索结果:"); for (SearchHit hit : response.getHits().getHits()) { System.out.println(hit.getSourceAsString()); } } else { System.out.println("未找到相关文档"); } // 关闭客户端连接 client.close(); } catch (Exception e) { e.printStackTrace(); } } }
上記のコード例を使用すると、Elasticsearch に基づく全文検索アプリケーションの開発を完了できます。インデックスを作成し、ドキュメントにインデックスを付け、ドキュメントを検索することで、効率的かつ正確な全文検索を実現できます。もちろん、Elasticsearch は上記の基本機能に加えて、さまざまな高度なクエリ、集計分析、分散デプロイメントなどの機能もサポートしており、特定のニーズに応じてさらに開発および拡張することができます。この記事があなたのお役に立てば幸いです。また、全文検索の分野でのさらなる成功をお祈りしています。
以上がJava を使用して Elasticsearch に基づく全文検索アプリケーションを開発する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、
