yacyで自分のブックマークに対する検索エンジンを構築したい
動機
- 私のブラウザブックマークは年々肥大化を続けており、この文章を書いている時点で6306件が登録されている。
- 数百個ほどの階層的分類を設けることでどうにか管理しているが、これだけの数があると、有益な情報を探し出すことが難しい。
- 私のブックマークをクロールして、私が知りたい情報を入力するとブックマークの中から検索してくれる代物がほしい。
yacyというセルフホストWeb検索エンジンが良いと聞く。
というか、この用途で使えそうなセルフホストWeb検索エンジンがyacy以外に見当たらない。
だいぶ歴史のあるソフトウェアのようだが、開発そのものは現在でも活発に続いているようだ。
ChatGPT上で使い方を調べるためのカスタムGPTまで作られている。
なんでも金盾に対抗するためのP2P検索エンジンとして作られたそう。私は検閲対策でyacyを使いたいわけではないのだが、P2P機能を無効にして利用することも出来るらしい。
yacy、めちゃめちゃdisられているな
地味にスペックが要求されるアプリケーションのようなので、ラズパイやVPSでなくM2 Mac miniに導入する。
スペック情報:
$ system_profiler SPHardwareDataType
Hardware:
Hardware Overview:
Model Name: Mac mini
Model Identifier: Mac14,3
Model Number: Z16L0005HJ/A
Chip: Apple M2
Total Number of Cores: 8 (4 performance and 4 efficiency)
Memory: 24 GB
System Firmware Version: 10151.121.1
OS Loader Version: 10151.121.1
Serial Number (system): ***************
Hardware UUID: ***************
Provisioning UDID: ***************
Activation Lock Status: Enabled
※このコマンドについては以下参照
Dockerで導入する。公式サイトの手順に従う。
M2チップなのでarm64アーキテクチャであることに留意する。
$ uname -m
arm64
Dockerhubを見ると、arm64に対応したイメージがあるようなので、これを導入する。
公式サイトの指定に従い、このようにする。
$ docker run -d --name yacy_search_server -p 8090:8090 -p 8443:8443 -v yacy_search_server_data:/opt/yacy_search_server/DATA --restart unless-stopped --log-opt max-size=200m --log-opt max-file=2 yacy/yacy_search_server:aarch64-latest
Unable to find image 'yacy/yacy_search_server:aarch64-latest' locally
aarch64-latest: Pulling from yacy/yacy_search_server
b9f330b3a7e2: Pull complete
8a80651adb7e: Pull complete
a7b38ee622cb: Pull complete
fc937997baec: Pull complete
59e38f86cda3: Pull complete
c6e13d0c838e: Pull complete
0bc46a296394: Pull complete
6b430dc5f854: Pull complete
4f4fb700ef54: Pull complete
2268075ae568: Pull complete
c9c3f6fd5783: Pull complete
156f3dc93b74: Pull complete
Digest: sha256:cc8edc7174147e07f36ebd88d9a6d18d094caf0c0dc0dc22b556047e87b473e5
Status: Downloaded newer image for yacy/yacy_search_server:aarch64-latest
4c37d59c82e8b84939833de1a99519694f9cc6cce22fb97e53b2670d05594b0d
この時点で、localhost:8090にyacyの画面が公開されている。
右上の「Administration」ボタンを押すと、管理画面に遷移する。
- 管理画面の操作の際にはBasic認証を求められる。デフォルトでのユーザ名:ログインパスは
admin:yacy
とのこと。変える。 - 管理画面は日本語にも対応していた。せっかくなので日本語表示に切り替えておく。
P2Pノードとしての運用のためには外部からのアクセスを受け入れる必要があるが、少なくとも今はポート開放はしないことにする。
さて、ここで私がやりたいことは「こちらが入力するURLリストをyacyにクロールさせること」だった。
「Converted from old-wiki; may be outdated」だというドキュメントに、一応そのやりかたの記述があった。
せっかくなので公式の質問用カスタムGPTに聞いてみようとしている…が、途中で出力が中断してしまい、正直使い物にならん。
とりあえず /Crawler_p.html
からクロールできるっぽい?
手始めに、GitHub, Qiita, Zenn, noteのお気に入りURLのリストを作り、ローカルファイルパス指定でクローラに突っ込んでみた。Java製だけあってだいぶメモリを食っていく(一瞬で7GBを持って行った)。
ここではyacyのプロセスはDockerコンテナの中で動いているので、URLリストをホストのMac miniからコンテナの中にコピーする必要があることに注意。
とりあえず上手く行ってるっぽい。途中何度かJVMの割当メモリ不足でクロールが停止したので、適当に2GBを割り当ててある。もうちょい増やしてもいいかも。
検索結果には改善の余地あり(P2P機能をオフにしているので、ローカル環境に保存されているインデックスだけを参照して検索している)。クロールが進んでインデックスが増えれば改善されるか?
次は本丸であるChromeのブックマークに。
ブラウザからエクスポートした".html"のブックマークファイルを操作するツールは自作済み。これを使ってURLリストを作り、さっきと同じようにクロールを開始させた。
進捗
その後の進捗。クロールが進んでだいぶマシになってきたかも?MDNが上の方に来ているのはえらい。
インデクシングが結構遅い。Docker for Macということもあってやはりパフォーマンスに不安があるので、ネイティブインストールをしてやり直すことにする。クロールもやりなおす。
homebrewでJava, OpenJDK, antを入れて、シンボリックリンクを貼って再起動してから
git clone --depth 1 https://github.com/yacy/yacy_search_server.git
cd yacy_search_server
ant clean all
Mac miniにはTailscaleを導入してある。なので、Tailnetに接続済みの端末であれば、http://tailnet上でのyacyホスト端末のipアドレス:8090 にアクセスするとyacyを使うことができる。