- Подборка релевантных документов по содержанию и заголовку
- Пересечение результатов (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": ""
}
]