Thursday, September 7, 2023

Spring bootとMySQLを使用した全文検索機能の実装

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を使用して基本的な全文検索機能を実装する方法を紹介しました。必要な検索機能を適用するために、このガイドを参照してください。


0 개의 댓글:

Post a Comment