Tuesday, May 30, 2023

SpringとMySQLを用いた全文検索機能の実装

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

この文書では、SpringとMySQLを使用して基本的な全文検索機能を実装する方法を紹介します。

1. MySQL全文検索対応テーブルの作成

MySQLで全文検索を使用するには、該当するテーブルにFULLTEXTインデックスを作成する必要があります。以下の例のように必要な列にFULLTEXTインデックインデックスを作成します。

CREATE TABLE articles (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(200),
    content TEXT,
    FULLTEXT (title, content)
) ENGINE=InnoDB;

2. MySQLをSpring Bootプロジェクトに接続

MySQLをSpring Bootアプリケーションに接続するには、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を作成します。

@Entity
public class Article {
  @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  private String title;
  private String content;

  // 省略:Getter、Setter、およびコンストラクタ
}
@Repository
public interface ArticleRepository extends JpaRepository<Article, Long> {
}

4. 全文検索用のカスタムクエリの作成

ArticleRepositoryにカスタムクエリを作成して、MySQLの全文検索機能を活用します。

@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>

これで、検索コントローラーを作成できます。

@RestController
@RequestMapping("/api/articles")
public class ArticleController {
    private final ArticleRepository articleRepository;

    // 依存性注入(Dependency Injection)
    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