CompleteSearch は、ドキュメントの特定のコレクションに対してコンテキスト依存のプレフィックス検索を行うための高速かつ対話型の検索エンジンです。通常の検索エンジンのように検索結果を提供するだけでなく、ヒットにつながった最後の (おそらく部分的にのみ入力された) クエリ単語の補完も提供します。これを使用すると、クエリのオートコンプリート、ファセット検索、同義語検索、エラー耐性のある検索、セマンティック検索などのさまざまな機能を非常に効率的にサポートできます。 CompleteSearch の背後にある技術とその多くの応用に関する出版物のリストは、このページの最後に記載されています。
さまざまなデータセットのデモについては、このリポジトリをチェックアウトして、以下の手順に従ってください。単一のコマンド ラインで、動作するデモを取得できます (複数のデータセットから選択できます。それぞれのサイズは数百万ドキュメントに相当するため、特に大きくはありませんが、小さくもありません)。 CompleteSearch は、対話性を損なうことなく、数千万、さらには数億のドキュメントを含むコレクションにまで拡張できます。
リポジトリをチェックアウトし、Docker イメージをビルドします
git clone https://github.com/ad-freiburg/completesearch
cd completesearch
docker build -t completesearch .
次のコマンド ラインは、検索インデックスを構築し、 DB
変数で指定されたデータセットの検索サーバーを起動します (アプリケーションの任意のサブディレクトリ名が機能します)。指定したPORT
の下に、汎用 UI と API が存在します (下記のセクション 4 を参照)。
export DB=movies && PORT=1622 && docker run -it --rm -e DB=${DB} -p ${PORT}:8080 -v $(pwd)/applications:/applications -v $(pwd)/data/:/data -v $(pwd)/ui:/ui --name completesearch.${DB} completesearch -c "make DATA_DIR=/data/${DB} DB=${DB} csv pall start"
このコマンド ラインは、CSV のダウンロードと圧縮解除、インデックスの作成、サーバーの起動をすべて一度に実行します。 CSV を既にダウンロードしている場合、再度ダウンロードされることはありません (Makefile target csv:
は効果がありません)。すでにインデックスを一度構築している場合は、Makefile ターゲットpall:
(precompute all の略) を省略できます。
上記の派手なコマンド ラインで何が起こっているのかをもう少し詳しく理解したい場合は、このセクションをお読みください。コマンドラインはまず、このリポジトリ内のコードから Docker イメージを構築します。ここまでは順調ですね。次に、3 つのボリュームをマウントする Docker コンテナーを実行します。これについては、次に簡単に説明します。
アプリケーションこのフォルダーには、各アプリケーションの構成が含まれています。各構成には 2 つのファイルのみが含まれます。インデックスの構築方法を指定するMakefile
(これは高度にカスタマイズ可能です。以下を参照)。そして、汎用 UI をカスタマイズするためのconfig.js
。
dataこのフォルダーには、元のデータ (列単位で 1 行に 1 つのレコード) を含む CSV ファイルとインデックス ファイルが含まれています。それらはすべて共通の接頭辞を持っています。インデックスの詳細については、以下を参照してください。
uiこのフォルダーには、汎用 UI のコードが含まれています。 CompleteSearch をバックエンドとして使用し、独自の UI を構築するだけの場合は、このボリュームをマウントする必要はありません。ただし、追加の作業を行わずに、常に動作する UI をテストに利用できるのは便利です。
すべての検索エンジンと同様に、CompleteSearch はインデックスを構築し、それを利用してクエリに効率的に応答できます。これは通常の転置インデックスではなく、より高級なもの、つまり半転置インデックスまたはハイバード (HYB)インデックスです。 CompleteSearch を使用するだけの場合は、これを理解する必要はありません。ただし、興味がある場合は、以下の出版物で詳細を学ぶことができます。
インデックスを構築するには、CompleteSearch には 2 つの入力ファイルが必要です。1 つは接尾辞.words
で、もう 1 つは接尾辞.docs
です。 1 つ目には、文書の内容が単語に分割されて含まれます。 2 番目には、検索エンジンのヒットとして表示するデータが含まれています。通常、この 2 つは関連していますが、まったく同じではありません。形式は非常に単純なので、ここでは例で説明します。
特別な希望がある場合は、データが何であれ、これら 2 つの入力ファイルを自分で構築できます。そうすれば、CompleteSearch が何を実行できるかを完全に制御できるようになります。ただし、ほとんどのアプリケーションでは、汎用 CSV パーサーを使用できます。 CSV ファイル (1 行あたり 1 レコード、1 行あたりの列数が固定) を入力として受け取り、そこから.wordsおよび.docsファイルを生成します。
CSV 解析は非常に強力で、高度にカスタマイズ可能です。これがさまざまなサンプル アプリケーションのMakefile ( applications
ディレクトリのサブディレクトリ内) でどのように使用されているかを確認できます。ここでは、オプションのサブセットについて詳しく説明します。完全なリストについては、オプションを解析するコードを参照してください。
CompleteSearch エンジンを開始するバイナリはstartCompletionServer
と呼ばれます。非常に強力で、オプションも豊富です。いくつかの使用例については、director applications
のMakefile
と、サンプル アプリケーションの 1 つに含まれているMakefile
を参照してください。すべてのオプションの詳細なドキュメントは、src ディレクトリの README.md にあります。
開始すると、汎用のカスタマイズ可能な UI (上記を参照) を使用してクエリを実行できます。または、 startCompletionServer
によって提供される HTTP API を介して、バックエンドに直接要求することもできます。 API は非常にシンプルであり、このページの最後で説明されています。サンプル アプリケーションを試してみて、それが何をするのかを感じてください。また、汎用 UI の (かなり単純な) JavaScript コードを見て、それがどのように機能し、何に使用できるかを理解することもできます。
CompleteSearch インスタンスを友達に自慢するには、 http://my.weird.hostname.somewhere:76154
ではなく、派手な URL で実行するとよいでしょう。マシン上で Apache Web サーバーが実行されていると仮定します。次に、 apache.conf
またはapache.conf
に含まれる別の構成ファイルに次のセクションを追加できます。 servername
Apache Web サーバーが実行されているマシンの完全修飾ドメイン名 (FQDN) に置き換える必要があります。 hostname
、CompleteSearch フロントエンドが実行されているマシンの FQDN に置き換える必要があります。これは、 servername
と同じマシンにすることができますが、そうである必要はありません。
< VirtualHost *:80>
ServerName example.cs.uni-freiburg.de
ServerAlias dblp example.cs.uni-freiburg.de
ServerAdmin webmaster@localhost
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://< hostname >:5000/
ProxyPassReverse / http://< hostname >:5000>/
...
</ VirtualHost >
ここでは、CompleteSearch の背後にある技術とその用途を説明した出版物の一部を紹介します。この研究はマックス・プランク情報学研究所で行われました。もうしばらく前のことですが、CompleteSearch が提供する機能と効率は依然として最先端であることがわかりました。
入力を減らし、より多くを検索: 簡潔なインデックスによる高速オートコンプリート @ SIGIR 2006
CompleteSearch エンジン: インタラクティブ、効率的、IR&DB 統合に向けて @ CIDR 2007
ESTER: テキスト、エンティティ、関係の効率的な検索 @ SIGIR 2007
CIKM 2007 での完全な検索による効率的なインタラクティブなクエリ拡張
情報検索 2008 における出力依存のオートコンプリート検索
ESTER によるセマンティック全文検索: スケーラブル、簡単、高速 @ ICDM 2008