5. Поиск по базе книг

Цель

Реализовать индексацию и поиск по данным books.csv. В качестве документов можно использовать только названия книг.

Руководство

Если вы используете библиотеку CLI11, то можете реализовать одну консольную утилиту с командами:

fts index --csv <path> --index <path>
fts search --index <path> [--query <query_text>]

Библиотека cxxopts не поддерживает синтаксиса команд, поэтому можно реализовать две отдельные утилиты:

indexer --csv <path> --index <path>
searcher --index <path> [--query <query_text>]

Поисковик при запуске без параметра --query переходит в интерактивный режим и ожидает ввод запроса. Для реализации такого режима можете воспользоваться библиотекой AmokHuginnsson/replxx.

CSV-файл можно парсить вручную или выбрать одну из существующих библиотек:

Скорее всего, вы заметите, что поисковая выдача содержит множество нерелевантных результатов. Предложите и реализуйте механизм отсечения мусора.

Дополнительно

  1. Предложите способ реализации поиска по нескольким полям: заголовку и автору. Какие компоненты поисковой системы затронет такое изменение?

  2. Насколько хорошо ваш парсер справляется с нормализацией слов? Какие вы можете найти слабые места? Выполните необходимые доработки.

  3. Предложите способ реализации поиска по ISBN и ISBN13. Чем он отличается от поиска по текстовым полям?

  4. Ручное тестирование качества поиска — крайне трудоемкая задача. Сгенерируйте корпус запросов и предложите критерии для оценки качества поиска. Для автоматизации интеграционного тестирования может буть удобно использовать более высокоуровневый язык программирования.