全文検索(Opensearch/Elasticsearch + FESS)によるデスクトップ検索の面倒を解決する方法
前置き
以下、この Blog の読み手の興味を惹かない内容(=検索に関する技術的な細部)なので skip 推奨。この手の小細工はすぐに忘れるので 記録/保存 するのが目的。
何が問題か?
本 Blog では記事が累積し、非公開の内部 資料/記事 も含めると既に文書総数が数万件になっている。さらに 記事/文書 は複数のサイト(+local) に跨っている。加えて個々の記事は比較的長く、文字起こしを含む場合は 200KiB を超えるものも少なくない。ちなみに文庫本一冊に含まれる文章の情報量は 200~300 KiB 程度。
この状況で、どうやって過去記事を効率的に検索するか? これが問題となる。
具体的にいえば、
- 複数のサイト(+local) に跨る数万件の記事、
- それも 200KbiB を超える長文の記事を含む文書群を、
- 効率的に「全文検索」し、
- 検索結果を一瞥でわかるように表示し、
- かつ、必要となれば(画像や動画を含めた)完全な形で表示できる(=元サイトの記事を直接アクセスして表示)
ことが必要となる。この対処方法について、以下で詳しく述べる。
目次
従来の全文検索の方法とその問題点
従来の全文検索の方法
従来(= 2025年の中頃まで)は、以下の方法を用いて全文検索を実現していた。概略、
-
複数のサイトに跨った BLog 記事を(記事内に埋め込まれた映像を含めて)全て crawling し、
-
取得した記 事データをデータベースに格納
-
GUI の皮を被せた専用アプリで、このデータベースをアクセスし、結果を表示
…という古く単純な手法だった。効率化のために細部では様々な小細工を施しているが、大枠では
- crawling → データベース格納 → データベースを SQL で検索
という流れ。
この方法の問題点
以下の問題点がある。
-
自作ツールによる定期的な crawling と、データベースの更新が必要
-
データサイズの増加に伴う検索での応答速度の低下
-
高度な全文検索(曖昧検索、形態素解析など)に対応できない
-
検索手順がシンプルではない
この 4 について補足すると、
- (1) 専用アプリで検索する。
- (2) ヒットした記事のテキスト部分が専用アプリのテキスト表示欄に表示される。
- (3) 記事に埋め込まれた映像(静止画 or 動画)を含めて完全な形で表示したい場合は、"元サイト記事を表示"ボタンを押すことで Web ブラウザで表示する。
という流れになる。つまり、専用アプリと Web ブラウザを行き来することとなり、検索の手順がシンプルではない。
Opensearch/Elasticsearch + FESS での問題点
上述の 1~4 の問題を解消するために、2025年中頃から Opensearch+FESS による全文検索を採用した。この方法では、FESS の検索画面から全文検索することになるが、以下の問題があることが判明した。
1. markdwon 文書の表示が手間
検索でヒットした文書が単純なテキスト文書(*.txt) ならば、FESS 画面(=ブラウザ)にそのまま表示される。
だが、txt 以外の文書、例えば markdown 文書なら、download 経由となる。つまり、
-
(ブラウザ上の)FESS 画面で検索を実行
-
検索にヒットした文書がリストアップされ、
-
ユーザが特定の文書のリンクをクリック
-
そのリンク先が *.txt 以外ならブラウザは download を実行
-
(download したファイル種別毎に起動アプリを設定可能なブラウザであれば)"markdown viewer"(ブラウザ用 addon )経由で表示してよいかどうかをユーザに確認する pop-up 画面(下がその具体例)が 「毎回常に」 表示される。

-
ユーザがその pop-up 画面で OK のボタンをクリックした後に、やっとmarkdown viewer 経由で markdown 文書がブラウザ画面に表示される。長大なファイルだと OK が有効になるまで待たされるというオマケ付き。