zoukankan      html  css  js  c++  java
  • 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];
        }
    

      

    你不能把坏习惯扔出窗外 但你可以一步步赶下电梯
  • 相关阅读:
    一些tcp通讯代码
    使用资源监控工具 glances
    命令行方式运行yii2程序
    php获取apk信息
    Yii2简单纪要
    LuCI探究(转)
    proguard混淆jar文件
    hibernate-search-5.1.1简易使用
    数据库应用-java+sqlserver(六)MyFrame
    数据库应用-java+sqlserver(五)ModifyPassword
  • 原文地址:https://www.cnblogs.com/Ychao/p/13958219.html
Copyright © 2011-2022 走看看