テキスト検索を実装 – 開発日記(68)

2024/01/21

キャンバス内のテキストを検索する機能を付けた。検索対象はアイディア・レーンヘッダー・リレーション。

検索処理は文字列を探せば良いだけなのでイメージが付くのだが、ヒットした文字列をハイライトするにはどうすれば良いのだろうか?

ネットで探したところ substring_highlight というパッケージがあった。素晴らしい。これのおかげで実装が簡単かと思いきや、「縦書き」の部分は結局自分で実装しなければダメだった。

それでも、比較的速くテキスト検索+ハイライト機能が実現出来た。

ヒットした文字がハイライトされている

キャンバス内検索はそれっぽく作れたので、キャンバス横断検索(ファイル横断検索)についても実装を検討した。

キャンバス内検索は、既にDBから読んでいるデータを対象に検索するので実装しやすかった。しかし全文検索となると、DB上のデータを検索しなければならない。

結果的に、この機能は優先度を下げざるを得ないことが分かった。

Firebaseにはそもそも文字列検索の機能がなく単体での実装が難しい(前方一致検索のみで、Likeを使うような”含む”検索が出来ない)。Firebaseの推奨を見ると、全文検索はAlgoliaなどの外部サービスを使う前提となっている。

仮にFirebaseだけで実現するには自分でNgramなどで膨大なデータを用意し力わざで作るしかない。
参考:Firestore だけで Algolia を使わず全文検索 #JavaScript – Qiita

キャンバス横断の全文検索は当然欲しい機能ではあるが、データが増えてから必要になるものだ。少し優先度を下げよう。

そもそもそこまでアイディア・レーンを使いこなすユーザは当面出てこないだろう。全文検索の実装・管理の手間、外部サービスに支払うコストなどを考えると、無料での提供ではなく有料機能の一部になってくるかもしれない。

2024/01/22

キャンバス内検索の実装の続き。

検索時の文字列比較の際、大文字小文字の区別を無くした。またCtrl+Fで呼び出すなどキーボード操作に対応した。

最近思うのは、大規模リファクタしたおかげで思った通りの実装がしやすくなっている。リファクタはとんでもなく時間がかかってしまったが、開発効率は上がった。

2024/01/23~2024/01/25

下記の対応を行った。

  • Ctrl+Cでクリップボードへのコピー、Ctrl+Vでクリップボードからの貼付けに対応。但しシンプルなテキスト情報のみ
  • キャンバス内検索の挙動を改善
  • DB周りの不具合を修正したり、DBへ書き込みをしていることが画面で見えるインジケータも作った。(開発時確認用)


※開発日記は当時の記録をもとに作成し、必要に応じて加筆・補足しています

この記事はアイディア整理ソフト「idea Lane」の開発記録です

どなたでも、ユーザ登録だけで無料ですぐに使えます
テキストベースの思考整理ツール「idea Lane」


コメント

タイトルとURLをコピーしました