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