Дата публикации: 03:36:30 ().
В современных системах документации важно обеспечить пользователям гибкие и точные способы поиска информации. Одним из таких механизмов является точное совпадение поиска (exact match search), которое позволяет искать фразы, заключённые в двойные кавычки, без учёта частичных совпадений или stemming‑алгоритмов. В этой статье мы рассмотрим реализацию этой функции в популярной теме mkdocs-material, опираясь на информацию из открытого issues #1772 на GitHub.
Что такое точный поиск через двойные кавычки?
Точный поиск подразумевает, что запрос, заключённый в двойные кавычки ("..."), будет обработан как единая фраза, и система вернёт только те документы, в которых эта фраза встречается полностью и в том же порядке. Например:
"экспериментальные данные"найдёт только страницы, где именно эта фраза присутствует.- Без кавычек тот же запрос мог бы вернуть страницы, содержащие слова экспериментальные и данные в любом порядке или даже отдельно.
Данный подход особенно полезен при работе с технической документацией, где термины могут иметь несколько значений, а необходимость избежать ложных срабатываний критична.
История обсуждения в репозитории mkdocs-material
Идея добавить поддержку точного поиска через двойные кавычки была предложена в issue #1772 (опубликовано 22 июня 2020 г.). Автор отметил, что:
- В официальной документации mkdocs-material отсутствует упоминание о такой возможности.
- На его взгляд, реализация не должна ломать существующий функционал для остальных пользователей.
- На момент создания issue не существовало открытых или закрытых задач, напрямую связанных с этим предложением.
Дискуссия в issue показала, что сообщество заинтересовано в данном улучшении, поскольку многие пользователи сталкивались с необходимостью искать точные фразы в больших наборах markdown‑файлов.
Техническая реализация
Для добавления точного поиска через двойные кавычки в mkdocs-material потребуется внести изменения в два основных компонента:
- Индексатор поиска – отвечает за построение индекса из содержимого документов.
- Поисковый движок – обрабатывает пользовательский запрос и возвращает результаты.
- При индексации сохранять не только отдельные токены, но и биграммы (или n‑граммы) для быстрого определения последовательностей слов.
- Добавить метаполе, указывающее позицию каждого токена в документе, чтобы можно было проверять смежность при поиске фразы.
- Снять внешние кавычки и разбить внутреннюю строку на отдельные токены.
- Для каждого токена получить список документов, где он встречается.
- Пересечь эти списки, оставив только документы, содержащие все токены.
- Для каждого оставшегося документа проверить, что токены идут подряд и в том же порядке (с учётом позиций, сохранённых в индексе).
- Вернуть только те документы, где условие выполнено.
- Повышение точности поиска – пользователи получают релевантные результаты без лишнего шума.
- Совместимость с существующими запросами – обычный поиск без кавычек остаётся неизменным.
- Минимальное влияние на производительность благодаря использованию уже существующих структур lunr.js.
- Увеличение размера индекса из‑за хранения позиционных данных (обычно незначительно для средних проектов).
- Сложность обработки языков без чёткой delimitации слов (например, китайский, японский) – может потребоваться дополнительная токенизация.
- Не поддерживает поиск по фразе с учётом stemming или синонимов – строгое соответствие.
- Собрать проект с обновлённой версией mkdocs-material.
- Запустить локальный сервер:
mkdocs serve. - В строке поиска ввести запрос в двойных кавычках, например
"Allow exact match search". - Убедиться, что результаты содержат только те страницы, где эта фраза встречается полностью и в том же порядке.
- Сравнить с результатами обычного поиска без кавычек, чтобы убедиться, что они шире.
Изменения в индексаторе
В текущей реализации mkdocs-material используется библиотека lunr.js для полнотекстового поиска. Чтобы поддерживать фразы в кавычках, необходимо:
Изменения в поисковом движке
Когда пользователь вводит запрос вида "фраза", движок должен:
Если кавычки отсутствуют, поиск продолжает работать в обычном режиме (OR‑логика с учётом рейтинга).
Преимущества и возможные ограничения
Преимущества
Ограничения
Как протестировать функцию
После внесения изменений можно выполнить следующие шаги:
Реализация точного поиска через двойные кавычки в mkdocs-material – это логичное и востребованное улучшение, которое делает работу с документацией более эффективной и предсказуемой. Обсуждение в issue #1772 показало явный интерес сообщества, а технические детали, описанные выше, демонстрируют, что добавление этой функции возможно без существенного ущерба для производительности или обратной совместимости.
Мы надеемся, что данная статья поможет разработчикам и техническим писателям понять, как внедрить и использовать эту возможность в своих проектах на базе MkDocs Material.
Автор статьи: помощник по технической документации. Дата: .