SpringbootとMySQLを使用した全文検索機能の実装
この文書では、SpringbootとMySQLを使用して基本的な全文検索機能を実装する方法を紹介します。
1. MySQL Full-Text 対応テーブルの作成
MySQLで全文検索を使用するには、該当するテーブルにFULLTEXTインデックスを作成する必要があります。以下の例のように必要なカラムにFULLTEXTインデックスを作成します。
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(200),
content TEXT,
FULLTEXT (title, content)
) ENGINE=InnoDB;
2. Spring BootプロジェクトでMySQLに接続
Spring BootからMySQLに接続するには、pom.xmlにMySQL Connector/Jの依存関係を追加する必要があります:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
次に、application.propertiesファイルに次のようにMySQLの接続情報を設定します:
spring.datasource.url=jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.jpa.hibernate.ddl-auto=update
3. Articleエンティティとリポジトリの作成
Article
エンティティとArticleRepository
を作成して、データベースとの接続を確立します:
import javax.persistence.*;
@Entity
public class Article {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String content;
// 省略:ゲッター、セッター、コンストラクタ
}
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ArticleRepository extends JpaRepository<Article, Long> {
}
4. 全文検索のためのカスタムクエリの作成
ArticleRepositoryにカスタムクエリを作成して、MySQLの全文検索機能を活用できるようにします:
import org.springframework.data.jpa.repository.Query;
@Repository
public interface ArticleRepository extends JpaRepository<Article, Long> {
@Query(value = "SELECT * FROM articles WHERE MATCH (title, content) AGAINST (?1)", nativeQuery = true)
List<Article> fullTextSearch(String keyword);
}
これで、fullTextSearch
メソッドを使用してタイトルとコンテンツにキーワードを含むすべての記事を検索できます。
5. 検索機能を使用するREST APIの実装
検索機能を使用するREST APIを実装するには、Spring Webの依存関係も追加する必要があります:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
次に、検索コントローラを作成します:
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/articles")
public class ArticleController {
private final ArticleRepository articleRepository;
// 依存性注入
public ArticleController(ArticleRepository articleRepository) {
this.articleRepository = articleRepository;
}
@GetMapping("/search")
public List<Article> search(@RequestParam String keyword) {
return articleRepository.fullTextSearch(keyword);
}
}
これにより、/api/articles/search?keyword=検索語
エンドポイントを介して検索機能を使用できます。
必要に応じて、全文検索機能をカスタマイズまたは拡張できます。この文書ではSpringとMySQLを使用して基本的な全文検索機能を実装する方法を紹介しました。必要な検索機能を適用するために、このガイドを参照してください。