【PHP框架应用-Yii2】elasticsearch, mysql查询语句记录

查询数据量大,导致接口返回慢,这是我近期优化的重点。

日志不完善,排错速率很慢,因此增加了日志输出。

mysql 查询语句输出

function get_sql_query($queryBuilder)
{
    $sql = $queryBuilder->createCommand()->getRawSql();

    // 如果是控制台应用
    if (strstr(Yii::$app->id, "console")) {
        return $sql;
    }

    // 否则输出接口
    return print_r(array("api" => sprintf("%s %s", request()->getMethod(), request()->getUrl()),"sql" => $sql), true);
}

elastic 查询语句输出

这个查询语句封装的代码,是从yii框架中扒出来的,对返回内容进行了一些整合

function get_es_query(\yii\elasticsearch\Query $queryBuilder)
{
    $cmd = $queryBuilder->createCommand();
    $query = $cmd->queryParts;
    if (empty($query)) {
        $query = '{}';
    }
    if (is_array($query)) {
        $query = \yii\helpers\Json::encode($query);
    }
    $url = [$cmd->index !== null ? $cmd->index : '_all'];
    if ($cmd->type !== null) {
        $url[] = $cmd->type;
    }
    $url[] = '_search';

    $createUrl = function ($path, $options = []) {
        if (!is_string($path)) {
            $url = implode('/', array_map(function ($a) {
                return urlencode(is_array($a) ? implode(',', $a) : $a);
            }, $path));
            if (!empty($options)) {
                $url .= '?' . http_build_query($options);
            }
        } else {
            $url = $path;
            if (!empty($options)) {
                $url .= (strpos($url, '?') === false ? '?' : '&') . http_build_query($options);
            }
        }
        return urldecode($url);
    };

    // 如果是控制台应用
    if (strstr(Yii::$app->id, "console")) {
        return print_r(["url" => sprintf("%s %s", "GET", $createUrl($url, $cmd->options)), "query" => $query], true);
    }
    // 否则输出接口
    return print_r(["api" => sprintf("%s %s", request()->getMethod(), request()->url), "url" => sprintf("%s %s", "GET", $createUrl($url, $cmd->options)), "query" => $query ], true);
}

你可能感兴趣的:(【PHP框架应用-Yii2】elasticsearch, mysql查询语句记录)