С удовольствием делюсь новостью, которая, надеюсь, порадует некоторых читателей Хабра: в Bitbucket Server вот-вот появится возможность поиска по коду. Буквально на днях вышел релиз по программе раннего доступа (EAP).
Начну с вольного перевода обращения менеджера продукта, опубликованного в блоге Atlassian:
Как часто это случалось с вами: вы видите сообщение об ошибке, но не знаете, в какой части кода она происходит, или вам известно название функции, но не репозиторий, в коде которого она определена. Многие из вас просили добавить в Bitbucket Server поиск по коду, и я рад сообщить, что ваше ожидание подошло к концу. Сегодня мы приглашаем наших пользователей опробовать поиск по коду в Bitbucket Server через программу раннего доступа (EAP). Теперь вы можете искать и находить нужный код с помощью строки поиска:
Как это работает?
Мы понимаем, что у многих команд огромное количество кода. Поэтому мы сделали так, чтобы можно было легко ограничить результаты поиска конкретным проектом или репозиторием с помощью поисковых фильтров. Кроме того, можно искать код на заданном языке (например,lang:java) или в файлах с определённым расширением (например,ext:css).
ОператорыAND,ORиNOTпомогут уточнить запрос, они полезны для дальнейшей фильтрации результатов поиска в случае, когда их слишком много.
Что делать, чтобы начать пользоваться?
Рад, что вы спросили! Здесь вы можете скачать дистрибутив Bitbucket Server EAP с поддержкой поиска по коду, а с запуском и настройкой должна помочь подготовленная нами пошаговая инструкция. Мы будем признательны, если вы расскажете о своих впечатлениях от EAP дистрибутива, — ваши отзывы крайне важны для нас. Заполнив эту короткую и простую анкету, вы поможете нам улучшить поиск для вас и других пользователей Bitbucket к его официальному релизу.
Мы работаем над тем, чтобы в скором времени порадовать вас бóльшими возможностями. Удачного поиска!
Стив Кинг
TL;DR
В кратком пересказе, инструкция по установке сводится к следующим шагам:
- Установить Git и Perl (про установку Git подробнее тут)
- Скачать нужный дистрибутив со страницы EAP
- Запустить установщик (в случае использования ZIP-дистрибутива перед запуском Bitbucket Server придётся вручную выполнить ещё несколько предварительных шагов)
- Пройти процедуру установки и дождаться запуска Bitbucket Server
- ???
- PROFIT!!!
Как устроен поиск?
Как можно было заметить по страницам справки и содержимому дистрибутива, для хранения индекса, с помощью которого осуществляетя поиск, используется Elasticsearch. Он, в свою очередь, основан на известной библиотеке Apache Lucene.

В Bitbucket Server поиск обеспечивают два модуля: первый занимается индексацией репозиториев, второй обслуживает поисковые запросы от пользователей. Индексация происходит постоянно в фоновом режиме. Если вы обновляете Bitbucket Server, который уже содержит какое-то количество репозиториев, первоначальная индексация может занять некоторое время, однако как только он�� завершится, последующие изменения обрабатываются очень быстро. Стоит отметить, что поиск доступен сразу, но пока идёт индексация, его результаты могут быть неполными. Кроме того, с целью оптимизации производительности введена небольшая задержка между моментом изменения репозитория (например, коммит нового кода) и моментом, когда это изменение отражается в результатах поиска. По умолчанию, эта задержка может достигать 15 секунд.
Процедура установки, по сравнению с предыдущими версиями Bitbucket Server, не изменилась: все конфигурационные действия, необходимые для работы поиска, выполняются автоматически. В то же время, необязательно использовать встроенный экземпляр Elasticsearch: при желании, можно настроить требуемую конфигурацию самостоятельно.
Что именно можно искать?
Поиск имеет ряд ограничений:
- Индексируются только файлы основной ветки (в большинстве репозиториев таковой является
master, хотя это не правило) - Индексируются текстовые файлы меньше 512 Кб
- Не поддерживается поиск по маске (например,
qu?ck buil*) - Не поддерживается поиск по регулярным выражениям
- Все пунктуационные знаки из запроса удаляются
- Поиск регистронезависимый
- В запросе не может быть больше десяти выражений — сочетаний термов и операторов
- Максимальная длина запроса ограничена 250 символами
Поисковый запрос должен содержать, по крайней мере, один терм, который может быть словом или заключённой в кавычки фразой.
Операторы
Операторы могут быть добавлены в запрос, чтобы уточнить поиск. Вот их текущий список:
| Оператор | Пример запроса | Значение |
|---|---|---|
AND |
bitbucket AND server |
Соответствует файлам, содержащим оба слова "bitbucket" и "server" |
OR |
bitbucket OR server |
Соответствует файлам, содержащим хотя бы одно из слов "bitbucket" или "server" |
NOT |
bitbucket NOT jira |
Соответствует файлам, содержащим слово "bitbucket", но не содержащим слово "jira" |
- |
bitbucket -jira |
Используется перед термом; соответствует файлам, содержащим слово "bitbucket", но не содержащим слово "jira" |
( ) |
bitbucket AND (server OR cloud) |
Соответствует файлам, содержащим слово "bitbucket" и любое из слов "server" или "cloud" |
Запрос может содержать несколько термов, и по умолчанию, они неявно объединяются с помощью логического оператора AND. То есть, запрос bitbucket server эквивалентен запросу bitbucket AND server.
Модификаторы
Модификаторы помогают ограничить область поиска. Они записываются в формате модификатор:значение. Если в запросе содержится несколько модификаторов, они неявно объединяются с помощью оператора AND и применяются ко всему выражению. На данный момент поддержаны следующие модификаторы:
repo:илиrepository:<ключ_репозитория>— поиск в определённом репозитории. Требует наличия модификатораproj:, идентифицирующего проект. Например, найти файлы в репозитории "bitbucket" проекта "atlassian", которые содержат слово "jira", можно любым из следующих поисковых запросов:
jira repo:bitbucket proj:atlassianjira repository:bitbucket project:atlassianjira repo:atlassian/bitbucket
proj:илиproject:<ключ_проекта/ключ_репозитория>— поиск во всех репозиториях определённого проекта. Например, найти файлы в проекте "atlassian", содержащие слово "jira", можно с помощью любого из таких поисковых запросов:
jira proj:atlassianjira project:atlassian
Модификаторы расширения и языка файла
Поиск может быть ограничен языками и расширениями файлов. Для некоторых языков эти два критерия идентичны: например, модификаторы lang:clojure и ext:clj приведут к одинаковому результату. Однако есть и такие языки, которым соответствуют несколько расширений файлов: например, расширения .hs и .lhs используются в Haskell, и файлы с любым из этих расширений будут включены в результаты поиска с модификатором lang:haskell.
lang:илиlanguage:<язык>— поиск файлов на определённом языке. Язык соответствует набору расширений. Например, следующие запросы найдут файлы в формате LaTeX (то есть, имеющие расширение.ltx,.texили.text), содержащие слово "jira":
jira lang:latexjira language:latex
ext:илиextension:<расширение_файла>— поиск файлов с определённым расширением. Например, найти файлы, содержащие слово "jira" и имеющие расширение.lhs, можно с помощью любого из этих запросов:
jira ext:lhsjira extension:lhs
На всякий случай, замечу, что инструкции на приведённых страницах справки в ближайшее время будут дорабатываться, чтобы сделать процедуры установки, настройки и использования поиска в Bitbucket Server ещё лучше. Напомню, ваши комментарии касательно любых аспектов использования EAP релиза горячо приветствуются.
Для меня эта новость особенно приятна и важна потому, что я принимаю непосредственное участие в разработке поиска. Буду рад ответить на любые вопросы и комментарии.



