Лучший способ создать ИНТЕЛЛЕКТУАЛЬНУЮ поисковую систему MySQL и PHP?


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

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

%термин%

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

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

Они ищут:

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

ИЛИ

Магазин с одним окном

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

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

Author: Mat, 2011-01-10

4 answers

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

Такие как

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

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

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

 6
Author: ajreal, 2013-03-01 18:09:57

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

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

Шаг 2 - это поиск. Подход к поиску зависит от стратегии индексирования.

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

Http://www.phpdig.net/

Http://sphinxsearch.com/

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

 5
Author: Sarwar Erfan, 2011-01-10 04:21:03

АДЖреал прав...просто подумал, что я хотел бы добавить пример, чтобы помочь:

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

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

 5
Author: timpng1, 2013-09-24 18:00:59

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

 2
Author: Richard, 2013-03-01 10:59:43