シニアジョブの人材管理システムでは、全文検索エンジンとしてElasticsearchを使っています。
Elasticsearchは業務で直接触るのは初めての初心者です。
昔はElasticSearchと思っていたり、Elasticって付いてるからAWSのサービスかーとか思ってた。
基本的に開発環境はDocker化したんですが、Elasticsearchは開発でもAWSに用意した1つを共用したままとなっていました。
1人のときはいいですが複数となると不整合が出て支障が出始めたのでローカル化しました。
バージョンとイメージ
AWSのAmazon Elasticsearch Service ダッシュボードで、現在使っているバージョンを確認したところ6.7となっていました。
近いうちに7へのバージョンアップは必要ですが一旦それに合わせる形で近い6.8.6を使用しました(メジャーバージョン同じなら動くやろ)。
docker-compose.yml
公式イメージで特に問題なさそうなのでDockerfileはなし。
docker-compose.ymlへの追加とデータ保持用にディレクトリだけ作っておきます。
version: '3' services: app: container_name: app build: context: ./ dockerfile: ./Dockerfiles/app/Dockerfile environment: - TZ=Asia/Tokyo depends_on: - elasticsearch # 省略 elasticsearch: container_name: elasticsearch image: docker.elastic.co/elasticsearch/elasticsearch:6.8.6 volumes: - ./Dockerfiles/elasticsearch/data:/usr/share/elasticsearch/data environment: - discovery.type=single-node ports: - "9200:9200"
index の設定をjsonで書き出す
mappingとsettingsの設定が必要な場合は、jsonで出力しておきます。
今回すでにあるのを使ったのでやってないけど、たぶん普通にindex名にGETして返ってきたのから不要なの(uuidとかversionとか)を消して使えばいいと思う(てきとー)。
curl -XGET "https://elasticsearch-host/scout?pretty" > create_index.json
jsonを利用してindex作成
docker-compose upで起動したら、上記で出力したjsonを元にindexを作成します。
curl -XPUT "http://localhost:9200/scout?pretty" -H "Content-type: application/json" -d @./path/to/create_index.json
反映コマンドでDB→Elasticsearchにインポート
インポートはartisan scout:importを使ってもできますが、特殊な処理がいるので独自に実装してるのでこんな感じ。
docker-compose exec app php artisan reflect:elasticsearch
最初mappingとsettingsはあとでいいだろーと先にインポートをやってしまいましたが、後からは変更できないので、DELETEして再度やり直しが必要になりました。
現在開発用のDBデータも数十GBあり、初回読み込みには2時間ぐらいかかり、MacBook Proのファンが全開でした。