試してみてください!
BlogSearchは、外部サービスのない検索エンジンを可能にするブログツールです。
これはdocsearchのようなものですが、ブログ用です。
より技術的には、BlogSearchは、WebAssemblyにコンパイルされたSQLiteを搭載した静的Webサイトの純粋なクライアント側のフルテキスト検索エンジンです。
純粋にクライアント側の検索
メンテナンスするサーバーはありません。サービスコストはありません。
簡単。ブログや静的なWebサイトを念頭に置いて構築されています。
人気のあるブログフレームワークをサポートしています:
ジキル
ギャツビー
ヒューゴ
…そして静的なウェブサイト!
sqlite-wasm:WebAssemblyを使用して、WebでSQLiteを実行します。このプロジェクトは、BlogSearchのニーズに対応しています。
ワークフローは2つのステップで構成されています。1。インデックスファイル | |
1.インデックスファイルを作成します | 2。検索を有効にします |
インデックスファイル
次に、WebサイトのPublic Directory(index.htmlがある場所)に生成された | WebページはBlogSearchエンジンをロードする必要があります。利用可能なエンジンは1つだけです。
<script>タグまたはJavaScriptファイルを使用してエンジンをロードします。エンジンが |
プロジェクト全体で、「インデックス」と「データベース」という用語はしばしば混合されますが、ほとんどの場合、同じsqlite .db.wasmファイルを意味します。 |
Jekyll(Jekyll-Blogsearch)
Gatsby(Gatsby-Plugin-Blogsearch)
Hugo(blogsearch-crawler)
ジェネリッククローラー(blogsearch-crawler)
ユーザーは、検索エンジンを適切に動作させるために、フィールドの値を収集するインデックスビルディングツールを構成する必要があります。
インデックスビルディングツールは、各投稿の次のデフォルトフィールドを収集する必要があります。
title :投稿のタイトル。
body :投稿の内容。
url :投稿へのURLリンク。
categories :ポストが属するカテゴリのコンマ分離( , )リスト。
tags :投稿にあるタグのコンマ集合( , )リスト。
ユーザーは、次のプロパティを使用してすべてのフィールドを構成できます。
| 例 | 結果 |
|---|---|
| |
{
...other field options...
categories: {
+ disabled: true,
},
} | |
次の例では、インデックスファイルのサイズ | |
{
...other field options...
body: {
+ hasContent: false,
},
} | |
| |
{
...other field options...
url: {
+ indexed: false,
},
} | |
インデックスビルディングツールには、フィールドのツール固有のオプションがあります(Blogsearch-Crawlerのparserオプションなど)。詳細については、インデックスビルディングツールのドキュメントを参照してください。 |
< link rel =" stylesheet " href =" https://cdn.jsdelivr.net/npm/[email protected]/dist/basic.css " />
< script src =" https://cdn.jsdelivr.net/npm/[email protected]/dist/blogsearch.umd.js " > </ script >
< script src =" https://cdn.jsdelivr.net/npm/[email protected]/dist/worker.umd.js " > </ script >
< input id =" blogsearch_input_element " type =" search " placeholder =" Search Text " class =" form-control " />
< script >
blogsearch ( {
dbPath : 'your_index_file.db.wasm' ,
inputSelector : '#blogsearch_input_element' ,
} ) ;
</ script >詳細とオプションについては、BlogSearchのサブディレクトリにアクセスしてください。
検索エンジンは基本的に、FTS5拡張機能を備えたSQLiteで、WebAssemblyにコンパイルされています。 SQLite FTS5は、検索機能に組み込みのBM25ランキングアルゴリズムを提供します。 SQLiteは最もポータブルデータベースエンジンであるため、Web上のSQLiteデータベースファイルも開くことができます! SQLiteのおかげで、さまざまなプログラミング言語でSQLクエリをわずか数回使用して、BlogSearch用のプラグインを簡単に記述できます。
.db.wasmが推奨されるファイル拡張インデックスが推奨される理由WebAssemblyバイナリファイルではありません。なぜ.dbだけではないのですか? .dbを作成しようとしましたが、大きな問題があります。インデックスファイルはWebサーバーによってGZIPが圧縮されていません。人気のあるブログWebサービス(特にGitHubページ)は通常、 .dbファイルをapplication/octet-streamとして提供し、ファイルを圧縮しません。それがWebAssemblyバイナリファイル.wasmあると嘘をつくことで、サーバーはそれをapplication/wasmとして認識し、圧縮します。
圧縮はファイルサイズを大幅に削減するため重要です。サイズが1/3まで減少していることがわかりました。
「しかし、それは私のマシンで動作する」問題を避けるために、タスクを構築するためにDockerを使用することを強くお勧めします。
このリポジトリは、各サブプロジェクトに独自のビルドスクリプトがあるモノレポですが、ルートディレクトリでタスクを簡単に実行できます。
| 特定のサブプロジェクトのみを構築する場合は、サブディレクトリに移動して糸コマンドを実行します。 |
必要なツールは次のとおりです。
GNU Make(v4.2以上が推奨されます。MACOSユーザーに警告されます!)
Docker
docker-compose
糸
JSプロジェクトですが、MakeFileが使用されています。これは、はるかにconfiguratbleであり、並行して構築をサポートするためです。
プロジェクトで使用されている特定のnodejsバージョンについては、dockerfileをご覧ください。
# Or yarn install, without docker
make install-in-docker # Or yarn install, without docker
make lib-in-dockermake start-in-docker
# You can access the demo page via 0.0.0.0:9000 # Or make test, without docker
make test-in-docker
# Run it in parallel
make test-in-docker -j4 --output-sync=target| これには多くの時間がかかります! (〜30ミント) |
# It is highly recommended to use docker here
make examples-in-docker && make demo-in-docker| これには多くの時間がかかります! (〜30ミント) |
# Or make all, without docker
make all-in-docker
# Or
# Parallel builds. This reduces the build time almost an half on my machine.
make all-in-docker -j4 --output-sync=targetmake clean
# Then run any commands above make bash-in-dockerこのプロジェクトは、Docsearchに触発されており、TypeScriptで再実装を行っています。
それ以外は、プロジェクトはMITライセンスです。ライセンスを参照してください