- Подборка релевантных документов по содержанию и заголовку
- Пересечение результатов (intersection) при запросе по нескольким словам через
+ - Исключение из результатов (subtraction) при запросе по нескольким словам через
- - Фильтрация результатов по категориям документов
- Фильтрация результатов по тегам документов
- Использование фильтра стоп-слов
- Подсветка слов в результатах (расстояние между словами в абзаце не более установленного)
- Поддержка возможности ошибок в слове
- Поддержка ошибок при использовании неправильной раскладки клавиатуры
- Поддержка ошибок при использовании неправильной раскладки клавиатуры
- Маркировка результатов для всех форм слова (выделение основы слова)
- Расчёт времени поиска
- Исправление ошибок в выводе результатов (повторений столько, сколько результатов)
- Поддержка словарей трансформации
- Реализация поддержки ключевых слов с использованием ранга по частотности внутри соответствующего списка
- Реализация загрузки констант из .env
- Реализация загрузки словарей трансформации из папки
- Реализация загрузки словаря стоп-слов
- Поддержка аргументов командной строки с поддержкой всех значений из .env
- Логирование на уровне файлов операционной системы
- Обработка сигналов операционных систем из семейства Unix
- Сборка и работа приложения внутри контейнера
Хит — документ, в котором найдено хотя бы одно вхождение слов поисковой фразы (по сути единица результатов обработки запроса к поисковой системы).
Пересечение результатов (intersection) — случай, когда нужно найти те документы, в которых обязательно встречаются все слова поискового запроса, перечисленные через знак +.
Исключение из результатов (subtraction) — случай, когда нужно исключить те документы, в которых встречаются слова поискового запроса со знаком - перед ними.
Категория — кластер корпуса документов (необходимо использовать поле category).
Тег — маркер документа, который используется для лучшей навигации и таксономизации корпуса текстов (необходимо использовать поле tags).
Ключевые слова — отдельные слова или фразы, при поиске по которым хит обретает наивысший ранг (частотность при этом определяется внутри списка ключевых слов, а не по тексту в целом).
Пример команды для запуска приложения при наличии файла с переменными окружения .env:
go build main.go && ./mainПример команды для запуска приложения с помощью аргументов командной строки:
go build main.go && ./main --search-content search-content.json --stop-words stop-search.json --dicts-dir dics --app-port 8080Пример команды для сборки образа необходимо выполнить команду:
docker build -t search .Пример команды для запуска приложения в контейнере при наличии файла с переменными окружения .env:
docker run -ti --rm -p 8080:8080 --name search --mount type=bind,source="$(pwd)",target=/app/data searchПример команды для приложения в контейнере с помощью аргументов командной строки:
docker run -ti --rm -p 8080:8080 --name search --mount type=bind,source="$(pwd)",target=/app/data search --search-content data/search-content.json --stop-words data/stop-search.json --dicts-dir data/dics --app-port 8080Параметры для работы сервиса:
SEARCH_CONTENT— используется для определения пути к файлу с контентом (обязательный параметр)STOP_WORDS— используется для определения словаря стоп-словDICTS_DIR— используется для определения папки с другими словарями преобразованияAPP_NAME— название приложения (фигурирует в названии файла логов наряду с текущим временем, значение по умолчаниюSEARCH-DB-LESS)APP_HOST— используется для определения хоста веб-сервиса (значение по умолчанию"")APP_PORT— используется для определения порта веб-сервиса (обязательный параметр, значение по умолчанию8080)APP_LOG_LIMIT— количество записей в логе, после которых данные сохраняются в файл (значение по умолчанию100)
Параметры для настройки отображения хитов:
WORDS_MARKER_TAG— тег для выделения поисковой фразы в хитах (значение по умолчаниюmark)WORDS_DISTANCE_BETWEEN— максимальная количество символов между искомыми словами в тексте при пересечении (значение по умолчанию20)WORDS_TRIMMER_PLACEHOLDER— строка, которая ставится на концах обрезки (значение по умолчанию...)WORDS_OCCURRENCES— нижний порог встречаемости слова внутри параграфа (влияет на показ хитов) (значение по умолчанию-1)WORDS_AROUND_RANGE— количество символов до и после для понимания контекста использования искомого слова (значение по умолчанию42)WORDS_DISTANCE_LIMIT— редакционное расстояние для основ слов в запросе и в поисковом индексе (значение по умолчанию3)WORDS_FREQUENCY_LIMIT— процент от максимальной частотности, при которой документ попадает в список хитов (значение по умолчанию0.01)WORDS_TITLE_WEIGHT— вес для частотности в заголовках при формировании поискового индекса (значение по умолчанию5.0)WORDS_KEYWORDS_WEIGHT— вес для частотности в списке ключевых слов при формировании поискового индекса (значение по умолчанию2.5)
Параметры для работы сервиса:
-c,--search-content— используется для определения пути к файлу с контентом (обязательный параметр)-w,--stop-words— используется для определения словаря стоп-слов-d,--dicts-dir— используется для определения папки с другими словарями преобразования-n,--app-name— название приложения (фигурирует в названии файла логов наряду с текущим временем, значение по умолчаниюSEARCH-DB-LESS)-h,--app-host— используется для определения хоста веб-сервиса (значение по умолчанию"")-p,--app-port— используется для определения порта веб-сервиса (обязательный параметр, значение по умолчанию8080)-l,--app-log— количество записей в логе, после которых данные сохраняются в файл (значение по умолчанию100)
Параметры для настройки отображения хитов:
--words-marker-tag— тег для выделения поисковой фразы в хитах (значение по умолчаниюmark)--words-distance-between— максимальная количество символов между искомыми словами в тексте при пересечении (значение по умолчанию20)--words-trimmer-placeholder— строка, которая ставится на концах обрезки (значение по умолчанию...)--words-occurrences— нижний порог встречаемости слова внутри параграфа (влияет на показ хитов) (значение по умолчанию-1)--words-around-range— количество символов до и после для понимания контекста использования искомого слова (значение по умолчанию42)--words-distance-limit— редакционное расстояние для основ слов в запросе и в поисковом индексе (значение по умолчанию3)--words-frequency-limit— процент от максимальной частотности, при которой документ попадает в список хитов (значение по умолчанию0.01)--words-title-weight— вес для частотности в заголовках при формировании поискового индекса (значение по умолчанию5.0)--words-keywords_weight— вес для частотности в списке ключевых слов при формировании поискового индекса (значение по умолчанию2.5)
Поисковый запрос реализуется методом POST к серверу. Используются следующие поля:
search— для поисковой фразы;category— фильтрация хитов по категориям материалов;tags— (массив значений) фильтрация хитов по тегам.
Ответ на поисковый запрос возвращается в формате JSON, в виде массива хитов, каждый из которых представлен следующей JSON-схемой:
[
{
// Заголовок материала
"title": ""
// Ссылка на материал
"link": ""
// Список фрагментов контента, в которых встречается поисковая фраза
"fragments": [ "" ]
// Теги найденного материала
"tags": [ "" ]
// Категория найденного материала
"category": ""
}
]