CompleteSearch — это быстрая и интерактивная поисковая система для контекстно-зависимого префиксного поиска по заданной коллекции документов. Он не только предоставляет результаты поиска, как и обычная поисковая система, но и завершает последнее (возможно, только частично набранное) слово запроса, которое приводит к совпадению. Это можно использовать для обеспечения очень эффективной поддержки различных функций: автозаполнение запросов, фасетный поиск, поиск синонимов, устойчивый к ошибкам поиск, семантический поиск. Список публикаций о методах, лежащих в основе CompleteSearch и его многочисленных приложениях, приведен в конце этой страницы.
Для демонстрации различных наборов данных просто зайдите в этот репозиторий и следуйте инструкциям ниже. С помощью одной командной строки вы получаете работающую демонстрацию (вы можете выбрать один из нескольких наборов данных, каждый размером в несколько миллионов документов, поэтому не особенно большой, но и не маленький). CompleteSearch масштабируется до коллекций с десятками и даже сотнями миллионов документов, не теряя при этом своей интерактивности.
Проверьте репозиторий и создайте образ докера.
git clone https://github.com/ad-freiburg/completesearch
cd completesearch
docker build -t completesearch .
Следующая командная строка создает индекс поиска, а затем запускает сервер поиска для набора данных, указанного через переменную DB
(подходит имя любого подкаталога приложений). Под указанным PORT
у вас будет общий пользовательский интерфейс, а также 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-контейнер, который монтирует три тома, которые мы кратко объясним ниже:
приложения Эта папка содержит конфигурацию для каждого приложения. Каждая конфигурация содержит всего два файла. Makefile
, определяющий способ построения индекса (его можно легко настроить, см. ниже). И config.js
для настройки общего пользовательского интерфейса.
data Эта папка содержит файл CSV с исходными данными (по одной записи в строке, в столбцах) и индексные файлы. Все они имеют общий префикс. Дополнительную информацию об индексе смотрите ниже.
ui. Эта папка содержит код общего пользовательского интерфейса. Если вы просто хотите использовать CompleteSearch в качестве серверной части и создать собственный пользовательский интерфейс, вам не нужно монтировать этот том. Однако приятно всегда иметь работающий пользовательский интерфейс для тестирования без какой-либо дополнительной работы.
Как и все поисковые системы, CompleteSearch создает индекс, с помощью которого затем может эффективно отвечать на запросы. Это не обычный инвертированный индекс, а нечто более причудливое: полуинвертированный индекс или индекс гибрида (HYB) . Вам не обязательно это понимать, если вы просто хотите использовать CompleteSearch. Но если вам интересно, подробнее об этом можно узнать в публикациях ниже.
Для построения индекса CompleteSearch требуются два входных файла: один с суффиксом .words
и один с суффиксом .docs
. Первый содержит содержимое ваших документов, разделенное на слова. Второй содержит данные, которые вы хотите отображать при попадании в поисковые системы. Эти два понятия обычно связаны, но не совсем тождественны. Формат очень простой и описан на примере здесь.
Если у вас есть особые пожелания, вы можете сами создать эти два входных файла на основе любых ваших данных. Тогда вы получите полный контроль над тем, что CompleteSearch будет и может сделать для вас. Однако в большинстве приложений вы можете использовать наш универсальный синтаксический анализатор CSV . В качестве входных данных он принимает файл CSV (одна запись в строке с фиксированным количеством столбцов в строке) и на его основе создает файлы .words и .docs .
Анализ CSV очень мощный и легко настраиваемый. Вы можете увидеть, как он используется в Makefile различных примеров приложений (в подкаталогах каталога applications
). Более подробно подмножество опций описано здесь. Полный список см. в коде, который анализирует параметры.
Бинарный файл для запуска механизма CompleteSearch называется startCompletionServer
. Он очень мощный и имеет много возможностей. Для некоторых примеров использования вы можете просмотреть Makefile
в applications
директорах и включенный Makefile
одного из примеров приложений. Подробную документацию по всем опциям можно найти в README.md в каталоге src.
После запуска вы можете задавать вопросы, используя наш универсальный настраиваемый пользовательский интерфейс (см. выше). Или вы можете напрямую обратиться к серверной части через HTTP API, предоставляемый startCompletionServer
. API очень простой и описан в конце этой страницы. Поэкспериментируйте с ним на одном из примеров приложений, чтобы понять, что оно делает. Вы также можете взглянуть на (довольно простой) код JavaScript общего пользовательского интерфейса, чтобы понять, как он работает и для чего его можно использовать.
Чтобы продемонстрировать свой экземпляр CompleteSearch своим друзьям, вы можете захотеть, чтобы он запускался под необычным URL-адресом, а не http://my.weird.hostname.somewhere:76154
. Предположим, на вашем компьютере работает веб-сервер Apache. Затем вы можете добавить следующий раздел в свой apache.conf
или в отдельный файл конфигурации, включенный в apache.conf
. Вам необходимо заменить servername
полным доменным именем (FQDN) компьютера, на котором работает ваш веб-сервер Apache. Вам необходимо заменить hostname
полным доменным именем компьютера, на котором работает интерфейс CompleteSearch. Это может быть тот же компьютер, что и 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 и базы данных @ CIDR 2007
ESTER: эффективный поиск по тексту, сущностям и отношениям @ SIGIR 2007
Эффективное интерактивное расширение запросов с полным поиском @ CIKM 2007.
Чувствительный к выходным данным поиск с автозаполнением при поиске информации, 2008 г.
Семантический полнотекстовый поиск с помощью ESTER: масштабируемый, простой, быстрый @ ICDM 2008