Basic | Grow |
---|---|
無料 | 1,000検索リクエスト毎に$0.50 |
キーワード検索のみ | 左記同 |
無料帯域 月間1万リクエスト 100万レコード | 無料帯域 月間1万リクエスト 10万レコード |
アメリカ、イギリス、西欧リージョン | 左記同 |
追加レコード不可 | 1,000レコード毎に$0.40 |
分析結果保持7日間 | 分析結果保持30日間 |
インデックス毎に1,000シノニム | インデックス毎に10,000シノニム |
アプリ毎に10インデックス迄 | アプリ毎に50インデックス迄 |
最大インデックスサイズ1GB | 最大インデックスサイズ100GB |
最大アプリサイズ1GB | 最大アプリサイズ100GB |
1秒毎に3クエリまでの制限 | 制限なし |
30日未使用で非活性化 | 制限なし |
Search
→Index
→Configuration
→Language
から、Index Languages
とQuery Languages
からJapanese
を追加します。pip
でAlgoliaのライブラリをインストールします。CLI実行を手軽に実施するにfire
、環境変数を読み込むためにpython-dotenv
も一緒にインストールしておきましょう。$ pip install algoliasearch fire python-dotenv
import os
import fire
from algoliasearch.search_client import SearchClient
from dotenv import load_dotenv
load_dotenv()
def algolia_save():
client = SearchClient.create(
os.environ["ALGOLIA_APP_ID"], os.environ["ALGOLIA_API_KEY"]
)
index = client.init_index("test_index")
obj = {
"title": "サンプルコンテンツ",
"description": "Pythonの楽しさを伝えます!",
"updated_at": "2023-09-11 00:00:00",
"tags": "Python,Python3",
}
index.save_object(obj, {"autoGenerateObjectIDIfNotExist": True})
return "Success!"
if __name__ == "__main__":
fire.Fire()
Settings
→API Keys
で取得可能です。.env
に記載しましょう。ALGOLIA_APP_ID={自分のAPP ID}
ALGOLIA_API_KEY={自分のAPI KEY}
$ python app.py algolia_save
Index
を見てみましょう。先ほどリクエストした内容が反映されています。$ npm i algoliasearch
import { useState } from 'react'
import { useForm } from '@mantine/form'
import { Box, Button, TextInput } from '@mantine/core'
import algoliasearch from 'algoliasearch/lite'
interface Item {
title: string
}
export function Search() {
const [items, setItems] = useState([])
const algoliaClient = algoliasearch('{AlgoliaのAPP ID}', '{AlgoliaのAPI Key}')
const form = useForm({
initialValues: {
query: '',
}
})
const algoliaSearch = async () => {
const index = algoliaClient.initIndex('test_index')
const data = await index.search(form.values.query)
setItems(data.hits)
}
return (
<Box>
<form onSubmit={form.onSubmit(() => algoliaSearch())}>
<TextInput
label="キーワード"
placeholder="キーワード"
{...form.getInputProps('query')}
/>
<Button type="submit">検索</Button>
</form>
{items.length > 0 && (
<p>検索結果</p>
<ul>
{items.map((item: Item) => (
<li key={item.objectID}>
<p>{item.title}</p>
</li>
))}
</ul>
)}
</Box>
)
}