.../articles/

Laravel 日本一解りやすい全文検索のマイグレーション記載方法解説

Laravel + MySQLで全文検索を実装する

バックエンドエンジニアの赤岸です

先日全文検索機能を初めて実装したのですが、参考にしたネットに転がっている記事がよくわからない初心者に優しくないと感じました。
ですので当ブログは初心者でも簡単に!あっという間に!実装出来る方法を解説します

環境

Laravel8.x
MySql
Docker

ドキュメントの罠!機能不全な書き方

初心者の鑑なので、ドキュメントで全文検索の書き方を調べると
以下のように解説されていました。

$table->fulltext(‘body’); | フルテキストのインデックスを追加(MySQL/PostgreSQL)

https://readouble.com/laravel/8.x/ja/migrations.html

めっちゃ簡単じゃんチョロ〜と思ったんですが、
上記の書き方だと「部分一致でレコードが取得できない」という問題に直面します。ガッデム!!!
部分一致でレコードを取得するためには、ngram parserやmecabを使う必要があります。

更にデフォルトだと3文字以上の単語で検索する仕様になってます。日本語だと不便。
あらゆる熟語に対応できるよう、2文字以上の単語で検索出来るように設定変更してあげる必要もあります。

次の節で詳しく書きます

完成版|2文字以上の単語で部分一致させる書き方

2文字以上で検索する設定

Dockerを使っているので、MySQLの設定ファイル(xxx.cnf)に以下を記載します

[mysqld]
innodb_ft_min_token_size = 2

マイグレーションでngram parserを使う

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreatexxxTable extends Migration
{
    public function up()
    {
        Schema::create('xxx', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('hogehoge');
            $table->timestamps();
    });

    \DB::statement('ALTER TABLE テーブル名 ADD FULLTEXT INDEX インデックス名 (`該当カラム名`) with parser ngram');
}

    public function down()
    {
        Schema::dropIfExists('xxx');
    }
}

以上です。
これであなたも素敵な全文検索マスター

それではまた合う日まで
ごきげんようウフフフフ〜

.../articles/

Articles

記事

AWS AmplifyにmonorepoのNext.js(App Router)をデプロイする

AWS AmplifyにmonorepoのNext.js(App Router)をデプロイする

monorepo管理しているNext.jsをAmplifyにデプロイしようとした際にいくつか躓く内容があったのでまとめておきます。

リモートワーク・オンライン会議でも、スムーズに制作を進めるために大切なこと[資料編]

リモートワーク・オンライン会議でも、スムーズに制作を進めるために大切なこと[資料編]

コロナ禍の影響により、リモートワークの導入をおこなっている制作会社も多く、実際に弊社でも導入しています。

売れるECサイトデザインを作るために。参考にしたいおしゃれな事例の探し方。

売れるECサイトデザインを作るために。参考にしたいおしゃれな事例の探し方。

売れるECサイトのデザインは、「この形式」という決まりはありません。ECサイトで売り上げを上げるなら、しっかりとしたコンセプトと、コンセプトを決定するまでのリサーチが必要です。

制作会社の考える、業務効率化ツールのおすすめ。個人でも使いやすいサービスなど。

制作会社の考える、業務効率化ツールのおすすめ。個人でも使いやすいサービスなど。

新型コロナウイルス感染拡大の影響で、リモートワークが主流になり、弊社でも週のほとんどは各自宅で作業をしています。

Figmaでデザインのコミット履歴を残せるプラグイン【Thought Recorder】をリリースしました

Figmaでデザインのコミット履歴を残せるプラグイン【Thought Recorder】をリリースしました

Figmaを利用するWebデザイナーの助けになれると嬉しいです。使い方は本記事をご覧ください。

ECの構築方法、おすすめのECサービス。

ECの構築方法、おすすめのECサービス。

ファッションや家電、スーパーの買い物でさえもECサイトを利用することが当たり前になりました。加えて新型コロナウイルスの影響もあり、弊社にも「どんなプラットフォームを利用したら良いか」「どれくらいコストがかかるのか」などECに関するさまざまなご相談を頂きます。

FastAPIのスキーマクラスをOpenAPIから生成する方法

FastAPIのスキーマクラスをOpenAPIから生成する方法

PythonでAPIを構築する要件があり、フレームワークに比較的モダンなFastAPIを採用しました。FastAPIはバックエンドの開発を行えば自動でOepnApi定義を生成する機能が備わっていますが、今回はこれを使わず、事前に用意したOepnApi定義からFastAPIで利用するスキーマクラスを生成する方法を紹介します。

Laravel 日本一解りやすい全文検索のマイグレーション記載方法解説

Laravel 日本一解りやすい全文検索のマイグレーション記載方法解説

Laravel + MySQLで全文検索を実装する

とあるPythonのソースで sys.path.append としたく無かった話

とあるPythonのソースで sys.path.append としたく無かった話

とあるプロジェクトのとあるソースコードのレビューをしてた時、「ソースコードの参照がうまくいってなかったので修正しました」とレビュー依頼がきました。 ディレクトリ構造 ``` module L __init__.py L main.py L tests L __init__.py L test_main.py ``` ソースコード ``` python tests/test_main.py sys.path.append(os.path.abspath("..")) from main import fuga ``` 今まで案件でPythonに触れる機会も結構ありましたが、なんとなく使ってきた部分も多く、この書き方が良いのか悪いのか判別できなかったので、改めてPythonのモジュールのインポートに関して調べてみたのでブログにしました。普段PHPを書いている事が多くPythonに関して何も分からないので初心者向けの内容になっていると思います。

GiFT1号目新卒デザイナーの2021年振り返り

GiFT1号目新卒デザイナーの2021年振り返り

いつの間に、年末ですね。入社してもう、9ヶ月も立っていたようです。2021年の振り返りを記事にしました。

すべての記事

お問い合わせ