1 はじめに
Elasticsearch は、大規模なデータセットを処理するために設計されたオープン ソースの検索エンジンです。これは Apache Lucene 検索エンジン ライブラリに基づいて構築されていますが、インデックスの作成と管理、検索の実行、大量のデータの処理などを行うための、よりシンプルで使いやすい API を提供します。
Elasticsearch は、高速でリアルタイムの検索と分析をサポートし、構造化されたデータと構造化されていないデータの両方を大量に処理できます。e コマース、ソーシャル メディア、ロギング、セキュリティ、コンプライアンスなど、さまざまなアプリケーションに簡単に統合できます。
Elasticsearch の主な機能は次のとおりです。
- 高速でリアルタイムの検索
- 大量のデータのインデックス作成と保存
- データの分析と視覚化
- スケーラブルで可用性の高いクラスターを提供
- セキュリティとコンプライアンスを提供する機能
2. ELS のクエリ速度が速いのはなぜですか?
2.1 逆索引
Elasticsearch は、Lucene の逆インデックス メカニズムを使用して、各ドキュメント内の各用語をドキュメントの一意の識別子にマップします。ユーザーがクエリを実行すると、Elasticsearch は逆インデックスを使用して、すべてのドキュメントをトラバースするのではなく、クエリ ワードを含むすべてのドキュメントを検索します。
2.2 分散検索
Elasticsearch はインデックス シャードを複数のサーバーに保存するため、大量のデータを処理できます。ユーザーがクエリを実行すると、Elasticsearch はすべてのシャードを検索し、結果を組み合わせてユーザーに返します。
2.3 キャッシングメカニズム
Elasticsearch は、よく使用されるクエリ結果をキャッシュします。次回同じコンテンツをクエリするときに、結果をキャッシュから直接読み取ることができるため、クエリが高速化されます。
2.4 マルチフィールドクエリ
Elasticsearch は複数のフィールドを同時にクエリできるため、ユーザーはクエリ条件をより柔軟に組み合わせて、クエリの効率を向上させることができます。
2.5 検索候補
Elasticsearch は、ユーザーのクエリに基づいて検索候補を自動的に提供し、ユーザーが関連するコンテンツをすばやく見つけられるようにします。
3. ELS はディスクベースですか、それともメモリベースですか?
Elasticsearch はディスクベースの検索エンジンですが、メモリを利用して検索とクエリを高速化します。
具体的には、Elasticsearch はインデックスとデータを ディスクに保存し、人気のあるデータと検索リクエストの結果をメモリにキャッシュします。これにより、Elasticsearch は効率的に検索およびクエリを実行し、リアルタイムの検索および分析機能を提供できます。
同時に、Elasticsearch は、さまざまなアプリケーション シナリオやハードウェア リソースに適応するために、メモリとディスクの使用を最適化するためのさまざまな構成オプションも提供します。
4. サービス構築
参考:Advanced Java - Linux builds Elasticsearch service_Yi_Sen_Z's Blog - CSDN Blog
5. テキスト
5.1 Elasticsearch クライアントの依存関係を追加する
Spring Boot プロジェクトでは、Elasticsearch クライアントの依存関係を追加する必要があります。依存関係は、Maven または Gradle ビルド ツールを介して追加できます。
メイヴン:
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.12.1</version>
</dependency>
グレード:
dependencies {
implementation 'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.12.1'
}
5.2 Elasticsearch クライアントの構成
Elasticsearch サーバーに接続できるように、Elasticsearch クライアントを構成します。次のプロパティを application.properties または application.yml ファイルに追加できます
spring.elasticsearch.rest.uris=http://localhost:9200
5.3 Elasticsearch クライアントを作成する
Elasticsearch クライアントを作成して、それを使用して Elasticsearch サーバーと対話できるようにします。Elasticsearch クライアントは RestHighLevelClient クラスを使用して作成できます
@Configuration
public class ElasticsearchConfig {
@Value("${spring.elasticsearch.rest.uris}")
private String[] uris;
@Bean(destroyMethod = "close")
public RestHighLevelClient restHighLevelClient() {
RestClientBuilder restClientBuilder = RestClient.builder(
new HttpHost(uris[0], 9200, "http")
);
return new RestHighLevelClient(restClientBuilder);
}
}
5.4 Elasticsearch リポジトリの作成
SpringBoot アプリケーションでは、データを Elasticsearch サーバーに保管できるように、Elasticsearch リポジトリーを作成する必要があります。Spring Data Elasticsearch を使用して、Elasticsearch リポジトリの作成を簡素化できます
@Repository
public interface BookRepository extends ElasticsearchRepository<Book, String> {
}
このリポジトリは、Spring Data Elasticsearch によって提供されるデフォルトの実装を使用します。Elasticsearch のドキュメントは、カスタム クエリ メソッドを使用して検索できます。たとえば、次のコードを使用して、Elasticsearch で書籍を検索できます。
public List<Book> searchBooks(String query) {
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.queryStringQuery(query))
.build();
Page<Book> page = bookRepository.search(searchQuery);
return page.getContent();
}