Rails / Elasticsearch / Vue.js でオライリー書籍名と目次の全文検索を試す

業務でElasticsearchを触ったので忘れないうちに実装時のメモがてら適当な全文検索webアプリをつくってみました。

Githubリポジトリは下記です。production用途ではないためローカル開発環境で実行する準備しかしていません。

github.com


概要

念の為記載しますが、オライリーの書籍情報はあくまで個人の学習目的でスクレイピングしています。

本記事のコードを利用してスクレイピングを実行する際はオライリーのサイトに負荷をかけるようなスクレイピングはしないようご注意ください。


全文検索を試す

READMEのUsageのままですが、ざっくりと解説します。上記リポジトリのclone後の作業です。

buildしてコンテナを起動します。up -dでもOKですが初回起動時は-dなしで起動経過を確認してください。

docker-compose build
docker-compose up

起動したらappコンテナ内にログインして初期処理を手動で実行します。これはENRTYPOINTに設定してコンテナ起動時に自動実行したかったんですが手動にしてしまいました。

docker-compose exec app bash
# コンテナ内で
init.sh

コンテナにログインしたらスクレイピングのrakeタスクを実行します。

# コンテナ内
bundle exec rake scraping:oreilly

スクレイピングが完了したら、コンテナからログアウトします。その後、ローカルでフロントエンドアプリを起動します。

cd frontend
yarn install
yarn dev


技術的な話

  • RailsMySQL、Elasticsearchはdocker-composeで起動
  • バックエンドのRailsAPIモード
  • フロントエンドはコンテナではなくローカルで起動

バックエンドはdockerでRails、フロントエンドはローカルでVue.jsという少し中途半端?な構成です。

フロントエンドはVue RouterとVuexの勉強も兼ねていたのでNuxt.jsは使用しませんでした。


所感

  • 当然ですがElasticsearchの知識がないと何をどうして良いかわからず苦労するので書籍1冊読んでざっくりと全体像を把握しておくと良いです。
  • 全文検索は難しそうに見えますが実装自体はElasticsearchのgemがよろしくやってくれるので、gemのREADMEみながら作ればなんとかなりました。
  • Vue.jsのVue RouterがURL直接アクセスだと正しくページが表示されません。今だに対応できていません。

Elasticsearch実践ガイド (impress top gear)

Elasticsearch実践ガイド (impress top gear)