// 查询文档 (分页,排序,权重,过滤) public function search_doc($keywords = "",$year='', $province_arr=[], $from = 0, $size = 10, $order = ['id' => ['order' => 'asc']]) { $must_arr = []; $filter_arr = []; $keys = ''; if ($keywords) { /*获取单词的分词情况*/ $analyzer = $this->client->indices()->analyze( [ 'index' => $this->index, 'body' => [ 'text' => $keywords, 'analyzer' => 'ik_max_word' ] ] ); if ($analyzer) { $tokens = $analyzer['tokens']; $keys = array_column($tokens, 'token', NULL); $keys_OR = implode('AND', $keys); $must_arr['query_string'] = ['default_field' => 'name', 'query' => $keys_OR]; } } if($year){ $filter_arr[]['range'] = ['create_date' => ['gte'=>$year."-01-01",'lte'=>$year."-12-31"]]; } if(count($province_arr) > 0){ $filter_arr[]['terms'] = ['province.keyword' => $province_arr]; } if ($keywords || $year || count($province_arr) > 0) { /*----------------------------------------------------------*/ /*----------------------------------------------------------*/ $params = [ 'index' => $this->index, // 'type' => $this->type, 'body' => [ 'query' => [ // 'match' => // [ // 'name'=>$keywords // ] 'bool' => [ // 'filter'=>[ 'must' =>$must_arr, 'filter'=>$filter_arr, // ], ] ], 'sort' => [$order], 'from' => $from, 'size' => $size ] ]; /*echo "<pre>"; print_r(json_encode($params['body']['query'])); exit();*/ /*----------------------------------------------------------*/ } // ------------------------------------------------------------------------ else { $params = [ 'index' => $this->index, 'body' => [ 'sort' => [$order] , 'from' => $from, 'size' => $size ] ]; } try { $re = $this->client->search($params); } catch (\Exception $e) { echo '<pre>'; print_r($e->getMessage()); exit(); } return ['re' => $re, 'keys' => $keys]; }