Войти Регистрация
Data base

146. Один файл на репозиторий в поиске по коду

Средняя

Elasticsearch · Elasticsearch 8.19.12

С 2013 года поиск по коду GitHub работал на Elasticsearch: к ноябрю 2013-го — 8 млн репозиториев и около 5 запросов в секунду, позже 162 узла. Одна из жалоб пользователей — один репозиторий забивает всю первую страницу.

Индекс code: repo (keyword), path (keyword), language (keyword), content (text), stars (integer, звёзды репозитория), indexed_at (date).

Найдите файлы на Go, где в content есть оба слова retry и backoff. Из каждого репозитория — один файл, проиндексированный последним. Репозитории — по stars по убыванию, первые 5.

В работе: Выдача поиска по коду, сгруппированная по репозиториям.

Как проверяем Движка Elasticsearch в браузере пока нет, поэтому здесь не запрос, а выбор решения. Выберите один вариант. После ответа — почему каждый вариант верный или нет. Ответ один на подход: после него показываем разбор.
collapseсортировка по нескольким полямmatchfilter

Источник: GitHub Engineering, «A brief history of code search at GitHub», 2021. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.

Какой запрос покажет по одному свежему Go-файлу из каждого репозитория?

  • collapse по repo, сортировка stars desc, indexed_at desc
  • без collapse
  • collapse, indexed_at asc
  • collapse без фильтра language