Новини високих технологій
» » Пошукова машина Sphinx: основні можливості, застосування

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

17-02-2019, 16:27
344
У наші дні навряд чи хтось захоче вибирати товари в інтернет-магазині, де потрібно розбиратися в категоріях або прокручувати довгі списки товарів. Існує безліч доступних інструментів, які можуть зробити внутрішній пошук по сайту швидким, інтуїтивно зрозумілим і адаптованим до будь-яких потреб клієнтів.
Пошукова машина Sphinx, здається, обіцяє саме це. Повнотекстова пошукова система є одночасно гнучкою і швидкою. Sphinx працює як автономний сервер і не зберігає текст для себе. Він створює індекс, заснований на SQL-запиті, який витягує документи з бази даних, що зберігає індекси і на більш пізньому етапі повертає рядки, що відповідають запиту.

Що таке Sphinx

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

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

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

Sphinx допомагає включити та підвищити цінність пошуку і масштабованості завдяки таким характеристикам, які роблять його популярним серед тисяч розробників і продавців електронної комерції. Висока швидкість пошуку (до 150-250 Мбіт/с на ядрі з 1000000 документів). Підтримка розподіленої пошуку в реальному часі. Висока швидкість індексації (до 10-15 Мбіт/с на одне ядро). Висока масштабованість (найбільший з відомих кластерів здатний індексувати до 3000000 000 документів і може обробляти більше 50 мільйонів запитів в день). Одночасна підтримка декількох полів (до 32 за замовчуванням) для повнотекстового пошуку документів. Можливість підтримувати ряд додаткових атрибутів для кожного документа (наприклад, групи, мітки часу тощо). Використання стоп-слів. Підтримка різних API мов програмування (наприклад, PHP, Python, Java, Perl, Ruby, .NET і C ++ тощо). Можливість обробляти як однобайтові кодування, так і UTF-8. Морфологічний пошук. Інтеграція з найбільш популярними системами управління базами даних (наприклад, 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, і читати кожну сторінку енциклопедії в пошуках появи слова «кішка». Або він може подивитися алфавітний покажчик у кінці книги, де написано, що про кішок інформація розміщена на сторінках 104195 і 653. Так набагато простіше.

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

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

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

Якщо користувач вже працював з PHP з MySQL, йому буде набагато простіше. В іншому випадку йому, ймовірно, слід вивчити PHP і MySQL. Пошукова машина Sphinx зазвичай повертає ідентифікатори MySQL, а не дані. Головне, що необхідно пам'ятати про Sphinx, це те, що він не витягує дані. В першу чергу він отримує ідентифікатори документів. Sphinx робить інтенсивну частина, яка шукає конкретні записи. Потім користувач може виконати просту частину через MySQL, який отримує цей документ. Так, наприклад, якщо Sphinx витягує ідентифікатори документів 1 5 і 7 з індексу, то потрібно виконати запит MySQL для отримання записів (ймовірно, з ідентифікаторами 15 і 7). Можна подумати, що це примітивно, але MySQL вимагає дуже мало ресурсів для пошуку ідентифікатора документа порівняно з пошуком слова. Приклад. Скажімо, Sphinx витягує документи з ідентифікаторами 157 (SELECT * FROM documents WHERE id IN (157)). Користувач повідомляє MySQL, що потрібно вибрати всі стовпці таблиці документів (або будь-який інший, в якій був результат), де ідентифікатор (або те, що було названо його полем) дорівнює 1 5 або 7. І потім можна використовувати mysql_fetch_array в PHP, щоб подивитися на дані і робити з ними, що завгодно. Після того як буде освоєна робота у Sphinx для впорядкування результатів, можна зберегти порядок наступним чином: Збереження порядку результатів у масиві просто зберегти властивість id для збігів). Виконання 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, навіть коли користувач не потребує повнотекстовому пошуку.
Цікаво по темі
Групування записів MySQL: group by
Групування записів MySQL: group by
Групування й аналіз записів таблиць бази даних представляють практичний інтерес у багатьох областях застосування. Рішення такого роду задач засобами
Доступ до результатів вибірки через MySQL fetch array
Доступ до результатів вибірки через MySQL fetch array
MySQL fetch array обробляє результати вибірки з бази даних і повертає в якості результату звичайний, асоціативний або обидва масиву відразу. Фактично
Практика використання функції count MySQL
Практика використання функції count MySQL
Кількість записів майже завжди має значення, а в деяких випадках це хороший інструмент для розробки коректних і компактних статистичних алгоритмів.
Видалення дублікатів MySQL distinct
Видалення дублікатів MySQL distinct
Видалення дублікатів MySQL distinct - потрібна операція. Багато вирішення завдань представлення та обробки інформації за допомогою реляційних баз
MySQL select select from: оператор вибірки
MySQL select select from: оператор вибірки
MySQL - одна з найпопулярніших систем управління базами даних (СУБД). У даній статті ми розглянемо базову функціональність оператора вибірки SELECT,