Расширенный поиск в Учении 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.

Другие вопросы по тегам