Подтвердить что ты не робот

Лучший способ создать поисковую систему SMART mySQL и PHP?

Каков наилучший способ построения поиска mySQL и PHP?

В настоящее время я использую такие вещи, как

Термин%%

Я хочу, чтобы он мог найти результат, даже если он неправильно произнес его, например:

Значение поля = "Один: остановить магазин:

Они выполняют поиск:

Одна остановка магазина

ИЛИ

One Stop Shop

Etc.. Я хочу действительно умный поиск, чтобы найти информацию, даже если они не ищут точной вещи.

Каков наилучший способ создания интеллектуального поиска?

4b9b3361

Ответ 1

like '%term%' ужасно медленный и неоптимизированный, вы можете захотеть добавить полный текст для этого столбца, а использовать для этого режим boolean

Например,

match(column) against('+One +Shop +Stop' in boolean mode)

Обратите внимание, что длина минимального слова равна 4, поэтому вам нужно рассмотреть возможность изменения его на три, и полнотекстовый поиск доступен только для myisam

Другие поисковые системы с открытым исходным кодом, такие как sphinx, идеально подходят для этого.

Ответ 2

Вы не можете быть наиболее эффективными, просматривая исходные данные. Такой поиск текста зависит от того, как индексируются данные (здесь используется Google бот для Google).

Итак, шаг 1 - это индексирование. Если ваши данные находятся на некоторых веб-страницах, вы можете использовать стандартные поисковые роботы (или даже легко создать собственный искатель, я бы предложил python для создания искателя). Если ваши данные находятся в некотором файле (а не в веб-браузере), то для индексирования вам необходимо написать программу для чтения всех данных и индексации их.

Шаг 2 выполняет поиск. Поисковый подход зависит от стратегии индексирования.

Если вы ищете систему на основе php-mysql, просмотрите коды этих проектов:

http://www.phpdig.net/

http://sphinxsearch.com/

Если вы хотите узнать больше, выполните поиск в архивах публикаций IEEE Xplore/ACM. Вы получите много статей, опубликованных на эту тему.

Ответ 3

AJreal прав... просто подумал, что добавлю пример, чтобы помочь:

 $query = sprintf("SELECT *, "
                    . " MATCH(data) AGAINST('%s' IN BOOLEAN MODE) AS relevance "
                    . " FROM table_name"
                    . " ORDER BY relevance DESC LIMIT 20 ",

Надеюсь, что это поможет

Ответ 4

Вы можете использовать функцию SOUNDEX(), доступную как в PHP, так и в MYSQL SOUNDEX() с MYSQL