運用コストを低く抑えつつ全文検索機能を実現したい: SQLite3 で全文検索を実現する fts5 、ベクトル検索を実現する sqlite-vss
- ドキュメント数が 1 万件に満たない状況で全文検索をしたい
- ドキュメントは頻繁に更新はされずに日時の更新で十分
- オンラインでのインデキシングを考えなくてよいので、バッチで十分
みたいな状態でポータビリティが高く運用コストが低い状態で全文検索を実現したいなと調べていたら SQLite3 が良さそうだったというお話。
- 全文検索を実現する拡張機能: https://www.sqlite.org/fts5.html
- fts5 から relevancy による order by が使えるようになったらしく、version 4 以前は、relevance をチューニングして改善するのは難しそうだなと思った。この拡張機能が作成された経緯としては、LIKE 検索で検索機能を提供しようとして、パフォーマンスでの問題が出たので作成されたらしい
- SQLite で Lindera を使った日本語全文検索 - *iroi* : この記事は実際にデモが公開されていて、非常に良い記事。全く問題ない速さですね
- Go で実現したい場合は、Add working examples of full-text-search of SQLite3 by KEINOS · Pull Request #309 · ikawaha/kagome の sample code が非常にわかりやすかった
- kagome を見ていたら、PR できる機運を見つけたので2つ PR を作ったら爆速マージされていて最高でした https://github.com/ikawaha/kagome/commits?author=hurutoriya
- ベクトル検索を実現する拡張機能: https://github.com/asg017/sqlite-vss
- faiss をもとにしたベクトル検索拡張機能
furusawa さんの書いている、いつ全文検索エンジンが必要かという基準は面白いですね。 新規サービスの検索システム立ち上げ時に考慮すること #サービス - Qiita
Cookpad さんの人気順検索の Solr はスケールのためにディスクを捨てた - クックパッド開発者ブログもバッチ更新で十分で割り切ってしまうという思想は今回の記事のモチベーションに近しいものがありますが、全文検索サーバーを運用したくはないのでスコープ外です。
fts は深堀りする機会がでれば、メモ代わりにどんどん公開していきます。
関連しているかもしれない記事
- Elasticsearch の Go client で有名な olivere/elastic がES8 以降はサポートしないので、利用者は公式クライアントに移行しよう
- 検索エンジンOSS勉強会: Lucene や OpenSearch など検索エンジンOSSへの貢献を念頭にしたオンライン勉強会を立ち上げてみた
- 情報検索・検索技術 Advent Calendar 2023 を開催します
- KDD2023 で気になった採択論文、チュートリアル、ワークショップ
- jisho.org が提供している漢字検索のためのfacet UI が便利かつ斬新で検索エンジニアとして学びがあった
📮 📧 🐏: 記事への感想のおたよりをおまちしてます。 お気軽にお送りください。 メールアドレス入力があればメールで返信させていただきます。 もちろんお返事を希望せずに単なる感想だけでも大歓迎です。
このサイトの更新情報をRSSで配信しています。 お好きなフィードリーダーで購読してみてください。
このウェブサイトの運営や著者の活動を支援していただける方を募集しています。 もしよろしければ、Buy Me a Coffee からサポート(投げ銭)していただけると、著者の活動のモチベーションに繋がります✨
Amazonでほしいものリストも公開しているので、こちらからもサポートしていただけると励みになります。