Пошукова машина sphinx: основні можливості, застосування

У наші дні навряд чи хтось захоче вибирати товари в інтернет-магазині, де потрібно розбиратися в категоріях або прокручувати довгі списки товарів.

Існує безліч доступних інструментів, які можуть зробити внутрішній пошук по сайту швидким, інтуїтивно зрозумілим і адаптованим до будь-яких потреб клієнтів.

пошукова машина Shpinx

Здається, пошукова машина Sphinx обіцяє саме це. Повнотекстова пошукова система є одночасно гнучкою і швидкою.

Sphinx працює як автономний сервер і не зберігає текст для себе. Він створює Індекс на основі запиту SQL, який витягує документи з бази даних, зберігає індекси, а пізніше повертає рядки, що відповідають запиту.

пошук інформації

Що таке Sphinx

Пошукова машина Sphinx-це повнотекстова пошукова система, яка безкоштовна, швидка і масштабована. Вона призначена для продуктивності та актуальності. Не має аналогів ні в одній традиційній базі даних.

Велика кількість відомих сайтів з високим трафіком покладаються на нього для просунутого рівня пошуку і масштабованості

Основні можливості Sphinx

Sphinx допомагає включити та підвищити цінність пошуку та масштабованості завдяки наступним характеристикам, які роблять його популярним серед тисяч розробників та продавців електронної комерції.

  1. Висока швидкість пошуку (до 150-250 Мбіт/сек на ядрі з 1 000 000 документів).
  2. Підтримка розподіленого пошуку в реальному часі.
  3. Висока швидкість індексації (до 10-15 Мбіт/сек на одне ядро).
  4. Висока масштабованість (найбільший з відомих кластерів здатний індексувати до 3 000 000 000 документів і може обробляти понад 50 мільйонів запитів на день).
  5. Одночасна підтримка декількох полів (до 32 за замовчуванням) для повнотекстового пошуку документів.
  6. Можливість підтримувати ряд додаткових атрибутів для кожного документа (наприклад, групи, мітки часу і т. д.).
  7. Використання стоп-слів.
  8. Підтримка різних API мова програмування (наприклад, для PHP, Python, Java, Perl, Ruby, .NET і C ++ і т. д.).
  9. Можливість обробляти як однобайтові кодування, так і UTF-8.
  10. Морфологічний пошук.
  11. Інтеграція з найпопулярнішими системами управління базами даних (наприклад, MySQL, PostgreSQL)

Загалом пошукова машина Sphinx має понад 50 різних функцій (і ця кількість постійно зростає).

пошук інформації

Як працює Sphinx

Вся складність схеми роботи пошуковика підсумовується в 2 ключових моментах:

  • використовуючи вихідну таблицю, Sphinx створює власну базу даних індексів;
  • потім, коли користувач надсилає запит API, Sphinx повертає масив ідентифікаторів, які відповідають ідентифікаторам у вихідній таблиці.

Навіщо використовувати Sphinx

Основна причина, по якій слід його використовувати, - швидкість пошуку. Звичайні пошуки користувача в MySQL займають значно більше часу, ніж пошук у Sphinx. Користувач починає помічати різницю, як тільки його база даних матиме мільйони записів. Якщо база даних невелика (наприклад, форум із 100 користувачів), це не зовсім те, що потрібно. Хоча можна спробувати. Плюс є цікаві функції, такі як морфологія слова (якщо користувач шукає кішок, це буде відповідати кішці, якщо він шукає бігу, це буде відповідати бігу, бігу і т. д.).

Інша причина-це повнотекстовий пошук. Чи замислювався хтось про те, що під час здійснення пошуку двох слів в Google він буде шукати їх в тому ж абзаці або в двох абзацах (або в реченні), але не по всій сторінці? Sphinx ж дозволяє робити схожі речі.

пошукова система

Масштабованість полягає в наступному. Якщо користувач має великі бази даних на багатьох серверах, Sphinx подбає про це. І додаток вважатиме, що він працює на одному сервері. Sphinx може зняти більшу частину навантаження з PHP-серверів з точки зору обробки та пошуку інформації.

Sphinx трохи відрізняється від того, до чого користувач звик із запитами MySQL. Так що не варто очікувати отримати все миттєво.

Що таке індексація

Sphinx витягує дані з таблиці в базі даних MySQL і виконує для них процес, який називається індексацією. Індексація створює файл, який можна легко знайти за допомогою Sphinx. Наприклад, якщо користувач спробує знайти документ у Microsoft Word, він шукатиме слова одне за одним у тексті документа. У дуже великих документах пошук може бути дуже повільним. З іншого боку, Sphinx робить індексацію перед виконанням будь-яких пошуків. Це створює індекс, який можна ефективно шукати, а не шукати слово за словом у всьому документі. Хорошим прикладом є Індекс енциклопедії. Якщо користувач хоче знайти інформацію про котів, він може робити те, що робить Microsoft Word, і читати кожну сторінку енциклопедії, шукаючи появу слова»кішка". Або він може подивитися алфавітний покажчик в кінці книги, де написано, що про кішок інформація розміщена на сторінках 104, 195 і 653. Так набагато простіше.

Shpinx пошукова машина

Можна шукати тільки те, що проіндексовано

Що потрібно пам`ятати, це те, що Sphinx може шукати лише в індексі. Це означає, що кожен раз, коли користувач хоче знайти останні результати, він повинен оновити Індекс.

Доступ до даних

Якщо користувач вже працював з PHP з MySQL, йому буде набагато простіше. В іншому випадку йому, мабуть, слід вивчити PHP та MySQL.

Пошукова система Sphinx зазвичай повертає ідентифікатори MySQL, а не дані.

Головне, що потрібно пам`ятати про Sphinx, це те, що він не отримує дані. В першу чергу він отримує ідентифікатори документів. Sphinx робить інтенсивну частину, яка шукає конкретні записи. Потім користувач може виконати просту частину через MySQL, який отримує цей документ. Так, наприклад, якщо Sphinx витягує ідентифікатори документів 1, 5 і 7 з індексу, то буде потрібно виконати запит в MySQL для отримання записів (ймовірно, з ідентифікаторами 1,5 і 7). Можна подумати, що це примітивно, але MySQL вимагає дуже мало ресурсів для пошуку ідентифікатора документа порівняно з пошуком слова.

Приклад. Скажімо, Sphinx витягує документи з ідентифікаторами 1, 5, 7 (SELECT * FROM documents WHERE id IN (1,5,7)).

Користувач повідомляє MySQL, що потрібно вибрати всі стовпці з таблиці документів (або будь-який інший, в якій був результат), де ідентифікатор (або те, що було названо його полем) дорівнює 1, 5 або 7. І потім можна використовувати mysql_fetch_array в PHP, щоб подивитися на дані і робити з ними, що завгодно.

Після того як буде освоєна робота в Sphinx для впорядкування результатів, можна зберегти порядок наступним чином:

  1. Збереження порядку результатів у масиві (просто зберегти властивість id для збігів).
  2. Виконання IMPLODE на масиві за допомогою $ result = implode(",", $ array), де $array-це масив результатів користувача. Result буде зберігати рядок ідентифікаторів результатів, розділених комою. · SELECT * FROM documents WHERE id IN ($result) ORDER BY FIELD(id,$result).

Тут користувач повідомляє MySQL, що потрібно впорядкувати результати за полем id у порядку, вказаному в $ result.

Це може здатися складним, але до цього швидко звикаєш, і незабаром користувач сам напише функції, які впораються з усім цим для нього.

пошукова система

Заключні висновки

Використання Sphinx замість MySQL може забезпечити значні переваги швидкості. Sphinx ідеально підходить для пошуку статичних таблиць. Але в той же час для часто оновлюваних рядків можливість використання простих індексних файлів відсутня. Замість цього потрібно або впровадити дельта-файли, або перейти на індексацію в реальному часі. І те, і інше рішення несе додаткові витрати продуктивності. І на закінчення: для більш ефективної роботи в Sphinx необхідно планування, тому що користувач повинен завчасно встановити всі необхідні джерела і індексні файли.

Заміна Sphinx для MySQL не є тривіальною, але також не настільки складною, щоб відмовитися від цієї можливості. У разі якщо необхідна висока швидкість пошуку, слід подумати про перехід з MySQL на Sphinx, навіть коли Користувач не потребує повнотекстовому пошуку.

Статті на тему