GCPUG Shonan vol.28 Search APIと愉快な仲間達 に参加してきました。
イベントタイトルの通り、愉快な仲間達と楽しんできました。
今回は Search API のお勉強。
みなさん、 Search API って知ってますか?
Search API
Search API は簡単に形態素解析や、全文検索をやってくれるAPIです。
App Engine の API として提供されているので、 App Engine からしか使えません。
(なぜ、フルマネージドサービスとして公開されないのかは謎です)
公式ドキュメント
Documents and Indexes | App Engine standard environment for Python | Google Cloud
データ型は下記が使用できます。 コンパクトなAPIですが、HTML タグ除外してくれたり、 Geopoint があったりもします。
- Atom Field - an indivisible character string
- Text Field - a plain text string that can be searched word by word
- HTML Field - a string that contains HTML markup tags, only the text outside the markup tags can be searched
- Number Field - a floating point number
- Date Field - a date object with year/month/day and optional time
- Geopoint Field - a data object with latitude and longitude coordinates
やったこと
ぐるなびデータをSearch APIで検索
スピーカー: もりまさとさん
当日の資料:SearchAPI - Google スライド
ぐるなびの公開データを全文検索、絞り込み、位置情報での並び替えといったことをデモしてくれました。
GitHub - morimasato/search-sample-20180616 がデモで使っていたソースですが、こんなにシンプルにインデックス作成や検索処理がかけるんですね。
Search API だけで検索と結果表示くらいはできてしまうので、シンプルに使ったり、プロトタイプとかを作るには適しています。
もっと複雑な検索(スコアリング調整、検索アルゴリズム変更、辞書追加などなど)をやりたいとなると、 Search API を選択しない方が良さそうです。また、下記のような問題も発生しているようなので、特性を理解して使いましょう。
- Appengine の開発環境だとうまく動作しない
- スニペットの挙動が安定しない
例)「飲み放題 」だとスニペットできないが「飲み 放題」 だとスニペットできたりする
小さな問題はあれど、シンプルな検索を作るなら Search API はととてもおすすめです。
ゼロから始めるGAEエンジニアのための全文検索生活
スピーカー:安江さん
当日の資料:
ゼロから始めるGAEエンジニアのための全文検索生活 - Google スライド
Search API の基本的な話から、 Detastore と組み合わせた実例を話してくれました。
実際に業務で使って気づいたことや、制限などたくさん聞くことができました。
制限を理解し、Search API の特性を活かせるところだけに使うのが、いいプラクティスですね。
Q. 両方のサービスへのデータ登録ってどうやっているの?
Datastore への登録と Search API への反映というのを上手くやってくれるソリューションは提供されていないので、自分が対応する必要があります。
データ登録時に両方に書き込んだり、Datastore 登録時にタスクキューに入れて同期したりといった方法が必要になります。
Q. 検索のサービスは Search API 以外には存在しないの?
検索系サービスは Search API 以外は存在しません。
検索のGoogleなのになぜ。とは思いますが、今後何かしら出てくることを期待しましょう。
他クラウドも Amazon CloudSearch や Azure Search を出しているので、アクションはあると私は予想しています。
さいごに
GCPUG湘南支部楽しいですね!
GCPUG湘南支部では一緒にGCPを盛り上げたい、参加したいという方を募集しています!(湘南在住じゃなくても参加できます)
ロゴが強烈なインパクトを出していますねw
GCPUG への参加はこちらから。