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 目標csv:
則無效)。如果您已經建立過一次索引,則可以省略 Makefile 目標pall:
代表預先計算所有)。
如果您想更深入地了解上面的奇特命令行的情況,請閱讀本節。命令列首先根據此儲存庫中的程式碼建立一個 docker 映像。到目前為止,一切都很好。然後它運行一個 docker 容器,該容器安裝三個卷,我們接下來簡要解釋一下:
applications該資料夾包含每個應用程式的配置。每個配置僅包含兩個檔案。指定如何建立索引的Makefile
(這是高度可自訂的,請參見下文)。以及用於自訂通用 UI 的config.js
。
data此資料夾包含帶有原始資料(每行一筆記錄,按列)的 CSV 檔案和索引檔案。它們都有一個共同的前綴。有關該指數的更多信息,請參閱下文。
ui此資料夾包含通用 UI 的程式碼。如果您只想使用 CompleteSearch 作為後端並建立自己的 UI,則不必安裝此磁碟區。不過,總有一個可用於測試的工作 UI 是件好事,無需任何額外的工作。
與所有搜尋引擎一樣,CompleteSearch 會建立索引,然後可以有效地回答查詢。它不是普通的倒排索引,而是更奇特的東西:半倒排索引或混合(HYB)索引。如果您只想使用 CompleteSearch,則不必了解這一點。但如果您有興趣,可以在下面的出版物中了解更多。
為了建立索引,CompleteSearch 需要兩個輸入文件,一個帶有後綴.words
,另一個帶有後綴.docs
。第一個包含分成單字的文檔內容。第二個包含您想要在搜尋引擎點擊時顯示的資料。兩者通常相關,但並不完全相同。格式非常簡單,這裡透過範例進行描述。
如果您有特殊願望,您可以根據您的資料自行建立這兩個輸入檔。然後您就可以完全控制 CompleteSearch 將為您做什麼。但是,在大多數應用程式中,您可以使用我們的通用 CSV 解析器。它採用 CSV 檔案(每行一筆記錄,每行固定數量的列)作為輸入,並從中產生.words和.docs檔案。
CSV 解析非常強大且高度可自訂。您可以看到它是如何在各種範例應用程式的Makefile中使用的(在applications
目錄的子目錄中)。此處更詳細地描述了選項的子集。有關完整列表,請查看解析選項的程式碼。
用於啟動 CompleteSearch 引擎的二進位檔案稱為startCompletionServer
。它非常強大並且有很多選擇。對於某些範例用途,您可以查看主管applications
中的Makefile
以及範例應用程式之一所包含的Makefile
。所有選項的詳細文件可以在 src 目錄中的 README.md 中找到。
開始後,您可以使用我們的通用且可自訂的 UI 提出查詢(請參閱上文)。或者您可以透過startCompletionServer
提供的 HTTP API 直接詢問後端。該 API 非常簡單,在本頁末尾進行了描述。使用範例應用程式來體驗一下它的作用。您也可以查看通用 UI 的(相當簡單的)JavaScript 程式碼,以了解它的工作原理和用途。
要向您的朋友展示您的 CompleteSearch 實例,您可能希望它在一個奇特的 URL 下運行,而不是http://my.weird.hostname.somewhere:76154
。讓我們假設您的電腦上正在執行一個 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
完整的搜尋引擎:互動式、高效並走向 IR&DB 整合 @ CIDR 2007
ESTER:文本、實體和關係的高效搜尋 @ SIGIR 2007
透過完整的搜尋實現高效的互動式查詢擴展 @ CIKM 2007
輸出敏感自動完成搜尋 @ Information Retrieval 2008
使用 ESTER 進行語意全文搜尋:可擴展、簡單、快速 @ ICDM 2008