Расширенный поиск в Учении 1
Я использую LIKE запрос в DOCTRINE1 для поиска ключевых слов в БД. Вот пример: у меня есть строка, доступная в БД "Разработчик в аду"
$str = "Developer in the hell";
$srchKey = "%" . mysql_real_escape_string($searchString) . "%";
$q = Doctrine_Query::create()->from("Movie as m")
->where('m.name LIKE '."'$srchKey'". ' or m.keywords LIKE'."'$srchKey'")
->fetchArray();
Проблема в том, что если я ищу "Разработчик", он возвращает мне результат, но если я ищу "Разработчик ад", это ничего не возвращает мне. Потому что середина слова из строки пропущены.
Существуют ли какие-либо подстановочные знаки / дополнительные параметры / условия, которые DOCTRINE предоставляют для обработки такого случая.
1 ответ
Прежде всего, вы делаете это неправильно при построении запроса.
Экранирующий параметр Doctrine, который вы передаете запросу, поэтому вам не нужно использовать mysql_real_escape_string
самостоятельно.
$str = "Developer in the hell";
$srchKey = "%" . $str . "%";
$q = Doctrine_Query::create()
->from("Movie as m")
->where('m.name LIKE ? or m.keywords LIKE ?', array($srchKey, $srchKey))
->fetchArray();
Что касается вашей поисковой системы, вы должны взглянуть на поведение поиска. Это будет более мощным, чем простой LIKE
запрос. Но я не знаю, будет ли он выполнять поиск по нескольким терминам так, как вы хотите.
Или вы можете попробовать Lucene. Учебник доступен как часть учебников Jobeet.