Использование функции php в столбце базы данных MySQL перед импортом данных - PullRequest
0 голосов
/ 03 мая 2020

Я работаю с mySQL и PHP уже несколько месяцев и создаю функцию поиска для своего веб-сайта. Эта функция поиска имеет фильтр и панель поиска. В настоящее время фильтр реализован с использованием функции «ГДЕ» mySQL, с помощью которой я исключаю любые строки, которые не соответствуют требованиям фильтра, чтобы избежать большой передачи данных из mySQL. Я хотел бы сделать это и для панели поиска, но хочу использовать функцию levenshtein PHP между заголовком страницы и поисковым термином.

Может ли кто-нибудь иметь представление о том, A. возможно ли это, и B. как это можно сделать? Также возможно C .: я должен даже волноваться о размере базы данных, которую я передаю от mySQL? В какой момент это вызывает серьезную задержку для пользователя?

Пример того, как я реализовал реализацию фильтра, которая автоматически генерируется в функции PHP, которая вызывается с помощью AJAX.

SELECT title, coverphoto, highteavegatag, pagename, totaltimemin, totaltimemax, preptimemin, preptimemax, date FROM recipes WHERE ((LOCATE('french',cuisine) > 0) AND (LOCATE('dutch',cuisine) > 0)) AND ((dietglnpv & 2 = 2) AND (dietGLNPV & 4 = 4)) AND ((LOCATE('sweet',pagecategory) > 0) AND (LOCATE('diner',pagecategory) > 0)) AND ((totaltimemin <= 331) AND (totaltimemax >= 85)) AND ((preptimemin <= 45) AND (preptimemax >= 28))

И идея того, что я хотел бы добавить (я знаю, что это не сработает, но, возможно, есть способ).

SELECT (...) FROM recipes WHERE (...) AND (levenshtein(searchstr,title) < 10)

1 Ответ

0 голосов
/ 03 мая 2020

Я думаю, это быстро станет очень неэффективным. Помните, что вы, вероятно, не хотите делать levenshtein() между всем заголовком и строкой поиска, но между словами в заголовке и словами в строке поиска. Руководство PHP не совсем понятно по этому вопросу, но levenshtein() вычисляет минимальное количество односимвольных правок, а не только правок кусков символов.

Большинство обычных поисковых систем используют более сложный подход. Вы можете использовать функциональность полнотекстового поиска в MySQL или создать собственную систему. Обычно это означает поиск всех слов в столбцах для поиска и их индексацию. Эти индексы выполняются до начала любого поиска, поэтому каждый отдельный поиск не должен просматривать все тексты. Затем вы сопоставляете строку поиска с этими словами, и из них вы находите соответствующие строки.

...