• elastic search-php 多关键词查询实践(名称,日期,省份)


       // 查询文档 (分页,排序,权重,过滤)
        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];
        }
    

      

    你不能把坏习惯扔出窗外 但你可以一步步赶下电梯
  • 相关阅读:
    用户 NT AUTHORITY\NETWORK SERVICE 登录失败解决方法
    [转]改变ASP.NET 2.0中的Membership的密码要求
    WINDOWS2003自动开关机的实现
    解决ASP.NET 的进程帐户没有访问 IIS的权限[转]
    byron的一首好诗
    推荐一个好用的日期控件
    程序员喝酒文化
    快速清除Word文档多余空行
    net2.0"服务器应用程序不可用"问题解决[转]
    GridView的第一列是ButtonField,字段名是"删除",想一点之后弹出确认框,否则返回.应该如何写?
  • 原文地址:https://www.cnblogs.com/Ychao/p/13958219.html
Copyright © 2020-2023  润新知