在客户端服务器上部署后,Yii2 sphinx查询无效

时间:2017-09-11 20:30:22

标签: php yii2 sphinx yii2-advanced-app

我在我的服务器上使用 Yii2-advanced sphinx 并且工作正常,但在客户端服务器上部署网站后,当我尝试获取查询结果时出现Exception 。两台服务器都有php5.6版本。

Sphinx配置:

Link

PHP代码:

source investmo_index
{
    type = mysql
    sql_host = localhost
    sql_user = user
    sql_pass = password
    sql_db = database
    sql_port = 9306

    sql_query_pre = SET NAMES utf8
    sql_query_pre = SET CHARACTER SET utf8

    sql_query = \
        SELECT \
            id, \
            title, \
            slug, \
            header, \
            content ,\
            created_at \
        FROM page \
        WHERE is_active='1';

    sql_field_string = title    
    sql_field_string = slug
    sql_field_string = header 
    sql_field_string = content
    sql_attr_timestamp = created_at

    sql_ranged_throttle = 0
}


index investmo_index
{
    source = investmo_index
    path = /var/www/sphinx/investmo_index
    docinfo = extern
    mlock = 0
    morphology = stem_enru
    min_word_len = 1
    html_strip = 1
    index_exact_words = 1
    charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
    min_infix_len = 1
}

searchd
{
    listen = 127.0.0.1:9312
    listen = 9306:mysql41
    log = /var/log/sphinx/searchd.log
    query_log = /var/log/sphinx/query.log
    read_timeout = 5
    max_children = 30
    pid_file = /var/run/sphinx/searchd.pid
    max_matches = 1000
    seamless_rotate = 1
    preopen_indexes = 1
    unlink_old = 1
    workers = threads # for RT to work
    binlog_path = /var/lib/sphinx
}
  

$ command-> sql在两台服务器上都能正常运行

namespace frontend\controllers;

use Yii;
use yii\sphinx\Query;
use yii\data\ActiveDataProvider;
use common\models\Page;

class SearchController extends \yii\web\Controller
{
    public function actionIndex()
    {
        $searchPhrase = Yii::$app->request->get('search');
        $order = Yii::$app->request->post('order', false);

        $provider = false;
        $answers = false;
        $count = false;

        if (!empty($searchPhrase)) {
            $query = new Query;
            $query = $query
                ->select([
                    '*',
                    'SNIPPET(title, \''.$searchPhrase.'\', \'before_match=<mark>\', \'after_match=</mark>\') AS _title',
                    'SNIPPET(header, \''.$searchPhrase.'\', \'before_match=<mark>\', \'after_match=</mark>\') AS _header',
                    'SNIPPET(content, \''.$searchPhrase.'\', \'before_match=<mark>\', \'after_match=</mark>\') AS _content'
                ])
                ->from('investmo_index')
                ->match($searchPhrase)
                ->snippetOptions(['before_match' => '<mark>', 'after_match' => '</mark>']);


            if ($order == 'date') {
                $query = $query->orderBy(['created_at' => SORT_DESC]);
            } else if ($order == 'title') {
                $query = $query->orderBy(['title' => SORT_ASC]);
            }

            // HERE I GET AN ERROR
            $command = $query->createCommand();
            // var_dump($command->sql);
            var_dump($command->queryAll());
            exit;

            $provider = new ActiveDataProvider([
                'query' => $query,
                'pagination' => [
                    'pageSize' => 10,
                    'route' => '/search/search/',
                ]
            ]);

            $count = $query->count();
            $answers = $provider->getModels();
        }

        return $this->render('index', [
            'phrase' => $searchPhrase,
            'answers' => $answers,
            'provider' => $provider,
            'count' => $count,
        ]);
    }
  

$ command-&gt; queryAll()在我的服务器上正常工作,但在客户端服务器上它会抛出数据库异常

'SELECT *, SNIPPET(title, 'test', 'before_match=<mark>', 'after_match=</mark>') AS _title, SNIPPET(header, 'test', 'before_match=<mark>', 'after_match=</mark>') AS _header, SNIPPET(content, 'test', 'before_match=<mark>', 'after_match=</mark>') AS _content FROM `investmo_index` WHERE MATCH(:qp0)'

有什么不对?

问题解决了。感谢@barryhunter,就像他说问题是 sphinx版本

0 个答案:

没有答案
相关问题