Простая реализация поисковой системы.
В учебных целях, в основном для понимания деталей реализации того, как создаются поисковые системы, компромиссов в производительности и структуры.
Идея состоит в том, чтобы сделать изоморфное приложение от пользовательского интерфейса к системе базы данных.
Приложение можно развернуть с помощью Docker или двоичного файла, выпущенного на GitHub.
./searchzin -c <path-to-config>.yml
После этого вы можете заглянуть в http://localhost:8080
чтобы увидеть страницу поиска.
Конфигурацию можно выполнить либо с помощью файла конфигурации, расположенного по умолчанию в /etc/searchzin/config.yml
, либо с помощью ключей конфигурации в форме -C key=value
, вторая форма переопределяет первую.
Конфигурация по умолчанию:
port : 8080 # Service port
path :
log : /var/log/searchzin # Log directory
data : /var/lib/searchzin # Data directory
Вся структура проекта выполнена на голанге с использованием фреймворка gin
.
Зависимости управляются с помощью dep
.
Большая часть инструментальной цепочки проекта управляется Makefile
, важными целями являются:
install
: установите необходимые зависимости и git-хуки.readme
: выполняет включение файлов README.md
lint
: выполняет линтинг и форматирование кода.test
: Итак, скомпилируйте и запустите модульные тесты.build
: Создает распространяемую папку linux
в dist
run
: запускает код с помощью go run
run-dev
: создает и запускает Docker-контейнер.release
: создает образ Docker выпуска.publish
: публикует образ Docker на DockerHub, используя содержимое файла VERSION
в качестве версии.publish-latest
: публикует образ Docker на DockerHub с latest
тегом.watch
: выполняет lint
и test
модификации файла.func-test
: выполняет функциональные тесты внутри папки features
. Эта поисковая система состоит из 6 основных компонентов:
Каждый компонент имеет четкую ответственность в системе, и все они работают вместе, отвечая на запросы и запросы на индексирование документов.
Он отвечает за хранение и присвоение идентификаторов вновь созданным документам. Ограничения:
id
id
без конфликтов для сохраненияssd
или hdd
Хранит обратный индекс «терминов» и документов.
terms
для документирования отношений набораkey
для запросов с приближением ключевых слов.Учитывая новый документ, он понимает его и сохраняет как в индексной базе данных, так и в базе данных документов.
Анализирует вводимые пользователем данные и преобразует их в план запроса, используя древовидную структуру данных.
lucene
.Учитывая дерево запросов, оптимизирует его, учитывая ограничения и среду, в которой он будет выполняться.
После наличия структурированного плана запрос извлекает эффективные данные из базы данных index
, этот шаг выполняется исполнителем.
Этот язык запросов в значительной степени основан на Lucene, чтобы упростить проектирование и понять, какие компромиссы были приняты.
Текущий тестовый сценарий, который будет использоваться, будет индексировать подкасты по имени, содержанию и тегам.
Базовое использование можно найти в searchzin-example
.
searchzin доступен по лицензии MIT.