Сделал простой текстовый поиск.

Прежде, чем приступить, посмотрел как реализован поиск в Obsidian и VSCode. Что в одном, что в другом случае в основе лежит простой регекс по содержимому файлов. А результаты поиска, например в Obsidian, ссылаются на смещение текста в файле.

Еще на этапе проектирования я ориентировался на блочную структуру документов, поэтому единицей индексирования сделал блок.

Каждый блок индексируется и отображается в результатах поиска. У каждого блока имеется свой идентификатор, что необходимо при связывании блоков между собой и позиционировании документа в случае переходов по ссылкам.

При реализации поиска немного отошел от ТЗ: перенес сайдбар результатов поиска в левую часть экрана. В правой части отображается карточка заметки.

Еще одной функциональной деталью в ТЗ было поведение графа при поиске.

Вот как это получилось сделать: при наведении мышкой на результат поиска - граф связей позиционируется на узле содержащим найденный текст. В видимую область включаются связи первого уровня.

При клике мышкой на результате поиска открывается заметка.

All Articles