Как улучшить результаты поиска по названию сайта - PullRequest
3 голосов
/ 18 июля 2011

Я разработчик / дизайнер для сайта, управляемого сообществом: http://www.thegamesdb.net

Проблема, с которой мы столкнулись, довольно проста:

Pac-Ман это игра на сайте.Человек должен иметь возможность искать «pacman» или «pac man», и должен быть показан результат «Pac-Man».В настоящее время этого не происходит.

Ниже приведен фрагмент кода поиска, но полный код можно посмотреть по адресу: http://code.google.com/p/thegamesdb/source/browse/trunk/tab_listseries.php

if ($function == 'Search')
{
  $query = "SELECT g.*, p.name FROM games as g, platforms as p WHERE GameTitle LIKE '%$string%' and g.Platform = p.id";
  if(!empty($sortBy))
  {
    $query .= " ORDER BY $sortBy, GameTitle ASC";
  }
  else
  {
    $query .= " ORDER BY GameTitle";
  }
}

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

С нетерпением ждем некоторого обсуждения,

Alex

Ответы [ 2 ]

1 голос
/ 19 июля 2011

MySQL имеет функцию сравнения строк, которая называется SOUNDS LIKE. Это может быть хорошим вариантом использования для этого.

http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#operator_sounds-like

Вы, вероятно, изменили бы так:

SELECT * FROM blah WHERE SOUNDEX(column) LIKE CONCAT('%', SOUNDEX($search_string), '%')
0 голосов
/ 18 июля 2011

в конечном итоге вам нужно будет решить, как провести нечеткое совпадение.

для вашего примера - вы можете рассмотреть возможность удаления всех пробелов и любого символа '-' - затем выполнить like '%$string%' match. Вы также можете рассмотреть UPPER по обе стороны от этого LIKE.

вы можете сделать более или менее по-своему определение нечеткости.

...