Введение
Функция поиска на GitHub иногда может испытывать трудности, особенно когда вы пытаетесь искать, задавая прямой вопрос. Этот подход часто приводит к нерелевантным результатам, что может быть разочаровывающим. Эта проблема более заметна при поиске по вопросам или запросам на слияние, где детали действительно имеют значение.
Рассмотрим пример:

Поиск на GitHub имеет свои ограничения, но мир поисковых технологий быстро улучшается. Семантический поиск, который понимает контекст и значение слов, а не только сами слова, становится все более популярным. Хотя GitHub еще не добавил эту функцию, она действительно может помочь сделать поиск лучше и более релевантным.
С учетом этого мы создали проект , который использует семантический поиск для того, чтобы помочь разработчикам легче находить нужные вещи в их репозиториях. Мы используем Manticore Search , который поддерживает векторный поиск, чтобы предложить настраиваемый вариант семантического поиска, который соответствует различным потребностям. Это показывает, насколько полезной и мощной может быть эта новая технология.
К вашему сведению, Manticore Search — это мощная поисковая система с открытым исходным кодом, которая выдержала испытание временем, с корнями, уходящими в 2001 год. Изначально известная как Sphinx, она служила решением для полнотекстового поиска для баз данных MySQL и PostgreSQL. Проект обрел новую жизнь, когда в 2017 году он был форкнут и перерожден как Manticore Search, продолжая развиваться как независимая, полностью открытая поисковая система.
Что такое семантический поиск?
Семантический поиск — это техника поиска, которая выходит за рамки простого совпадения ключевых слов. Она пытается понять значение и контекст слов, чтобы улучшить точность поиска, учитывая как намерения пользователя, так и контекстуальное значение терминов.
Преимущества
- Понимание контекста: Интерпретирует контекст запросов для предоставления точных результатов.
- Улучшенная точность: Снижает количество нерелевантных результатов, понимая намерения пользователя.
- Улучшенный пользовательский опыт: Экономит время и усилия, быстро предоставляя релевантную информацию.
Проблема традиционного поиска на GitHub
Когда вы ищете с помощью простых ключевых слов на GitHub, вы часто не получаете то, что действительно ищете. Скажем, вы вводите "исправление ошибки", чтобы найти помощь. Поиск может показать вам страницы, которые точно упоминают "исправление ошибки", но он может пропустить связанные темы, такие как "разрешение ошибок" или "решение проблем".
Этот тип поиска может привести к множеству результатов, которые не полезны. Поскольку эти поиски не улавливают тонкости нашего общения, вы можете почувствовать себя довольно разочарованным. Разработчики тратят слишком много времени на просмотр этих нерелевантных результатов, что может замедлить их проекты и сократить объем выполненной работы.
Тем не менее, поиски по ключевым словам все еще имеют свое место. Для быстрых, конкретных поисков, когда вы точно знаете, что вам нужно, например, для поиска конкретного кода ошибки, они могут быть очень быстрыми и точными.
Вот мы ищем "исправление интеграции" на GitHub и не нашли ничего в том же репозитории:

А тот же поиск для исправления интеграции на Manticore Semantic Search дает нам результат, которым мы гораздо более вероятно будем довольны:

Мы создали прототип того, как мог бы выглядеть семантический поиск на GitHub. Ознакомьтесь с нашим демо поиска по вопросам GitHub , работающим на Manticore Vector Search. Он позволяет вам искать по вопросам GitHub, PR и комментариям таким образом, который понимает контекст. Это особенно полезно, когда вы не можете вспомнить точные слова вопроса, но знаете его контекст. Вы также можете добавить свой собственный репозиторий здесь и запустить проект локально, следуя инструкциям на GitHub .
Давайте посмотрим, как этот подход может улучшить релевантность и точность ваших результатов поиска.
История успеха: добавление векторного поиска в демо Manticore GitHub
Когда мы интегрировали векторный поиск в наше демо поиска по вопросам GitHub , которое демонстрирует возможности Manticore Search, результаты были впечатляющими. Традиционные поиски по ключевым словам очень эффективны для запросов, где известны конкретные термины и точность совпадения этих терминов имеет критическое значение. Однако добавление семантического поиска дополняет это, позволяя нам точно определить, что ищут пользователи, с большей точностью, особенно в контекстах, где намерение или значение запроса имеют такое же значение, как и конкретные используемые слова.
Используя предварительно обученные модели от Hugging Face , мы преобразовали текст в векторы высокой размерности. Эти векторы понимают значение слов, что позволяет нам проводить более точные поиски.
Here are a few examples of how it can improve the quality of search in the Manticore Search repository :
Example: Finding open bugs more easily

Imagine you're a developer looking for issues related to a specific bug. A traditional search for "memory leak" might miss issues titled "limit the memory usage" or "index out of memory". With Vector Search, the engine knows these terms are similar. This means you get all the relevant results without guessing all the possible keywords.
Example: Checking if a feature request exists before opening a new one

Think about users searching for feature requests related to "user authentication." Keyword searches might only show issues with the exact phrase, but semantic search understands related terms like "login system", "Access denied", and "Session-level user variables". This way, no valuable feedback is missed.
Example: Easier collaboration

Contributors working on different parts of a project can really benefit from semantic search. For example, a search for "API rate limits" brings up relevant discussions about "throttling", "250 results" limit, and "rate limiting". This helps team members connect related issues even if they use different terms.
Example: Security audits

Security audits need thoroughness, often requiring searches for different security vulnerabilities. A search for "SQL injection" with traditional keyword methods might miss issues under "database infiltration" or "SQL vulnerability". Semantic search makes sure all related security concerns are found, helping with more complete security audits.
How to Get Started with Semantic Search on GitHub Using Manticore Search
To implement semantic search in our GitHub demo project, we followed these steps:
Setting Up Manticore: We integrated Manticore Search with our project by installing Manticore Search along with the Columnar library implementing the vector search functionality.
Creating the Database Structure: We set up a real-time table in Manticore Search to store GitHub issues and their semantic representations. These representations, also known as embeddings, are stored as arrays of numbers (also known as vectors). The table includes fields for the issue text, a unique identifier, and a vector that captures the semantic meaning of the text.
Here's an example of the schema we used:
CREATE TABLE issues ( id BIGINT, body TEXT, vector FLOAT_VECTOR knn_type='hnsw' knn_dims='4' hnsw_similarity='l2' );In this setup,
bodyholds the text of the issue,idis a unique identifier, andvectoris a text embedding for thebody.You might be asking: What are text embeddings?
Text embeddings are a way to turn words or phrases into numbers that show their meaning and how they relate to each other. Think of it as a method to convert text into a format that computers can understand. These number representations help machines analyze text better, making it easier to compare different texts and find similarities.
In our example, the vector is a series of numbers that capture the main idea of the text in the body field. This allows us to do things like finding similar issues or grouping related topics, even if they use different words to describe the same idea.
We used an AI model from Sentence Transformers . If you want an easy way to get started, we suggest checking out the HuggingFace Text Embedding API service . It lets you run your own API and create embeddings tailored to your needs.
Insert Data: Fill your table with vector data.
Let's take a look at how an insert statement would work with the schema we just talked about. This will give us a clear picture of how data is added to our database structure.
INSERT INTO issues VALUES ( 1, 'Hello World', (0.653448, 0.192478, 0.017971, 0.339821) ), ( 2, 'This is a bug', (-0.148894, 0.748278, 0.091892, -0.095406) );Query Data: Retrieve contextually relevant information using vector-based queries.
To fetch documents using vector queries, we follow these steps:
- Get the search query.
- Generate a text embedding for the query.
- Use the resulting vector in a query like this:
SELECT id, body FROM issues WHERE knn ( vector, 10, (0.286569, -0.031816, 0.066684, 0.032926) );Note that
10is the parameter K, which represents the number of nearest neighbors (closest vectors) to retain in the result set. By default, the results are sorted by vector distance, with the closest ones appearing first.
That's a wrap! In just a few steps, we've built a Semantic Search using text embeddings and the Vector Search feature of Manticore Search. It's as simple as that! 🙌
Keyword search vs Semantic search
When it comes to enhancing code search on GitHub, semantic search offers some distinct advantages:
- Better search results: Semantic search understands the meaning behind your queries, allowing you to find relevant code, even if it doesn't match the exact keywords you use.
- Context-aware code exploration: It can navigate through large codebases more intelligently, helping you understand how different pieces of code relate to each other.
- Efficient troubleshooting: By understanding the context, semantic search can quickly surface relevant issues, solutions, and code snippets that help resolve bugs faster.
- Упрощенное обнаружение соответствующих реализаций и идей: Он может идентифицировать похожие реализации или предлагать альтернативные подходы на основе намерения кода, а не только его формулировки.
Однако важно учитывать ограничения семантического поиска по сравнению с традиционным поиском по ключевым словам:
- Вычислительная сложность: Проведение семантических поисков может требовать значительных вычислительных ресурсов и может занять больше времени, чем поиск по ключевым словам, особенно в больших репозиториях.
- Потенциал для неверной интерпретации: ИИ может не всегда правильно понимать контекст или намерение запроса, что приводит к менее релевантным результатам.
- Отсутствие точного контроля: Разработчикам может быть сложнее находить точные фразы или конкретные фрагменты кода, когда поисковая система интерпретирует значение, а не сопоставляет ключевые слова.
- Зависимость от обучающих данных: Качество результатов семантического поиска тесно связано с обучающими данными модели ИИ, что означает, что оно может не всегда идеально соответствовать последним паттернам кода или терминологии.
Учитывая эти соображения, будущее поиска на GitHub, вероятно, заключается в гибридном подходе. Сочетая сильные стороны как семантического, так и поискового по ключевым словам, GitHub может предложить более мощный инструмент для разработчиков:
- Опции пользовательского интерфейса: Позволяя пользователям переключаться между семантическим и поиском по ключевым словам в зависимости от их непосредственных потребностей.
- Гибридные алгоритмы поиска: Сочетая глубокое понимание семантического поиска с точностью сопоставления ключевых слов для предоставления наиболее релевантных результатов.
- Контекстное переключение: Автоматически выбирая лучший метод поиска в зависимости от типа запроса и поведения пользователя, обеспечивая наилучшие возможные результаты.
Интеграция обоих методов в возможности поиска GitHub поможет разработчикам быстрее и эффективнее находить нужный код, балансируя нюансированное понимание семантического поиска с надежностью и скоростью поиска по ключевым словам.
Будущее поиска на GitHub: Умнее с семантическим поиском
Традиционный поиск на GitHub, основанный на ключевых словах, будет развиваться в более умный и интуитивный подход: семантический поиск. Эта революционная технология призвана изменить способ взаимодействия разработчиков с репозиториями, повышая продуктивность и упрощая процесс разработки, особенно при поиске по запросам на слияние, проблемам и комментариям.
Семантический поиск для запросов на слияние, проблем и комментариев предлагает несколько ключевых преимуществ:
- Результаты с учетом контекста: В отличие от традиционного поиска, который полагается на точные совпадения ключевых слов, семантический поиск понимает контекст и намерение вашего запроса. Это означает, что вы с большей вероятностью найдете соответствующие запросы на слияние, проблемы и комментарии, даже если они не используют точные слова, которые вы искали.
- Обработка естественного языка: Вы можете искать, используя повседневный язык, не запоминая конкретный синтаксис или ключевые слова. Это упрощает поиск нужного.
- Улучшенный рейтинг релевантности: Семантический поиск может приоритизировать результаты на основе того, насколько близко они соответствуют значению вашего запроса, экономя ваше время при навигации по многочисленным запросам на слияние, проблемам или комментариям.
- Понимание синонимов и связанных концепций: Поисковая система может распознавать связанные термины и концепции, расширяя круг релевантных результатов без необходимости в множественных поисках.
- Улучшенное сотрудничество: Упрощая поиск связанных обсуждений и вкладов, семантический поиск может улучшить командное сотрудничество и обмен знаниями в рамках проектов.
- Исторический контекст: Семантический поиск имеет потенциал понимать эволюцию обсуждений в проблемах и запросах на слияние, предлагая более полные результаты, которые включают соответствующий исторический контекст.
- Межрепозиторные инсайты: Продвинутый семантический поиск может потенциально предоставлять инсайты по нескольким репозиториям, помогая разработчикам обнаруживать связанные обсуждения или решения в других проектах.
Реализация семантического поиска становится более достижимой благодаря современным базам данных, таким как Manticore Search. С его встроенными возможностями векторного поиска Manticore Search прокладывает путь для таких платформ, как GitHub, к внедрению этой передовой технологии.
Хотя GitHub еще не полностью интегрировал семантический поиск, разработчики могут испытать его мощь через наш демо-проект . Эта инициатива с открытым исходным кодом демонстрирует потенциал семантического поиска в среде, похожей на GitHub.
