Сортировка по релевантности в базовой поисковой системе mysql

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

Я связал таблицу с моей поисковой системой, и у меня возникла проблема. код, который я использовал, не сортируется по релевантности. под этим я подразумеваю, что если пользователь введет «Apple» в поисковую систему, он вернет довольно случайные результаты. если я наберу «купить ipad», вместо Apple Store появится ipad. я хочу, чтобы запрос сканировал все поля, чтобы увидеть, сколько раз каждый пользовательский ввод находится в поле, а затем ранжировать по наиболее релевантным. * если происходит столкновение, побеждает более высокий идентификатор ... в основном.

Кстати, если бы я ввел iphone или ipad, результаты были бы правильными. У меня есть два разных запроса для отдельных и вместе терминов, и я хотел бы также знать, как смешивать их вместе, чтобы получить 1 запрос.

   Terms together:
   $query = " SELECT * FROM scan WHERE ";
   $terms = array_map('mysql_real_escape_string', $terms);
   $i = 0;
   foreach ($terms as $each) {
   if ($i++ !== 0) {
   $query .= "AND";   
   }
   $query.= "Match(title, description, keywords, link) Against ('".implode(' ', $terms )." in boolean mode);


     }


       Terms Seperate
       $query = " SELECT * FROM scan WHERE ";
   $terms = array_map('mysql_real_escape_string', $terms);
   $i = 0;
   foreach ($terms as $each) {
   if ($i++ !== 0) {
   $query .= "or";
   }
   $query.= "Match(title, description, keywords, link) Against ('".implode(' ', $terms )." in boolean mode);


    }

person Reseed Grey    schedule 01.10.2012    source источник
comment
определить «релевантность»? ссылки на ключевые слова? количество ключевых слов?   -  person JvdBerg    schedule 01.10.2012


Ответы (1)


Вам нужно использовать псевдоним для оператора MATCH.

Select *, MATCH(tags) AGAINST ('search query' IN BOOLEAN MODE) as relevance
from scan HAVING relevance >0 ORDERY BY relevance DESC
person Darwayne    schedule 13.10.2012