top of page

《Bubble》フリーワード検索の実装方法(プラグイン有/無)

概要

データの一覧が表示されている状態から、入力したワードが含まれているデータを絞り込んで表示する機能について、「Fuzzy search & Autocomplete」というプラグインを使用した実装方法と、プラグインを使用しない実装方法の2種類に分けて解説していきます。

今回は例として「Book」というテーブルに「Title」のカラムを用意しています。

フリーワード検索の実装方法(プラグイン有/無)

フリーワード検索の実装(デザイン共通)


 親Groupをつくり、そこに検索ワードを入力するための「input」と検索のトリガーになる「Button」、検索結果を表示するための「Repeating Group」を配置。


フリーワード検索の実装

 input の Content format を「Text」に、Repeating Group の Type of content を「Book」に、その他パラメータは以下の通りに設定する。

フリーワード検索の実装2

フリーワード検索の実装3
 

フリーワード検索の実装(ワークフロー / プラグイン有)

 Element Actions から Display list を選択。


「Search for Books」と設定してデータベース内から検索する対象のデータ型を指定し、Add a new constraint から「Title contains Input ~ 's value」という条件を追加して,Input に入力したワードを Titleに含んでいるデータを表示、つまり名前の部分一致で検索できるようにする。

フリーワード検索の実装



 

📍「Fuzzy search & Autocomplete」プラグインを使った場合このように簡単に部分一致での検索が実装できますが、例えば「Book」のデータに「Title」以外のカラムがあった場合、条件を追加しようとしてもAnd検索になってしまうため「入力したワードが複数のカラムのいずれかに部分一致するデータ」の検索はできません。


この問題を解決するために、プラグインを使用しない場合の実装方法も解説していきます。

 


 フリーワード検索の実装(ワークフロー / プラグイン無)

例として「Title」以外に「Content」というカラムを用意する。

Element Actions から Display list を選択して「Search for Books」と設定するところまではプラグイン有りの流れと同じ。

More から:filteredを選択して List filterのAdd a new constraint から「Advanced」を選択する。

「This~」で Title を条件に追加して、正規表現に一致したものを取得する「:extract with Regex」を選択。

正規表現を入力するウィンドウが表示されるので、検索条件にInputの値を設定する。

List filterウィンドウに戻り、「:count>0」を条件に追加する。

「or」に続けて①で追加した Content を条件に追加する。


これでInputに入力したワードが「Title」と「Content」のいずれかに含まれているデータを検索、つまり複数のカラムに対して部分一致をかけて検索ができるようになる。

フリーワード検索の実装2

フリーワード検索の実装3



 

📍「Advanced」に関して、or検索ができるという利点はありますが検索方法として効率的ではないです。

理由としては、「Search for ~」ウィンドウのconstraintで条件をつけた場合はその条件に合うデータだけをデータベースから取得するのに対して、「Advanced」で条件をつけた場合は一度データベースからすべてのデータを取得してから条件に合うデータを絞り込むといった流れになるため、効率が悪くなってしまいます。

 

 まとめ

 フリーワード検索について、「Fuzzy search & Autocomplete」プラグインを使用した場合の実装とそこで生じる問題を解決するための実装の2種類を解説しました。


記事の中で触れたAnd検索とor検索や正規表現については他の記事で詳しく解説しているので、気になる方は以下のリンクから記事をご参照ください。


 

▪ And検索とor検索

条件検索


▪ 正規表現

正規表現について


関連記事

SPA
StripeConnectについて
@未完成@初期設定
@未完成@パフォーマンス
SPA
SPAガイド
@未完成@パフォーマンス
保守性
保守性高く開発するガイド
bottom of page