Поиск кода в Bitbucket Server

в 6:35, , рубрики: atlassian, bitbucket, EAP, elastic, elasticsearch, Git, search, поиск, поисковые технологии

С удовольствием делюсь новостью, которая, надеюсь, порадует некоторых читателей Хабра: в Bitbucket Server вот-вот появится возможность поиска по коду. Буквально на днях вышел релиз по программе раннего доступа (EAP).

Начну с вольного перевода обращения менеджера продукта, опубликованного в блоге Atlassian:

Как часто это случалось с вами: вы видите сообщение об ошибке, но не знаете, в какой части кода она происходит, или вам известно название функции, но не репозиторий, в коде которого она определена. Многие из вас просили добавить в Bitbucket Server поиск по коду, и я рад сообщить, что ваше ожидание подошло к концу. Сегодня мы приглашаем наших пользователей опробовать поиск по коду в Bitbucket Server через программу раннего доступа (EAP). Теперь вы можете искать и находить нужный код с помощью строки поиска:
Строка поиска

Как это работает?

Мы понимаем, что у многих команд огромное количество кода. Поэтому мы сделали так, чтобы можно было легко ограничить результаты поиска конкретным проектом или репозиторием с помощью поисковых фильтров. Кроме того, можно искать код на заданном языке (например, lang:java) или в файлах с определённым расширением (например, ext:css).
Поисковые фильтры

Операторы AND, OR и NOT помогут уточнить запрос, они полезны для дальнейшей фильтрации результатов поиска в случае, когда их слишком много.
Логические операторы

Что делать, чтобы начать пользоваться?

Рад, что вы спросили! Здесь вы можете скачать дистрибутив Bitbucket Server EAP с поддержкой поиска по коду, а с запуском и настройкой должна помочь подготовленная нами пошаговая инструкция. Мы будем признательны, если вы расскажете о своих впечатлениях от EAP дистрибутива, — ваши отзывы крайне важны для нас. Заполнив эту короткую и простую анкету, вы поможете нам улучшить поиск для вас и других пользователей Bitbucket к его официальному релизу.

Мы работаем над тем, чтобы в скором времени порадовать вас бóльшими возможностями. Удачного поиска!

Стив Кинг

TL;DR

В кратком пересказе, инструкция по установке сводится к следующим шагам:

  1. Установить Git и Perl (про установку Git подробнее тут)
  2. Скачать нужный дистрибутив со страницы EAP
  3. Запустить установщик (в случае использования ZIP-дистрибутива перед запуском Bitbucket Server придётся вручную выполнить ещё несколько предварительных шагов)
  4. Пройти процедуру установки и дождаться запуска Bitbucket Server
  5. ???
  6. PROFIT!!!

Как устроен поиск?

Как можно было заметить по страницам справки и содержимому дистрибутива, для хранения индекса, с помощью которого осуществляетя поиск, используется Elasticsearch. Он, в свою очередь, основан на известной библиотеке Apache Lucene.
Elasticsearch

В 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:atlassian
    • jira repository:bitbucket project:atlassian
    • jira repo:atlassian/bitbucket

  • proj: или project:<ключ_проекта/ключ_репозитория> — поиск во всех репозиториях определённого проекта. Например, найти файлы в проекте "atlassian", содержащие слово "jira", можно с помощью любого из таких поисковых запросов:
    • jira proj:atlassian
    • jira project:atlassian

Модификаторы расширения и языка файла

Поиск может быть ограничен языками и расширениями файлов. Для некоторых языков эти два критерия идентичны: например, модификаторы lang:clojure и ext:clj приведут к одинаковому результату. Однако есть и такие языки, которым соответствуют несколько расширений файлов: например, расширения .hs и .lhs используются в Haskell, и файлы с любым из этих расширений будут включены в результаты поиска с модификатором lang:haskell.

  • lang: или language:<язык> — поиск файлов на определённом языке. Язык соответствует набору расширений. Например, следующие запросы найдут файлы в формате LaTeX (то есть, имеющие расширение .ltx, .tex или .text), содержащие слово "jira":
    • jira lang:latex
    • jira language:latex

  • ext: или extension:<расширение_файла> — поиск файлов с определённым расширением. Например, найти файлы, содержащие слово "jira" и имеющие расширение .lhs, можно с помощью любого из этих запросов:
    • jira ext:lhs
    • jira extension:lhs


На всякий случай, замечу, что инструкции на приведённых страницах справки в ближайшее время будут дорабатываться, чтобы сделать процедуры установки, настройки и использования поиска в Bitbucket Server ещё лучше. Напомню, ваши комментарии касательно любых аспектов использования EAP релиза горячо приветствуются.

Для меня эта новость особенно приятна и важна потому, что я принимаю непосредственное участие в разработке поиска. Буду рад ответить на любые вопросы и комментарии.

Автор: detouched

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js