Поиск Cakephp MySQL

Какая реализация основанного на тексте поиска приложения Cakephp, которое использует базу данных MySQL, является "лучшей"?

7
задан Moe Far 3 July 2015 в 11:21
поделиться

3 ответа

[

]Сфинкс - одна из самых мощных текстовых SQL-поисковых систем - []http://sphinxsearch.com/[][

] [

]В хлебопекарне написано Поведение CakePHP: []http://bakery.cakephp.org/articles/view/sphinx-behavior[][

] [

]Следует отметить, что Sphinx имеет несколько компонентов и некоторые из них должны запускаться как демоны на вашей машине (подобно тому, как запускаются apache или mysql процессы). Также вам нужно "индексировать" вашу базу данных так часто, чтобы результаты были свежими. Поначалу настройка может быть пугающей, но определенно стоит усилий, если у вас есть много записей и большие куски текста для поиска.[

].
1
ответ дан 7 December 2019 в 05:23
поделиться

Я всегда стремился сделать "Поиск" модели, "SearchesController" и представлений, а затем написать свой собственный пользовательский сценарий для поиска в моей базе данных, используя,

$this->Search->query("SELECT * FROM table WHERE condition 1 AND condition 2");

Я не знаю ни одного "лучшего" поиска, но там вполне могут быть компоненты и плагины, которые сделают что-то подобное для вас. Лучше всего проверить пекарню http://bakery.cakephp.org/

0
ответ дан 7 December 2019 в 05:23
поделиться

Как я реализовал Поиск сообщений:

Код формы поиска:

<?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; ?> 

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

7
ответ дан 7 December 2019 в 05:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: