Що таке розумний пошук? Якими критеріями повинен володіти?

  1. Врахування особливостей мови (пошук слів в різних відмінах і відмінках)
  2. Пропозиція додаткових результатів (дозволяє користувачеві скористатися сайтом навіть у тому випадку, якщо на ньому немає необхідного контенту)
  3. Пропозиція додаткових запитів (уточнюючих пошук)

Почнемо з першого пункту. Основною проблемою типових пошуків є те, що слова шукають зовсім не в тому вигляді (не в тій формі), в якій вони існують на сайті. Скажімо, користувач шукає «шкарпетки», в той час як на сайті є тільки «носок».

Для того, щоб точніше зрозуміти чого хоче відвідувач, вам необхідно зберігати базу сайту в дещо іншому вигляді. Для цього, кожен текст сайту необхідно делеммізіровать. Тобто представити його у вигляді основ слів. Приміром, був текст «Вася вирішує математику», а став (після делеммізаціі) — «Василь вирішувати математика». Але насправді на сайті організовується база лем) лема — основа слова), і текст представляється у вигляді цифр-посилань на цю базу.

Надалі запит користувача також делеммізіруется, тобто на вході ми могли мати «Квіти оптом», а сайт буде шукати леми «Квітка опт».

Делеммізація може відбуватися двома способами. Для першого способу вам необхідно розмістити базу лем. Можна взяти базу Залізняка. Далі ви просто порівнюєте слово з базою і отримуєте посилання на потрібну лемму. Однак такий процес досить витратний за часом виконання.

Другий спосіб простіше — слово просто обрізається певним чином (відрізаються приставки і закінчення). І тут все залежить від коректності наданих правил. Зазвичай, для такого методу потрібно заготовити кілька сотень закінчень і винятків, але не дивлячись на це ви не отримаєте збіг слів «носок» і «шкарпетки» або ж вони обидва будуть обрізані до «ніс», що буде кореліровать із звичайним словом ніс.

Другий спосіб менш витратний (база того ж Залізняка буде займати від 80бм до 1Гб у вашій MySQL — з урахуванням всіх ключів, що прискорюють пошук). Однак найкраще використовувати обидва способи разом. Якщо слово було знайдено по базі — використовується інформація з бази, якщо слово знайдено не було — проводиться його розбирання до потрібної леми.

Ще один момент, який не слід випускати при такому пошуку — близькість слів. Для цього рекомендується зробити кілька рівнів точності отриманих результатів вихідного запиту. Перший рівень буде показувати всі знайдені слова, навіть якщо співпало тільки одне слово з усього запиту, наступний рівень буде показувати всі результати, де хоча б 70% від запиту будуть знайдені, а найсуворіший буде враховувати також і близькість слів один до одного.

Подібний механізм пошуку реалізований в CMS E5. Вам варто лише вказати поля, які будуть індексуватися і додати віджет пошуку в потрібне місце. Решта система зробить сама.

Перейдемо до наступного пункту зручностей — пропозиція додаткових результатів.

Як можна цього досягти? По-перше, ви можете порівнювати слова з іншим текстом (сам запит) використовуючи функції схожості слів (яких предостатньо в будь-якій мові програмування). Завдяки цьому, ваші користувачі побачать результат на свій запит навіть у тому випадку, якщо зробили його з друкарською помилкою. Однак це дозволить потрапляти в результати пошуку небажаного сміттю. Наприклад, користувач шукає запит «асінхмометр БР-12″, і якщо використовується подібний алгоритм, то він побачить в результатах і БР-13 і БР-14 і т.д. За цим краще в цьому випадку використовувати алгоритм виявлення помилок або ж відокремлювати слова, в яких можна шукати схожість від інших слів, які схожі на марку або модель приладу.

Крім цього, ви можете пропонувати відвідувачам контент з пошукових систем (у випадку, якщо на вашому сайті такого контенту немає).

Третій пункт пошукових зручностей заснований на уточненні та доповненні пошукового запиту. Якщо в результатах пошуку дуже багато сторінок, запропонуйте користувачеві вибрати одну з категорій або додаткове слово для запиту.

А для того, щоб зацікавити користувача на продовження пошуку, надайте йому ряд запитів, які шукали користувачі після пошуку аналогічного поточного запиту.

За матеріалами ДС Антона Баварського