Как сделать точный поиск по ключевым словам появиться первым? - PullRequest
1 голос
/ 29 мая 2011

Я создал поисковую систему mysql / php, в которой я добавил URL-адрес Google с ключевыми словами поисковой системы Google и еще один URL-адрес Yahoo с ключевыми словами поисковой системы Yahoo. Если я введу поисковую систему Google в поле поиска, как мне сначала отобразить URL-адрес Google?

Это код:

//connect to database
  mysql_connect("","","");
  mysql_select_db("");

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

   foreach($search_exploded as $search_each)
   {

        //construct query
    $x++;
    if ($x==1)
     $construct .= "Keywords LIKE '%$search_each%'";
    else
     $construct .= " OR Keywords LIKE '%$search_each%'";

   }

  //echo outconstruct
  $constructx = "SELECT * FROM searchengine WHERE $construct";

  $construct = "SELECT * FROM searchengine WHERE $construct LIMIT $s,$e";
  $run = mysql_query($constructx);

  $foundnum = mysql_num_rows($run);


  $run_two = mysql_query("$construct");

  if ($foundnum==0)
   echo "No results found for <b>$search</b>";
  else

Ответы [ 2 ]

2 голосов
/ 29 мая 2011

Лучше всего здесь не использовать LIKE, а использовать индексы FULLTEXT Mysql.Для этого вы создаете индекс FULLTEXT для столбцов, в которых вы хотите искать.

ALTER TABLE searchengine ADD FULLTEXT (ключевые слова);

Чтобы сделать запрос, сделайте что-то вроде этого:

SELECT * FROM искомый двигатель WHERE MATCH (ключевые слова) ПРОТИВ ("$ searchterm");

Вы можете комбинировать разные MATCH AGAINSTзапросы для удовлетворения всех ключевых слов.Кроме того, вы можете указать бит MATCH AGAINST в предложении SELECT вашего запроса.Это вернет счет, который вы затем сможете использовать для ранжирования ваших результатов.

Кроме того, вы также можете проделать некоторую работу по прохождению даже перед выполнением запроса.Используя баллы, сгенерированные различными операторами MATCH, вы можете ранжировать все слово выше, чем слово с основанием.

0 голосов
/ 29 мая 2011
  1. Чтобы узнать количество записей, вы можете использовать SELECT count(*) вместо mysql_num_rows с полным запросом.
  2. Чтобы отсортировать результаты, вам нужно использовать «ORDER BY» в запросе и поле, которое будет критерием упорядочения.В вашем случае вы можете написать
    $construct = "SELECT * FROM searchengine WHERE $construct ORDER BY Keywords LIMIT $s,$e ";

И не забудьте санировать свой поиск в $.
$search = mysql_real_escape_string($search);

...