Реалізація автодоповнення пошуку на Vue.js для каталогу Бітрікс

При роботі з каталогом з 50 000 товарів вбудований пошук Бітрікс (`bitrix:search.title`) гальмує: кожен запит займає до 2 секунд. Користувачі змушені вводити повний запит, а товари з тисячі позицій важко знайти. Ми вирішили це завдання за допомогою Vue-компонента, який надсилає debounced-запити до Б
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Реалізація автодоповнення пошуку на Vue.js для каталогу Бітрікс
Середній
~1-2 тижні

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1454
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1017
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    759
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    879
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    802
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1162

При роботі з каталогом з 50 000 товарів вбудований пошук Бітрікс (bitrix:search.title) гальмує: кожен запит займає до 2 секунд. Користувачі змушені вводити повний запит, а товари з тисячі позицій важко знайти. Ми вирішили це завдання за допомогою Vue-компонента, який надсилає debounced-запити до Бітрікс API пошуку та відображає пропозиції за 300 мс. Наш досвід показує, що автодоповнення знижує відсоток нерелевантних запитів на 60% і підвищує конверсію в покупку. Vue.js автодоповнення у 5 разів швидше за стандартний Бітрікс-пошук. Наш досвід у розробці подібних рішень — понад 7 років; ми реалізували більше 50 успішних проектів. Нижче — технічна реалізація, яку ми застосували в кількох комерційних проектах.

Як працює API пошуку в Бітрікс?

Модуль search Бітрікс використовує таблицю b_search_content (повнотекстовий індекс MySQL) або FULLTEXT-індекси. Для автодоповнення потрібен швидкий endpoint. Згідно з документацією модуля Search (dev.1c-bitrix.ru), для автодоповнення використовується префіксний пошук. Приклад контролера:

Код контролера ```php class SearchController extends \Bitrix\Main\Engine\Controller { public function suggestAction(string $query, int $limit = 8): array { if (mb_strlen($query) < 2) return ['items' => []];
 $results = \CSearch::Search([ 'QUERY' => $query . '*', 'SITE_ID' => SITE_ID, 'MODULE' => 'iblock', 'PARAM2' => $iblockId, ]); $items = []; while ($item = $results->Fetch()) { $items[] = [ 'title' => $item['TITLE'], 'url' => $item['URL'], 'image' => $item['PARAM1'], ]; if (count($items) >= $limit) break; } return ['items' => $items]; } 

}

</details> Документація модуля Search — <cite>dev.1c-bitrix.ru</cite>. Для прискорення запитів ми рекомендуємо додати індекс на `b_search_content` по `DATE_CHANGE` і `SITE_ID`. ### Чому варто використовувати Vue.js для автодоповнення? <a href="https://en.wikipedia.org/wiki/Vue.js"><cite>Vue.js</cite></a> дозволяє створити реактивний інтерфейс без перезавантаження сторінки. Вбудовані засоби (computed, watch) спрощують реалізацію debounce, підсвічування збігів та клавіатурної навігації. Наприклад, компонент Vue 3 нижче використовує `useDebounceFn` з @vueuse/core для керування частотою запитів. <details><summary>Код Vue-компонента (компонент Vue 3)</summary> ```vue <script setup> import { ref, watch } from 'vue'; import { useDebounceFn } from '@vueuse/core'; const query = ref(''); const suggestions = ref([]); const isOpen = ref(false); const fetchSuggestions = useDebounceFn(async (q) => { if (q.length < 2) { suggestions.value = []; return; } const { data } = await api.get('/search/suggest', { params: { query: q } }); suggestions.value = data.items; isOpen.value = data.items.length > 0; }, 300); watch(query, fetchSuggestions); </script> 

Деталі реалізації UI

Для відображення пропозицій використовуємо випадний список з абсолютним позиціонуванням. Стандартний CSS для випадаючого меню:

.suggestions-dropdown { position: absolute; top: 100%; left: 0; width: 100%; background: #fff; border: 1px solid #ccc; max-height: 300px; overflow-y: auto; z-index: 1000; } 

Клавіатурна навігація — стрілки вгору/вниз, Enter для вибору, Escape для закриття. Реалізується через прослуховування keydown на кореневому елементі. Індекс активного рядка зберігається в activeIndex ref.

Підсвічування збігів у результатах:

function highlight(text, query) { const regex = new RegExp(`(${escapeRegex(query)})`, 'gi'); return text.replace(regex, '<mark>$1</mark>'); } 

Групування результатів — показуємо окремо товари, категорії, статті блогу. Використовуємо потрійний паралельний запит або єдиний endpoint, що повертає згрупований JSON.

Історія пошуку

Останні 5 запитів зберігаємо в localStorage. При фокусі на порожньому полі показуємо історію. Реалізація через watch на query і запис в localStorage при кожному унікальному пошуку.

Які типові проблеми вирішує автодоповнення?

Часта проблема — користувач не знає точну назву товару. Автодоповнення з синонімами та виправленням помилок вирішує це. Ми підключаємо MeiliSearch з налаштованими синонімами (наприклад, «аспірин» → «ацетилсаліцилова кислота»). Другий кейс — пошук за артикулами: часто клієнти вводять числовий код. Третя проблема — повільний відгук сервера: debounce 300 мс та кешування теговане на стороні Бітрікс скорочують навантаження. Зовнішній пошуковий двигун (пошуковий двигун Бітрікс) підключається до Бітрікс для великих каталогів.

Практичний кейс: аптечна мережа

Аптечна мережа з 15 000 позицій зіткнулася з проблемою: вбудований пошук не враховував синоніми та помилки. Ми підключили MeiliSearch з налаштованими синонімами. Vue-компонент з debounce 250 мс. Час відповіді автодоповнення — 30-80 мс. Вбудований Бітрікс-пошук залишено для сторінки повних результатів. Економія часу користувачів — близько 2 секунд на запит.

Як налаштувати автодоповнення: покрокова інструкція

  1. Встановіть та налаштуйте модуль пошуку Бітрікс (якщо не встановлено).
  2. Створіть PHP-контролер з методом suggestAction, як показано вище.
  3. Розробіть компонент Vue 3 з debounce, підсвічуванням та клавіатурною навігацією.
  4. Інтегруйте компонент в шаблон сайту (наприклад, в header).
  5. Протестуйте на реальних запитах та оптимізуйте час відповіді.

Для великих каталогів: MeiliSearch або Elasticsearch

Якщо каталог великий (100 000+ позицій) і Бітрікс-пошук повільний — автодоповнення звертається до зовнішнього пошукового двигуна:

  • MeiliSearch — просте встановлення, швидкий, опенсорс (підходить для більшості проектів). MeiliSearch у 10 разів швидший за вбудований пошук при 100 000 товарах. Вихідний код на GitHub (github.com/meilisearch/meilisearch).
  • Elasticsearch — потужніший, складніший, підходить для ентерпрайзу. Репозиторій: GitHub (github.com/elastic/elasticsearch).

Індексація товарів Бітрікс в MeiliSearch — через агент, який при зміні b_iblock_element синхронізує дані. Агент виконується кожну хвилину і перевіряє прапорець NEED_INDEX. В середньому, час індексації 100 000 товарів — 2-3 хвилини.

Що входить в роботу (під ключ)

  • Аудит поточного пошукового функціоналу та вибір архітектури (зовнішній двигун або Бітрікс-пошук).
  • Розробка PHP-контролера для suggest-запитів.
  • Створення Vue-компонента з debounce, підсвічуванням, клавіатурною навігацією та історією.
  • Інтеграція з зовнішнім пошуковим двигуном (MeiliSearch/Elasticsearch) при необхідності.
  • Налаштування індексів та агентів для синхронізації.
  • Тестування на реальних даних та юзабіліті.
  • Документація API та інструкція по встановленню.
  • Гарантія на розроблений компонент — 1 рік.
  • Технічна підтримка протягом 1 місяця після запуску.

Процес роботи над пошуком з автодоповненням

Етап Опис Строк
Аналітика Аудит поточного пошуку, вибір підходу (зовнішній двигун або Бітрікс-пошук) 1-2 дні
Розробка Створення API-контролера, Vue-компонента з підсвічуванням та клавіатурою 2-4 дні
Тестування Перевірка на реальних даних, юзабіліті-тестування 1-2 дні
Документація Опис API, інструкція по встановленню 0.5 дня
Підтримка 1 місяць після запуску, виправлення багів включено

Строки виконання

Варіант Строки
Автодоповнення на Бітрікс-пошуку від 3 до 5 робочих днів
З групуванням результатів та підсвічуванням від 5 до 8 робочих днів
З інтеграцією MeiliSearch/Elasticsearch від 8 до 15 робочих днів

Вартість розробки визначається після аналізу — залежить від обсягу каталогу та вимог до інтеграції. Вартість базової версії — від 500$. Інвестиції в автодоповнення окупаються за рахунок збільшення конверсії та зниження навантаження на підтримку. Наприклад, для інтернет-магазину з 50 000 товарів щомісячна економія на підтримці може становити до 300$. Оцінимо ваш проект безкоштовно — пишіть нам! Зв'яжіться з нами для консультації — підберемо оптимальне рішення під ваш каталог. Замовте розробку та отримайте готовий компонент з документацією та навчанням команди.

Наша компанія має 7+ років досвіду в розробці пошукових рішень для Бітрікс та виконала понад 50 успішних проектів.