Open6
全文検索を少しずつ食べていく

プロジェクトで全文検索をやることになり、その時に引っかかった点を挙げていく
TypeScript が前提

Algolia
全文検索のサーバーレスの王と言ったら Algolia(言い過ぎ)
実際のところ、OSSのドキュメントを中心に見かけることが非常に多い
Elasticsearch
全文検索の王、Elastic
Elastic Serverless というものが出たようだが、スタート初期には Algolia よりも料金の負担が大きそう
システムが大規模化して、軌道に乗り始めたら採用し始めるのはありかも?
Meilisearch
正式リリース前に試しで遊んだとき、検索スピードの速さに驚愕した覚えがある
SDKも使いやすかったので、Algolia のようなオペレーション毎の課金システムができたら喜んで使いたい

Algolia JavaScript API Clients
AlgoliaのJSクライアントを使用して、 generateSecuredApiKey
をしようとしたとき、
Property 'generateSecuredApiKey' does not exist on type 'Algoliasearch'.
と怒られた
環境検出?でなんか問題が起こるのだとか?
よく分からない

Meilisearch
Algolia がよく分からない挙動をするので Meilisearch へ。
興味あったからね、えぇ、逃げたわけではないから。うん。

Meilisearch を動かす
docker-compose.yaml
version: '3.8'
services:
meilisearch:
image: getmeili/meilisearch:v1.15
container_name: meilisearch
ports:
- "7700:7700"
environment:
- MEILI_MASTER_KEY=INPUT_HERE
- MEILI_HTTP_ADDR=0.0.0.0:7700
- MEILI_ENV=development
- MEILI_DB_PATH=/meili_data
volumes:
- meilisearch_data:/meili_data
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:7700/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
volumes:
meilisearch_data:
driver: local
AIに適当に書かせて、こんな感じのを動かす。
動くことを確認する。

検索対象のオブジェクトをまとめた SearchCollection
という型を作り、
async search(query: string, options: SearchParams): Promise<SearchResponse<SearchCollection>> {
const result = await this.getIndex().search<SearchCollection>(query, options)
return result
}
で、検索できるようにする。