thinkphp大数据量elasticsearch搜索

该方法实现了一个基于Elasticsearch的检索功能,包括商品名称、店铺名、关键词、时间范围、销量、价格等多个条件的过滤。同时,对检索结果进行排序并返回,涉及数据库连接、数据处理及响应JSON数据。
摘要由CSDN通过智能技术生成

1.首先下载对应的ES包,初始化方法引入扩展,定义es地址
在这里插入图片描述
2.举例一个方法
public function ebayTotal()
{

    $where = array();
    $country = Db::connect('db_con2')->table('t_country')->order('cn_name ASC')->select();
    $this->assign('country', $country);

    if ($this->request->isAjax()) {

        $item = input('item');
        $keyword = input('searContent');

        $s_time = input('s_time');
        $e_time = input('e_time');
        $s_days7_total_sold = input('s_days7_total_sold');
        $e_days7_total_sold = input('e_days7_total_sold');
        $s_start_time = trim( input('s_start_time') );
        $e_start_time = trim( input('e_start_time') );
        $s_total_sold = input('s_total_sold');
        $e_total_sold = input('e_total_sold');
        $price_01 = (int)input('s_price');
        $price_02 = (int)input('e_price');
        $s_price = sprintf("%.2f", $price_01);
        $e_price = sprintf("%.2f", $price_02);
        $categroy_one = input('categroy_one');
        $categroy_two = input('categroy_two');
        $categroy_three = input('categroy_three');
        $store_name = input('store_name');
        $site = input('site');


        $field = input('field');
        $order = input('order');
        if( !empty($field) && !empty($order) )
        {
            $searchParams['body']['sort'] = array(
                $field=>array(
                    'order'=> $order
                ),
            );
        }else{
            $searchParams['body']['sort'] = array(
                'startTime'=>array(
                    'order'=> 'desc'
                ),
            );
        }

        $searchParams['index'] = 'ebayhistory';
        $searchParams['type'] = 'ebayhistory';
        $page =intval(input('get.page'));
        $limit = intval(input('get.limit'));

        $searchParams['from'] = ($page-1)*$limit;
        $searchParams['size'] = $limit;



        if ( !empty($keyword) )
        {
            $searchParams['body']['query']['bool']['must'][]['match']['productName'] =  $keyword ;

        }

        if ( !empty($store_name) )
        {
            $searchParams['body']['query']['bool']['must'][]['match']['storeName'] =  $store_name;
        }

        if ( !empty($item) )
        {
            $searchParams['body']['query']['bool']['must'][]['match']['item'] =  $item ;
        }

        if ( !empty($s_days7_total_sold)  )
        {
            $searchParams['body']['query'][]['range']= array(
                'days7TotalSold.keyword' => array(
                    'gte' => $s_days7_total_sold,
                )
            );
        }
        if ( !empty($e_days7_total_sold) )
        {
            $searchParams['body']['query'][]['range']= array(
                'days7TotalSold.keyword' => array(
                    'lte' => $e_days7_total_sold
                )
            );
        }
        if ( !empty($s_days7_total_sold) && !empty($e_days7_total_sold) )
        {
            $searchParams['body']['query'][]['range']= array(
                'days7TotalSold.keyword' => array(
                    'gte' => $s_days7_total_sold,
                    'lte' => $e_days7_total_sold
                )
            );
        }

        if ( !empty($s_start_time) )
        {
            $sstr = strtotime($s_start_time);
            $sTime =str_pad($sstr,13,"0");
            $searchParams['body']['query']['bool']['must'][]['range']= array(
                'startTime' => array(
                    'gte' => $sTime,
                )
            );
        }
        if ( !empty($e_start_time) )
        {
            $estr = strtotime($e_start_time);
            $eTime =str_pad($estr,13,"0");
            $searchParams['body']['query']['bool']['must'][]['range']= array(
                'startTime' => array(
                    'lte' => $eTime
                )
            );
        }

        if ( !empty($s_start_time) && !empty($e_start_time) )
        {
            $searchParams['body']['query']['bool']['must'][]['range']= array(
                'startTime' => array(
                    'gte' => $sTime,
                    'lte' => $eTime
                )
            );
        }
        if ( !empty($s_total_sold))
        {
            $searchParams['body']['query']['bool']['must'][]['range'] = array(
                'totalSold' => array(
                    'gte' => $s_total_sold,
                )
            );
        }
        if ( !empty($e_total_sold) )
        {
            $searchParams['body']['query']['bool']['must'][]['range'] = array(
                'totalSold' => array(
                    'lte' => $e_total_sold
                )
            );
        }
        if ( !empty($s_total_sold) && !empty($e_total_sold) )
        {
            $searchParams['body']['query']['bool']['must'][]['range'] = array(
                'totalSold' => array(
                    'gte' => $s_total_sold,
                    'lte' => $e_total_sold
                )
            );
        }
        if ( !empty($price_01) )
        {
            $searchParams['body']['query']['bool']['must'][]['range'] = array(
                'price' => array(
                    'gte' => $s_price,
                )
            );
        }
        if ( !empty($price_02) )
        {
            $searchParams['body']['query']['bool']['must'][]['range'] = array(
                'price' => array(
                    'lte' => $e_price
                )
            );
        }
        if ( !empty($price_01) && !empty($price_02) )
        {
            $searchParams['body']['query']['bool']['must'][]['range'] = array(
                'price' => array(
                    'gte' => $s_price,
                    'lte' => $e_price
                )
            );
        }
        if ( !empty($s_time) )
        {
            $sstrcreateTime = strtotime($s_time);
            $screateTime =str_pad($sstrcreateTime,13,"0");
            $searchParams['body']['query']['bool']['must'][]['range'] = array(
                'createTime' => array(
                    'gte' => $screateTime
                )
            );
        }
        if ( !empty($e_time) )
        {
            $estrcreateTime = strtotime($e_time);
            $ecreateTime =str_pad($estrcreateTime,13,"0");
            $searchParams['body']['query']['bool']['must'][]['range'] = array(
                'createTime' => array(
                    'lte' => $ecreateTime
                )
            );
        }
        if ( !empty($s_time) && !empty($e_time) )
        {
            $searchParams['body']['query']['bool']['must'][]['range'] = array(
                'createTime' => array(
                    'gte' => $screateTime,
                    'lte' => $estrcreateTime
                )
            );
        }
        $categroy_ids='';
        if ( !empty($categroy_three) )
        {
            $categroy_ids  = $categroy_three;
        }
        else
        {

            if ( !empty($categroy_one) )
            {
                $categroy_ids='';
                $map['firstcategroy'] = $categroy_one;
                $map['site'] = $site;
                $categroy_id = Db::connect('db_con2')->table('ebay_classify')
                    ->field('categroy_id')
                    ->where($map)->select();

                foreach ($categroy_id as $val){
                    $categroy_ids.=$val['categroy_id']." ";
                }
            }

            if ( !empty($categroy_two) )
            {
                $categroy_ids='';
                $map['secondcategroy'] = $categroy_two;
                $map['site'] = $site;
                $categroy_id = Db::connect('db_con2')->table('ebay_classify')
                    ->field('categroy_id')
                    ->where($map)->select();

                foreach ($categroy_id as $val){
                    $categroy_ids.=$val['categroy_id']." ";
                }
            }
        }
        if(!empty($categroy_one)||!empty($categroy_two)||!empty($categroy_three)){
            $searchParams['body']['query']['bool']['must'][]['match']['categroyId'] =  $categroy_ids ;
        }


        if ( !empty($site) )
        {
            $searchParams['body']['query']['bool']['must'][]['match']['site'] =  $site ;
        }

        $retDoc = $this->client->search($searchParams);

        $count= $retDoc['hits']['total'];
        $list = $retDoc['hits']['hits'];

        $res = array();
        $data = array();

        foreach ($list as $key => $val) {
            $res[$key]['item'] = $val['_source']['item'];
            $res[$key]['img_url'] = $val['_source']['imgUrl'];
            $res[$key]['category_name'] = $this->get_cat_ebay($val['_source']['categroyId'],$val['_source']['site']);
            $res[$key]['category_name_01'] = $this->get_cat_ebay_01($val['_source']['categroyId'],$val['_source']['site']);
            $res[$key]['category_name_02'] = $this->get_cat_ebay_02($val['_source']['categroyId'],$val['_source']['site']);
            $res[$key]['product_name'] = $val['_source']['productName'];
            $res[$key]['price'] = $val['_source']['price'];
            $res[$key]['days7_total_sold'] = $val['_source']['days7TotalSold'];
            $res[$key]['totalSold'] = $val['_source']['totalSold'];
            $res[$key]['startTime'] = $val['_source']['startTime'];
            $res[$key]['product_url'] = $val['_source']['productUrl'];
            $res[$key]['store_url'] = $val['_source']['storeUrl'];
            $res[$key]['currency'] = $val['_source']['currency'];
            $res[$key]['shippingsummary'] = $val['_source']['shippingSummary'];
            $res[$key]['createTime'] = $val['_source']['createTime'];
            $res[$key]['store_name'] = $val['_source']['storeName'];

            $bool=$this->pipei_shopname($val['_source']['storeName']);
            if(!empty($bool)){
                $res[$key]['is_jk_new']=$bool['is_new'];
                $res[$key]['is_jk_all']=$bool['is_all'];
            }
            $res[$key]['site'] = $this->get_country( $val['_source']['site']);
            $res[$key]['sitenum'] = $val['_source']['site'];
        }
        $data['code'] = 0;
        $data['msg'] = '';
        $data['count'] = $count;
        $data['data'] = $res;
        $data['searchParams'] = $searchParams;
        return json($data);

    }

    return $this->fetch('ebaytotal');
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值