Spring Boot と Elasticsearch を使用して全文検索機能を実装する

WBOY
リリース: 2023-06-22 19:17:06
オリジナル
1690 人が閲覧しました

情報の爆発的な増加に伴い、ユーザーが必要な情報を迅速に入手することがますます困難になっています。この場合、全文検索機能の提供は、すべての Web サイトやアプリケーションにとって必須の機能の 1 つになります。この記事では、Spring Boot フレームワークと Elasticsearch データベースを使用してアプリケーションに全文検索機能を実装する方法を紹介します。

Elasticsearch とは何ですか?

Elasticsearch は、簡単なデータ分析とリアルタイム検索を可能にするオープンソースの分散型検索エンジンです。これは、Apache Lucene 検索エンジン ライブラリに基づいており、開発者がその機能に簡単にアクセスできるようにする RESTful API を提供します。 Elasticsearch を使用すると、構造化データ、非構造化データ、地理空間データなど、ほぼすべての種類のデータを保存および検索できます。

Spring Boot と Elasticsearch の統合

Spring Boot は、独立した運用ベースの Spring アプリケーションを構築するためのフレームワークです。自動構成と構成より規約のアプローチを通じて、Spring アプリケーションの開発を簡素化します。 Elasticsearch と統合するために、Spring Boot にはデフォルトの構成オプションとカスタマイズ オプションがいくつか用意されています。

まず、Elasticsearch の依存関係を Spring Boot アプリケーションに追加する必要があります。 build.gradle ファイルに次の依存関係を追加します。

dependency {

implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-elasticsearch', version: '2.5.0'
ログイン後にコピー

}

この依存関係を追加すると、Spring Data Elasticsearch のリポジトリ モードを簡単に使用できるようになります。ライブラリ モデルとインデックスを定義します。 Spring Data Elasticsearch は、アプリケーションから Elasticsearch を操作するための多くのクラスとメソッドを提供します。 Spring Boot アプリケーションの構成ファイルで Elasticsearch 接続構成を設定する必要もあります。 application.properties ファイルに次の設定を追加できます:

// elasticsearch のアドレスとポートを設定します
spring.data.elasticsearch.cluster-nodes=localhost:9200

// elasticsearch のユーザー名とパスワードを設定します (認証が必要な場合)
spring.data.elasticsearch.properties.username=elasticsearch
spring.data.elasticsearch.properties.password=password

Defineインデックスとタイプ

全文検索に Elasticsearch を使用する前に、まずインデックスとタイプを定義する必要があります。 Elasticsearch では、インデックスはデータベースに相当し、タイプはデータベース内のテーブルに相当します。 Spring Data Elasticsearch で提供されるアノテーションを使用して、エンティティとインデックスを定義できます。以下は簡単な例です:

// エンティティを定義します
@Document(indexName = "articles")
public class Article {

// 定义id
@Id
private String id;

// 定义标题
@Field(type = FieldType.Text)
private String title;

// 定义内容
@Field(type = FieldType.Text)
private String content;

// 定义创建时间
@Field(type = FieldType.Date)
private Date createTime;

// 省略get和set方法
ログイン後にコピー

}

上の例では、@Document アノテーションを使用してエンティティとインデックスを定義しました。 IndexName を記事としてインデックスを作成し、@Field アノテーションを使用して、Elasticsearch に保存する必要があるエンティティ内のフィールドにアノテーションを付けました。次に、ElasticsearchRepository クラスを継承する ArticleRepository へのインターフェイスを作成できます。このインターフェイスは、継承を通じて Elasticsearch に基づく多数のデータ クエリ メソッドを提供できます。以下は簡単な例です:

public Interface ArticleRepository extends ElasticsearchRepository {

List<Article> findByTitle(String title);
ログイン後にコピー

}

上記の例で定義された ArticleRepository インターフェイスの場合、Spring Data Elasticsearch は、サービス層インターフェイスを実装する具体的なエンティティ クラスを自動的に作成し、アプリケーションの起動時にそれを Spring コンテナに自動的に挿入します。このサービス インターフェイスでは、タイトルに基づいて記事をクエリするために使用される findByTitle メソッドを定義しました。実際に使ってみると、ArticleRepository経由でElasticsearchの追加、削除、クエリなどの操作を簡単に行うことができます。

全文検索機能の実装

エンティティ、インデックス、タイプを定義した後、それらに対して全文検索操作を開始できます。 Elasticsearch では、クエリを作成することで全文検索機能が実装されます。クエリは、指定されたインデックス、タイプ、フィールド内で検索を実行するプロセスです。以下は簡単な例です:

public Interface ArticleRepository extends ElasticsearchRepository {

List<Article> searchArticle(String keyword);
ログイン後にコピー

}

この例では、検索する searchArticle メソッドを定義します。記事。この方法では、次のように Elasticsearch の QueryBuilder ビルダーを使用してクエリ条件を構築できます:

public List

searchArticle(StringKeyword) {

NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
builder.withQuery(QueryBuilders.boolQuery()
            .should(QueryBuilders.matchQuery("title", keyword))
            .should(QueryBuilders.matchQuery("content", keyword)));
return elasticsearchTemplate.queryForList(builder.build(), Article.class);
ログイン後にコピー

}

#Hereでは、NativeSearchQueryBuilder を使用してクエリを作成します。 QueryBuilders を使用して、さまざまな種類のクエリを構築できます。ここでは、ブール クエリを使用して、タイトルとコンテンツにキーワードを含む記事を照合します。クエリが構築されたら、elasticsearchTemplate.queryForList() を使用してクエリを実行し、結果を取得できます。もちろん、Spring Data Elasticsearch が提供するさまざまなクエリ メソッドを使用してクエリ操作を実行することもできます。

要約

この記事では、Spring Boot と Elasticsearch を使用して全文検索機能を実装する方法を紹介します。まずはElasticsearchの基礎知識とSpring BootとElasticsearchの連携方法を紹介し、次にインデックスや型の定義、全文検索機能の実装方法について詳しく説明しました。この記事を学習した後は、Spring Boot アプリケーションに全文検索機能を簡単に統合できるため、ユーザーは必要な情報をより速く見つけることができます。

以上がSpring Boot と Elasticsearch を使用して全文検索機能を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!