Typesense は、快適な検索エクスペリエンスを構築するための、高速でタイプミスに強い検索エンジンです。
オープンソースのアルゴリズム代替案と
より使いやすい ElasticSearch の代替手段
ウェブサイト |ドキュメント |ロードマップ |スラックコミュニティ |コミュニティスレッド |ツイッター
大規模なデータセット上で Typesense が動作する様子を示すいくつかのライブ デモを次に示します。
?動画を視聴したい場合:
このリストに機能がありませんか?誰かがすでにリクエストしている場合は問題トラッカーを検索し、ユースケースを説明するコメントを追加するか、そうでない場合は新しい問題を開きます。私たちはユーザーからのフィードバックに基づいてロードマップを優先していますので、ぜひご意見をお聞かせください。
Typesense の公開ロードマップは次のとおりです: https://typesense.link/roadmap。
最初のコラムでは、機能の優先順位付け方法、優先順位付けとリリース頻度にユーザーがどのように影響を与えることができるかについても説明します。
パブリック ドメインで大規模なデータセットを見つけることができれば、ぜひ大規模なデータセットでベンチマークを実施したいと考えています。オープンな構造化データセットに関する提案がある場合は、問題を作成してお知らせください。また、独自の大規模なデータセットからのベンチマークを共有していただければ幸いです。ぜひPRを送ってください!
Typesense は、さまざまなドメインや業種にわたる幅広いユーザーによって使用されています。
Typesense Cloud では、毎月100 億件を超える検索を提供しています。 Typesense の Docker イメージは 1,200 万回以上ダウンロードされました。
私たちは最近、ショーケースで誰がそれを使用しているかを文書化し始めました。リストに掲載をご希望の場合は、SHOWCASE.md を編集して PR をお送りください。
Typesense Cloud のホームページにもユーザー ロゴのリストが表示されます。
オプション 1: Linux (x86_64 および arm64) および Mac (x86_64) 用に公開されているバイナリ パッケージをダウンロードできます。
オプション 2:公式 Docker イメージから Typesense を実行することもできます。
オプション 3: Typesense Cloud を使用してマネージド クラスターをスピンアップします。
これは、コレクションを作成し、ドキュメントにインデックスを付け、Typesense で検索する方法を示す簡単な例です。
まず、Docker 経由で Typesense サーバーを起動しましょう。
docker run -p 8108:8108 -v/tmp/data:/data typesense/typesense:27.1 --data-dir /data --api-key=Hu52dwsas2AdxdE
いくつかの言語の API クライアントがありますが、この例では Python クライアントを使用しましょう。
Typesense の Python クライアントをインストールします。
pip install typesense
これでクライアントを初期化し、 companies
コレクションを作成できるようになりました。
import typesense
client = typesense . Client ({
'api_key' : 'Hu52dwsas2AdxdE' ,
'nodes' : [{
'host' : 'localhost' ,
'port' : '8108' ,
'protocol' : 'http'
}],
'connection_timeout_seconds' : 2
})
create_response = client . collections . create ({
"name" : "companies" ,
"fields" : [
{ "name" : "company_name" , "type" : "string" },
{ "name" : "num_employees" , "type" : "int32" },
{ "name" : "country" , "type" : "string" , "facet" : True }
],
"default_sorting_field" : "num_employees"
})
次に、作成したばかりのコレクションにドキュメントを追加しましょう。
document = {
"id" : "124" ,
"company_name" : "Stark Industries" ,
"num_employees" : 5215 ,
"country" : "USA"
}
client . collections [ 'companies' ]. documents . create ( document )
最後に、インデックスを作成したドキュメントを検索してみましょう。
search_parameters = {
'q' : 'stork' ,
'query_by' : 'company_name' ,
'filter_by' : 'num_employees:>100' ,
'sort_by' : 'num_employees:desc'
}
client . collections [ 'companies' ]. documents . search ( search_parameters )
クエリ テキストのタイプミスに気づきましたか?大したことはありません。 Typesense は、すぐに使えるタイプミスを処理します。
段階的なウォークスルーは、こちらの Web サイトでご覧いただけます。
これにより、Typesense サーバーの起動、サーバー内のデータのインデックス作成、データ セットのクエリのプロセスが説明されます。
公式 API ドキュメントは次のとおりです。当社の Web サイト (https://typesense.org/api) で入手できます。
ドキュメントまたはウォークスルーに問題がある場合は、お知らせいただくか、https://github.com/typesense/typesense-website から PR をお送りください。
CURL を使用して Typesense サーバーと直接対話することもできますが、選択した言語から Typesense を簡単に使用できるように、公式 API クライアントが提供されています。 API クライアントには、特に HA セットアップにおいて、API クライアント経由で行われる API 呼び出しの復元力を確保するためのスマートな再試行戦略が組み込まれています。
お使いの言語で API クライアントが提供されていない場合でも、一般的な HTTP クライアント ライブラリを使用して Typesense の API に直接アクセスできます。
以下に、コミュニティ提供のクライアントと統合をいくつか示します。
公式クライアント ライブラリと統合をさらに追加するためのコミュニティの貢献を歓迎します。 [email protected] までご連絡いただくか、GitHub で問題を開いてアーキテクチャに関して協力してください。
次のフレームワーク統合もあります。
コミュニティによって管理されている Postman コレクションがここにあります: https://github.com/typesense/postman。
Postman は、ターミナルに入力する代わりに、ポイント アンド クリックするだけで HTTP リクエストを実行できるアプリです。上記の Postman コレクションには、Postman にインポートできるテンプレート リクエストが用意されており、Typesense への API 呼び出しをすばやく行うことができます。
InstantSearch.js アダプターを使用すると、フィルタリング、並べ替え、ページネーションなどを備えた強力な検索エクスペリエンスを迅速に構築できます。
方法は次のとおりです: https://typesense.org/docs/guide/search-ui-components.html
Elasticsearch は大規模なソフトウェアであり、セットアップ、管理、拡張、微調整には多大な労力がかかります。理想的な構成を実現するために、数千の構成パラメーターが提供されます。そのため、特に数十億のドキュメントやペタバイトのデータ (例: ログ) を保存する必要がある場合、本番環境に対応し、定期的に監視してスケールするための帯域幅を備えている大規模なチームに適しています。
Typesense は、「市場投入までの時間」を短縮して快適な検索エクスペリエンスを実現するために特別に構築されています。これは、軽量でありながら強力でスケーラブルな代替手段であり、明確で文書化された API、明確なセマンティクス、スマートなデフォルトを備えた開発者の幸福とエクスペリエンスに重点を置いているため、多くのノブを回す必要がなく、すぐに使用できるようになります。 。
Elasticsearch は JVM 上でも実行されますが、JVM 自体を最適に実行するように調整するのはかなりの労力がかかります。一方、Typesense は単一の軽量の自己完結型ネイティブ バイナリであるため、セットアップと操作が簡単です。
ここで機能を並べて比較してください。
Algolia は独自のホスト型サービスとしての検索製品であり、コストが問題にならない場合にはうまく機能します。私たちの経験から言えば、急速に成長するサイトやアプリはすぐに検索とインデックス作成の制限に達し、規模が拡大するにつれて高価なプランのアップグレードが必要になります。
一方、Typesense はオープンソース製品であり、独自のインフラストラクチャ上で実行することも、マネージド SaaS サービスである Typesense Cloud を使用することもできます。オープンソース バージョンは無料で使用できます (もちろん、インフラストラクチャの費用は別途かかります)。 Typesense Cloud では、レコードや検索操作によって料金が請求されることはありません。代わりに、専用のクラスターを取得し、処理できる限り多くのデータとトラフィックをそこに投入できます。最新のクラウド プラットフォームと同様に、選択した構成に応じて、固定の時間料金と帯域幅料金のみを支払います。
製品の観点から見ると、Typesense は Elasticsearch よりも精神的に Algolia に近いです。ただし、Algolia に関するいくつかの重要な制限に対処しました。
Algolia では並べ替え順序ごとに個別のインデックスが必要であり、これはプランの制限にカウントされます。検索するフィールド、ファセットするフィールド、グループ化するフィールド、ランキング設定などのほとんどのインデックス設定は、インデックスの作成時に事前に定義されますが、クエリ時にオンザフライで設定できます。
Typesense を使用すると、これらの設定を検索時にクエリ パラメーターを介して構成できるため、非常に柔軟になり、新しいユースケースが可能になります。 Typesense では、複数のインデックスを作成する必要がなく、単一のインデックスで並べ替えられた結果を得ることができます。これはメモリ消費量の削減に役立ちます。
Algolia は、現在 Typesense にはない機能、パーソナライゼーションとサーバーベースの検索分析を提供します。分析については、クライアント側で検索を計測し、選択した Web 分析ツールに検索メトリクスを送信できます。
私たちは Typesense でこのギャップを埋めるつもりですが、それまでの間、問題トラッカーで機能リクエストを作成し、これらのいずれかがお客様のユースケースにとって障害となるかどうかをお知らせください。
ここで機能を並べて比較してください。
新しい Typesense サーバーは約 30 MB のメモリを消費します。ドキュメントのインデックス作成を開始すると、それに応じてメモリ使用量も増加します。どの程度増加するかは、インデックスを作成するフィールドの数と種類によって異なります。
私たちは、メモリ内のデータ構造をスリムに保つよう努めてきました。大まかに言うと、100 万件の Hacker News タイトルとそのポイントがインデックス付けされると、Typesense は 165 MB のメモリを消費します。ディスク上の JSON 形式のデータの同じサイズは 88 MB です。このセクションに追加できる独自のデータセットの数値をお持ちの場合は、PR をお送りください。
私たちの経験からすると、企業は一般に、使用するライブラリが GPL ライセンスを取得している場合に懸念します。これは、ライブラリ コードが自社のコードに直接統合され、二次的著作物につながり、GPL 準拠のきっかけとなるためです。ただし、Typesense Server はサーバー ソフトウェアであり、ユーザーは通常、これを別のデーモンとして実行し、独自のコードと統合しないことを想定しています。 GPL はこのユースケースを寛大にカバーし、許可します(例: Linux は GPL ライセンスを取得しています) 。さて、AGPL は、ネットワーク経由でサーバー ソフトウェアにアクセスすることによって二次的著作物が生成されるようにするものであり、GPL ではありません。そのため、私たちは Typesense に AGPL を使用しないことを選択しました。
さて、誰かが Typesense サーバーに変更を加えた場合、実際には、GPL では、変更されたコードを配布しない限り、その変更を自分自身に保持することが許可されています。したがって、企業は、たとえば、Typesense サーバーを変更して、変更されたコードを社内で実行することができ、変更されたソフトウェアにアクセスできるすべてのユーザーが変更されたコードを利用できるようにする限り、変更をオープンソースにする必要はありません。
さて、誰かが Typesense サーバーに変更を加えてその変更を配布すると、そこから GPL が発動します。私たちが自分たちの作品をコミュニティに公開したことを考えると、他の人の変更もコミュニティにオープンにしたいと考えています。オープンソースの精神。この目的のために GPL を使用します。他のライセンスでは、オープンソース作品の変更、クローズドソース化、配布が許可されますが、プロジェクトの長期的な持続可能性のために Typesense ではそうしたことを避けたいと考えています。
Discourse: https://meta.discourse.org/t/why-gnu-license/2531 で説明されているように、なぜ GPL なのかについての詳細な背景は次のとおりです。そこで言及されている点の多くは私たちの心に響きます。
上記のすべては Typesense Server にのみ適用されます。実際、当社のクライアント ライブラリはユーザーのコードに統合されることを目的としているため、Apache ライセンスを使用します。
要約すると、AGPL はサーバー ソフトウェアにとって通常問題となるものであり、私たちはそれを使用しないことを選択しました。私たちは、Typesense Server の GPL が、このオープン ソース プロジェクトに求めているものの本質を捉えていると信じています。 GPL には、人気のあるオープンソース プロジェクトで使用されて成功してきた長い歴史があります。私たちのライブラリは引き続き Apache ライセンスを取得しています。
ライセンスの問題により Typesense を使用できない詳細がある場合は、喜んでこのトピックについてさらに詳しく調査させていただきます。ぜひご連絡ください。
Typesense に関する一般的な質問がある場合、挨拶したい場合、または単にフォローしたい場合は、公開 Slack コミュニティにご参加ください。
問題が発生した場合は、GitHub の問題を作成してください。全力でサポートさせていただきます。
私たちは、GitHub 上の課題トラッカーを通じて適切なサポートを提供するよう努めています。ただし、プライベートで優先的なサポートをご希望の場合は、次のとおりです。
ここで説明する有料サポート オプションを提供しています。
私たちは検索の民主化を使命とする無駄のないチームであり、できる限りの協力を惜しみません。参加したい場合は、私たちがあなたの助けを借りられる場所に関する情報をここに掲載します: Contributing.md
新しいバージョンのリリース時に更新を入手したい場合は、上部の「見る」ボタンをクリックし、「リリースのみ」を選択してください。 GitHub は、新しいリリースごとに変更ログとともに通知を送信します。
また、Typesense に関連するリリースや追加のトピックに関する最新情報を Twitter アカウントに投稿します。ここからフォローしてください:@typesense。
Slack コミュニティにも最新情報を投稿します。
Typesense の構築には Bazel を使用します。
Typesense には次の依存関係が必要です。
最新の依存関係セットについては、CI ビルド手順を参照してください。
これらをインストールしたら、リポジトリのルートから次のコマンドを実行します。
bazel build //:typesense-server
他のサードパーティ ライブラリがビルド プロセスの一部としてプルされてビルドされるため、最初のビルドには時間がかかります。
© 2016-現在 Typesense Inc.