Какая реализация основанного на тексте поиска приложения Cakephp, которое использует базу данных MySQL, является "лучшей"?
]Сфинкс - одна из самых мощных текстовых SQL-поисковых систем - []http://sphinxsearch.com/[][
] []В хлебопекарне написано Поведение CakePHP: []http://bakery.cakephp.org/articles/view/sphinx-behavior[][
] []Следует отметить, что Sphinx имеет несколько компонентов и некоторые из них должны запускаться как демоны на вашей машине (подобно тому, как запускаются apache или mysql процессы). Также вам нужно "индексировать" вашу базу данных так часто, чтобы результаты были свежими. Поначалу настройка может быть пугающей, но определенно стоит усилий, если у вас есть много записей и большие куски текста для поиска.[
].Я всегда стремился сделать "Поиск" модели, "SearchesController" и представлений, а затем написать свой собственный пользовательский сценарий для поиска в моей базе данных, используя,
$this->Search->query("SELECT * FROM table WHERE condition 1 AND condition 2");
Я не знаю ни одного "лучшего" поиска, но там вполне могут быть компоненты и плагины, которые сделают что-то подобное для вас. Лучше всего проверить пекарню http://bakery.cakephp.org/
Как я реализовал Поиск сообщений:
Код формы поиска:
<?php
echo $form->create('Deal',array('action' => 'search'));
echo $form->input('Deal.search');
echo $form->end('Search');
?>
В Контроллере поместите следующую функцию поиска:
function search()
{
if (!empty($this->data)) {
$searchstr = $this->data['Post']['search'];
$this->set('searchstring', $this->data['Post']['search']);
$conditions = array(
'conditions' => array(
'or' => array(
"Post.title LIKE" => "%$searchstr%",
"Post.description LIKE" => "%$searchstr%"
)
)
);
$this->set('posts', $this->Post->find('all', $conditions));
}
}
Код представления:
<?php foreach ($posts as $post): ?>
<tr>
<td><?php echo $post['Post']['id']; ?></td>
<td>
<?php echo
$html->link($post['Post']['title'],'/posts/view/'.$post['Post']['id']);?>
</td>
<td><?php echo $post['Post']['created']; ?></td>
</tr>
<?php endforeach; ?>
Может быть, не самый лучший / элегантный, но хорошо работает для простых запросов.