Luna Searchの紹介

Posted on Sep 8, 2023

Frea Searchを生み出しては壊滅させたこの私が新しいメタ検索エンジンを開発しているという話です。
repo: GitHub

そもそもFrea Searchは何が悪かったのか

あくまで個人的な感想ですが

  • そもそもスクレイピング型のメタ検索エンジン自体、一つのサーバーに集中させるようなものではないのに公式インスタンスを作ってそこに集中させてしまった。
  • システムの構成も過度に複雑にした(バックエンドとフロントが完全に別、検索エンジンのくせにPostgreSQLとRedis両方必要、スクレイピングに別途SearXNGまで建てる必要がある、ドキュメントをまともに整備してないなど)せいでセルフホストする人もほぼ現れなかった。
  • 加えて独自インデックスやらアカウント機能などを計画したことで本来の方向性を見失った。
  • ブロックリストとキャッシュ周辺の仕様が魔境だった。

それを踏まえて

Luna Searchの開発方針は現状以下のような感じです。

  • Luna Searchはフロントとバックエンドが同一のプログラムとしてまとまっているだけでなく、必要な外部ソフトもRedisのみになった。
  • 結果の最適化部分とブロックリストをRustベースで書き直し、高速化すると同時に本体のコードとは分離した開発を行えるようにした。
  • 本体の構造をより簡素で明確なものにしてメンテナンス性を向上させるように心がける。

ソフト的な構成要素

ここからは興味ある人向けかも

SearXNG

スクレイピングにはFreaと同じSearXNGを使用します。これじゃあ何の反省も生かされてないじゃないかとお叱りが飛んできそうですがLunaはSearXNGのコードをimportして内部的にライブラリとして扱います。つまりFrea Searchを建てるためにSearXNGを建てるという苦行を行うことなくインスタンスを簡単に生やせる訳です。
なんで最初からこうしなかったんでしょうね

libfrea

libfreaはRustベースのコードとPyO3で構成される結果の最適化ライブラリです。本体とは分離して開発されています。またフォークも安易なのでブロックリストが気に入らないとかあれば簡単に改造できます。

Luna Search本体

SearXNG、libfreaを使用し検索結果を生成しレンダリングするのが主な役割ですが、他にも強調スニペット(災害情報とか天気とか)周りの処理も行います。
Pythonで書かれておりこいつを極力シンプルに保ちつつ役立つ機能を追加するのが私の役割です。
TailsXをベースに作られておりTailsXのいい感じなUIを改造しています。




終わりに

正直この試みが上手く行くか分かりません。反省を活かしているから上手く行くんじゃないかと勝手に思っていますが温かい目で見守ってくださると幸いです。