Поиск релевантности с помощью PHP и Mysql - PullRequest
0 голосов
/ 10 августа 2011

Какой лучший способ сделать это?

У меня есть столбцы: имя дорожки, имя исполнителя, имя альбома

Я хочу, чтобы все столбцы сопоставлялись с поисковым запросом. и некоторая гибкость при сопоставлении.

mysql like слишком строг, даже с% XXX%. Соответствует строке целиком, а не частям.

Ответы [ 2 ]

2 голосов
/ 10 августа 2011

Ваш запрос MySQL может иметь несколько предложений OR, ищущих каждое слово, разделенное пробелом, введенное пользователем. Например, пользовательский поиск для «Королев Камня» может быть представлен в SQL как SELECT * FROM songs WHERE artist_name LIKE "%Queens%" OR artist_name LIKE "Stoneage".

Однако это может быть нежелательно, поскольку LIKE поиск, начинающийся с %, неэффективен и может быть очень медленным в большой базе данных.

Хотя я не могу говорить о влиянии на производительность, вам следует взглянуть на полнотекстовый поиск на естественном языке . Возможно, это наиболее эффективное решение, которое вы найдете:

SELECT * FROM songs WHERE MATCH(track_name, artist_name, album_name) AGAINST('Queens of the Stoneage' IN NATURAL LANGUAGE MODE);

Некоторые функции PHP существуют для определения сходства строк текста, но хранение этой работы в базе данных, вероятно, будет наиболее эффективным (и менее расстраивающим):

0 голосов
/ 10 августа 2011

Я думаю, вам нужно переосмыслить ваше приложение. Из вашего комментария я понял, что вам необходимо реализовать в вашей программе некоторый логический оператор, такой как «и», «или» и «нет». Речь идет не только о причудливом алгоритме, таком как полнотекстовый индекс, или самой длинной общей подстроке, такой как запрос на совпадение mysql. Но я могу ошибаться.

...