Пошукова машина Sphinx: основні функції, застосування

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

Що необхідно пам’ятати, так це те, що 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 для впорядкування результатів, можна зберегти порядок наступним чином:

  • Збереження порядку результатів у масиві просто зберегти властивість id для збігів).
  • Виконання IMPLODE для масиву з використанням $result = implode(“,”, $array), де $array – масив результатів користувача. Result буде зберігати рядок ідентифікаторів результатів, розділених комою. · SELECT * FROM documents WHERE id IN ($result) ORDER BY FIELD(id,$result).
  • Тут користувач повідомляє MySQL, що необхідно упорядкувати результати по полю id в порядку, зазначеному в $result.

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