Php / MySQL поисковая система - PullRequest
0 голосов
/ 09 июня 2011

Как мне точно найти или сопоставить ключевые слова в таблице с помощью поисковой системы php / mysql.

Например: я добавил URL с ключевыми словами: UFC 131 онлайн и 2-й URL с ключевыми словами: UFC 132 онлайн

, и если я введу UFC 132 в поле поиска, как мне сделать 2-йURL, чтобы прийти первым?

Потому что, если я использую этот код

        //explode out search term
 $search_exploded = explode(" ",$search);

 foreach($search_exploded as $search_each)
 {

     //construct query
$x++;
if ($x==1)
 $construct .= "title LIKE '%$search_each%'";
else
 $construct .= " or title = '$search'";

и я ищу UFC 132 в Интернете, это сначала дает мне UFC 131 онлайн-результат.

Ответы [ 4 ]

2 голосов
/ 09 июня 2011

Вы можете реализовать что-то вроде этого:

SELECT *, MATCH (title) AGAINST ('searchstring' IN BOOLEAN MODE) + 
CASE 
WHEN title = 'searchstring' THEN 10 
ELSE 0
END AS relevance FROM `wrestlingsucks`
HAVING relevance > 1.0
ORDER BY relevance DESC LIMIT 100

Это очень простой пример, все, что он сделает, это добавит 10 к столбцу релевантности sudo, если он точно совпадает. Однако вы можете получить все, что захотите, с полным текстом и естественным соответствием.

1 голос
/ 09 июня 2011

MySQL обладает превосходными возможностями поиска для полнотекстового поиска, чем ручная обработка ваших запросов.Взгляните на полнотекстовый поиск

0 голосов
/ 10 июня 2011

Используйте алгоритм Левенштейна в MySQL.

Сопоставление Левенштейна - это метрика для измерения величины разности между двумя последовательностями, здесь это строки.По умолчанию MySQL не имеет этой функции, но вы можете написать и добавить ее.

Пожалуйста, посмотрите здесь код и добавьте этот код как системную функцию в MySQL, см. Пример нижео том, как получить сходство двух строк.

Пожалуйста, смотрите: https://github.com/rakesh-sankar/Tools/blob/master/MySQL/Levenshtein.txt

Пример: SELECT column1, LEVENSHTEIN (column1, 'matchme') КАК perfectmatch FROM sometable ORDER BYperfectmatch DESC

0 голосов
/ 09 июня 2011

Из документации MATCH (col1, col2, ...) ПРОТИВ (expr [search_modifier])

...