Open15

yacyで自分のブックマークに対する検索エンジンを構築したい

ゆみやゆみや

動機

  • 私のブラウザブックマークは年々肥大化を続けており、この文章を書いている時点で6306件が登録されている。
  • 数百個ほどの階層的分類を設けることでどうにか管理しているが、これだけの数があると、有益な情報を探し出すことが難しい。
  • 私のブックマークをクロールして、私が知りたい情報を入力するとブックマークの中から検索してくれる代物がほしい。
ゆみやゆみや

yacyというセルフホストWeb検索エンジンが良いと聞く。
というか、この用途で使えそうなセルフホストWeb検索エンジンがyacy以外に見当たらない。
https://yacy.net/

だいぶ歴史のあるソフトウェアのようだが、開発そのものは現在でも活発に続いているようだ。
https://github.com/yacy/yacy_search_server

ChatGPT上で使い方を調べるためのカスタムGPTまで作られている。
https://chatgpt.com/g/g-h7fLnaDuI-yacy-support

なんでも金盾に対抗するためのP2P検索エンジンとして作られたそう。私は検閲対策でyacyを使いたいわけではないのだが、P2P機能を無効にして利用することも出来るらしい。
https://scrapbox.io/onokatio/yacy_(自作検索エンジン)
https://crater.blog.ss-blog.jp/2015-07-21
https://crater.blog.ss-blog.jp/2015-10-15
https://crater.blog.ss-blog.jp/archive/c2305456728-1

ゆみやゆみや

地味にスペックが要求されるアプリケーションのようなので、ラズパイや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

※このコマンドについては以下参照
https://geniusium.hatenablog.com/entry/2022/08/09/064716

ゆみやゆみや

Dockerで導入する。公式サイトの手順に従う。
https://yacy.net/download_installation/#docker

M2チップなのでarm64アーキテクチャであることに留意する。

$ uname -m
arm64

Dockerhubを見ると、arm64に対応したイメージがあるようなので、これを導入する。
https://hub.docker.com/r/yacy/yacy_search_server/tags

公式サイトの指定に従い、このようにする。

$ 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」だというドキュメントに、一応そのやりかたの記述があった。
https://yacy.net/operation/crawlstart_p/

せっかくなので公式の質問用カスタムGPTに聞いてみようとしている…が、途中で出力が中断してしまい、正直使い物にならん。

ゆみやゆみや

とりあえず /Crawler_p.html からクロールできるっぽい?

手始めに、GitHub, Qiita, Zenn, noteのお気に入りURLのリストを作り、ローカルファイルパス指定でクローラに突っ込んでみた。Java製だけあってだいぶメモリを食っていく(一瞬で7GBを持って行った)。

ここではyacyのプロセスはDockerコンテナの中で動いているので、URLリストをホストのMac miniからコンテナの中にコピーする必要があることに注意。

ゆみやゆみや

とりあえず上手く行ってるっぽい。途中何度かJVMの割当メモリ不足でクロールが停止したので、適当に2GBを割り当ててある。もうちょい増やしてもいいかも。

検索結果には改善の余地あり(P2P機能をオフにしているので、ローカル環境に保存されているインデックスだけを参照して検索している)。クロールが進んでインデックスが増えれば改善されるか?

ゆみやゆみや

その後の進捗。クロールが進んでだいぶマシになってきたかも?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