シンプルな検索エンジンの実装。
研究目的は、主に検索エンジンの作成方法、パフォーマンスのトレードオフ、構造などの実装の詳細を理解することです。
このアイデアは、UI からデータベース システムまで同形のアプリケーションを作成することです。
アプリケーションは、docker または github でリリースされたバイナリを使用してデプロイできます。
./searchzin -c <path-to-config>.yml
その後、 http://localhost:8080
を調べて検索ページを表示します。
構成は、デフォルトで/etc/searchzin/config.yml
にある構成ファイルを使用するか、 -C key=value
形式で構成キーを指定することによって行うことができます。2 番目の形式は最初の形式をオーバーライドします。
構成のデフォルト:
port : 8080 # Service port
path :
log : /var/log/searchzin # Log directory
data : /var/lib/searchzin # Data directory
すべてのプロジェクト構造は、 gin
フレームワークを使用して golang で作成されます。
依存関係はdep
使用して管理されます。
プロジェクト ツールチェーンの大部分はMakefile
によって管理されます。重要なターゲットは次のとおりです。
install
: 必要な依存関係と git フックをインストールしますreadme
: ファイルのREADME.md
インクルードを実行します。lint
: コードのリンティングとフォーマットを実行します。test
: さて、単体テストをコンパイルして実行しますbuild
: dist
にlinux
配布可能フォルダーを作成しますrun
: go run
使用してコードを実行しますrun-dev
: Dockerコンテナを作成して実行しますrelease
: リリース Docker イメージを作成しますpublish
: VERSION
ファイルの内容をバージョンとして使用して、dockerhub に docker イメージを公開します。publish-latest
: latest
タグを付けて dockerhub に docker イメージを公開しますwatch
: ファイル変更のlint
とtest
を実行します。func-test
: features
フォルダー内で機能テストを実行します。 この検索エンジンには 6 つの主要コンポーネントがあります。
システム内では各コンポーネントに明確な責任があり、すべてが連携してクエリやドキュメントのインデックス作成要求に応答します。
新しく作成されたドキュメントを保存し、ID を付与する責任があります。制約は次のとおりです。
id
を保存しますid
生成を有効にします。ssd
かhdd
か)を認識する「用語」とドキュメントの逆索引を保存します
terms
ドキュメントセットの関係を保存しますkey
操作戦略を有効にする新しいドキュメントがそれを理解すると、インデックス データベースとドキュメント データベースの両方に保存されます。
ユーザー入力を解析し、ツリー状のデータ構造を使用してクエリ プランに変換します。
lucene
のものと似ています。クエリ ツリーを指定すると、クエリ ツリーが実行される制限と環境を認識してクエリ ツリーを最適化します。
構造化された計画を作成した後、クエリはindex
データベースから有効なデータを取得します。このステップは実行プログラムによって実行されます。
このクエリ言語は、設計を簡素化し、どのようなトレードオフが行われたかを理解するために、lucene に大きく基づいています。
現在使用されるテスト シナリオでは、名前、コンテンツ、タグによるポッドキャストのインデックス付けが行われます。
基本的な使用法はsearchzin-example
にあります。
searchzin は MIT ライセンスの下で利用できます。