爆速検索APIサービスAlgoliaを使ってみる #algolia

はじめに

AlgoliaはWebサイトやモバイルアプリケーションなどで使えるフランス発の検索APIサービスです。一番の特徴は爆速。GUIのダッシュボードががSaaSとして提供され、多くのプログラム言語向けのAPIクライアントが提供されています。

ま、まずはやってみないとわかりませんよね。なのでやってみました!

やってみた

アカウントの作成

Algliaは非商用利用のDeveloperライセンスであれば無償で使えますし、トライアルライセンスも提供されています。今回はトライアルライセンスを取得しました。サインアップページからアカウントを作成します。

API Keyの取得

サインアップするとダッシュボードが表示されます。左側ペインの[API keys]からAPIキーを取得します。なおAdmin API Keyは鍵マークをクリックすることで表示されます。

環境の確認

今回は僕のMacbook上で試しました。

$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.13.6
BuildVersion:	17G8029

$ python3 --version
Python 3.7.1

$ pip3 --version
pip 18.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)

API Clientをインストールする

pipを使ってAlgoliaのPython API Clientをインストールします。

$ pip install --upgrade algoliasearch
(...snip...)
Successfully installed algoliasearch-2.0.4 requests-2.22.0 typing-3.7.4

データをプッシュする

データをプッシュするためのスクリプトを作成します。 "YourApplicationID"と"YourAdminAPIKey"は自分のAPIキーに置き換えてください。

$ vi push_data.py

import json
from algoliasearch.search_client import SearchClient

client = SearchClient.create(
 "YourApplicationID",
  "YourAdminAPIKey"
)

index = client.init_index('demo_media')

with open('media.json') as f:
    records = json.load(f)

index.save_objects(records, {'autoGenerateObjectIDIfNotExist': True});

Algoliaが提供しているサンプルデータを入手して、スクリプトと同じディレクトリに保存しておきます。

スクリプトを実行します。特にエラーがでなければデータがプッシュされているはずです。

$ python3 ./push_data.py

検索する

では検索するためのスクリプトを作成します。AWSというキーワードを検索します。先程と同様、"YourApplicationID"と"YourAdminAPIKey"は自分のAPIキーに置き換えてください。

$ vi ./search.py

from algoliasearch.search_client import SearchClient

client = SearchClient.create(
 "YourApplicationID",
  "YourAdminAPIKey"
)

index = client.init_index('demo_media')

print(index.search('AWS'))

実行!

$ python3 ./search.py
{'hits': [{'post_id': 3699, 'post_title': 'DNS fallback for better resilience', 'post_date': 1431362549, 'post_date_formatted': 'May 11th 2015', 'author_name': 'Adam Surak', 
(...snip...)
'matchedWords': ['aws']}, 'record_index': {'value': '0', 'matchLevel': 'none', 'matchedWords': []}}}], 'nbHits': 14, 'page': 0, 'nbPages': 1, 'hitsPerPage': 20, 'processingTimeMS': 4, 'exhaustiveNbHits': True, 'query': 'AWS', 'params': 'query=AWS'}

1件のレコードがヒットし、検索出来ました!

さいごに

実装も検索もサクッと出来ました。しかも爆速。今後も調査していきたいと思います!