Search.php 1.8 KB
<?php

namespace Product;

use Configs\CacheConfig;
use LibModels\Wap\Product\SearchData;
use Plugin\DataProcess\ListProcess;

/**
 * 搜索相关的模板数据模型
 * 
 * @name Search
 * @package Product
 * @copyright yoho.inc
 * @version 1.0 (2015-11-1 14:35:52)
 */
class SearchModel
{

    /**
     * 获取搜索的数据
     * 
     * @param array $condition 查询条件
     * @return array
     */
    public static function getSearchData($condition)
    {
        $result = array();

        if (USE_CACHE) {
            $key = CacheConfig::KEY_ACTION_INDEX_SEARCH;
            if (!empty($condition)) {
                $key .= http_build_query($condition, null, '&');
            }
            // 先尝试获取一级缓存(master), 有数据则直接返回.
            $result = Cache::get($key, 'master');
            if (!empty($result)) {
                return $result;
            }
        }

        // 调用接口查询数据 (使用新的 Elastic Engine)
        $listData = SearchData::searchElasticByCondition($condition); 
        // 调用接口查询数据 (使用老的 Sphinx Engine)
        // $listData = SearchData::searchByCondition($condition);
        // 处理返回的数据
        if (isset($listData['code']) && $listData['code'] === 200) {
            $result = ListProcess::getListData($listData['data'], false);
        }

        if (USE_CACHE) {
            // 接口调用异常时, 不害怕,从我们的二级缓存(slave)里再取数据.
            if (empty($result)) {
                $result = Cache::get($key, 'slave');
            }
            // 接口调用正常,数据封装完成, 则设置一级(master)和二级(slave)数据缓存
            else {
                Cache::set($key, $result, 600); // 缓存10分钟
            }
        }

        return $result;
    }

}