概要
meilisearchは素晴らしいプロダクトなんだけど、通常ビルドだと日本語がイマイチ。
原因はトーカナイザにあって、中国語と日本語の判定に問題、、、というか日本語と中国語のコード体系に被りあるのが問題である。
どうせ日本語でしか使わないので、強制的に日本語固定にする作戦を決行する(中の人がたまに作ってくれるのだが、毎回作ってくれないので自分で作る)。
準備
- wsl2で確認
- git、rust、jq(サンプルデータ投入で使う)のインストール
コード
#!/bin/sh
git clone https://github.com/meilisearch/meilisearch
cd meilisearch
sed -i -e "s/cargo build --release$/cargo build --release --no-default-features --features \"analytics mini-dashboard japanese\"/g" ./Dockerfile
VERSION=`grep version ./Cargo.toml | awk '{print $3}' | sed -e 's/"//g'`
docker build -t meilisearch-jp:v${VERSION} .
解説
sedの部分の1行だけ。そのあとdocker buildしてます。
ビルドにはそれなりに時間が掛かる。数分以上待つ。
docker起動
docker run -it --rm -p 7700:7700 -v $(pwd)/meili_data:/meili_data meilisearch-jp:v1.4.0
v1.4.0は適宜置き換え
Webブラウザで、http://localhost:7700/ で動作確認。まだindexがカラなので検索は確認できない。
サンプルデータ投入
郵便番号で試してみます。
https://www.post.japanpost.jp/zipcode/dl/utf-zip.html
によると2023年6月更新分よりutf8が増えたみたいです。
なおmeiliseachのデータ投入はjsonで行います。
csv → json変換
wget https://www.post.japanpost.jp/zipcode/dl/utf/zip/utf_all.zip
unzip utf_all.zip
cat utf_all.csv | tr -d '"' | sed -z 's/\n$//' | jq -s -R 'split("\n")|map(split(","))|map({"id" : .[2], "col1": (. [3] + " " + . [4] + " " + . [5]), "col2": (. [6] + " " + . [7] + " " + . [8])})' > utf_all.json
id:郵便番号、col1:住所カナ、col2:住所。 ↓ 以下参照
jsonデータ投入
curl \
-X POST 'http://localhost:7700/indexes/sample1/documents?primaryKey=id' \
-H 'Content-Type: application/json' \
--data-binary @utf_all.json
index名はsample1。
(おまけ)index 削除
curl -X DELETE 'http://localhost:7700/indexes/sample1'
以上。