Каков наилучший способ создания mySQL и PHP-поиска?
В настоящее время я использую такие вещи, как
%срок%
Я хочу, чтобы он смог найти результат, даже если он произнес это немного неправильно, например:
Значение поля = «Один: Стоп-магазин:
Они ищут:
Одна остановка магазина
ИЛИ
Один стоп-магазин
И т. Д. Я хочу действительно умный поиск, чтобы найти информацию, даже если они не ищут точной вещи.
Каков наилучший способ построения интеллектуального поиска?
like '%term%'
ужасно медленный и неоптимизированный, вы можете захотеть добавить полный текст для этого столбца и использовать для этого булевский режим
Такие как
match(column) against('+One +Shop +Stop' in boolean mode)
Обратите внимание, что длина минимального слова равна 4, поэтому вам нужно рассмотреть возможность изменения его на три, а полнотекстовый поиск доступен только для myisam
Другие поисковые системы с открытым исходным кодом, такие как сфинкс , идеально подходят для этого
Вы не можете быть наиболее эффективными, просматривая исходные данные. Такой поиск текста зависит от того, как индексируются данные (здесь используется Google бот для Google).
Итак, шаг 1 – это индексирование. Если ваши данные находятся на некоторых веб-страницах, вы можете использовать стандартные поисковые роботы (или даже легко создать собственный искатель, я бы предложил python для создания искателя). Если ваши данные находятся в некотором файле (а не в веб-браузере), то для индексирования вам необходимо написать программу, чтобы читать все данные и индексировать их.
Шаг 2 – поиск. Поисковый подход зависит от стратегии индексирования.
Если вы ищете систему на базе php-mysql, просмотрите коды этих проектов:
Если вы хотите узнать больше, выполните поиск в архивах публикаций IEEE Xplore / ACM. Вы получите много статей, опубликованных на эту тему.
AJreal прав … просто подумал, что добавлю пример, чтобы помочь:
$query = sprintf("SELECT *, " . " MATCH(data) AGAINST('%s' IN BOOLEAN MODE) AS relevance " . " FROM table_name" . " ORDER BY relevance DESC LIMIT 20 ",
Надеюсь это поможет
Вы можете использовать функцию SOUNDEX (), она доступна как в PHP, так и в MYSQL SOUNDEX () с MYSQL