elasticsearch使用中文分詞器


1、首先我們要把對應的分詞器的版本下載下來,網址是:https://github.com/medcl/elasticsearch-analysis-ik/releases

2、將下載下來的壓縮包解壓,然后將文件復制到 es的安裝目錄/plugin/ik下面即可,沒有的目錄直接手動創建就行,完成之后效果如下

 

 3、接下來,重新啟動es就可以了

4、應用 - 創建索引

public function create_index(){
        //創建es實例
        $es = ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();
        $params = [
            'index' => '索引名稱',//類似於庫名
            'body' => [
                'settings' => [
                    'number_of_shards' => 3,
                    'number_of_replicas' => 2
                ],
                'mappings' => [
                    '_source' => [
                        'enabled' => true
                    ],
                    'properties' => [
               //之后可以進行搜索的字段
'字段名稱' => [ 'type' => 'text', "analyzer" => "ik_max_word", "search_analyzer" => "ik_max_word" ] ] ] ] ]; //執行創建 $r = $es->indices()->create($params); dump($r); }

 

5、可以給索引中填充一些數據

public function add_goods_data(){
        $data = GoodsModel::select();
        $arr = (new Collection($data))->toArray();
        $es = ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();
        foreach ($arr as $k=>$v){
            $params = [
                'index'=>'goodslists_index',//
                'type'=>'_doc',//表(額外需要注意的,這里是固定的寫法)
                'id'=>$v['id'],//主鍵
                'body'=>$v//數據
            ];
            $r = $es->index($params);
        }
        echo 'success';
    }

 

 

6、應用 - 搜索

public function search_test(){
        $word = input('word');//接收關鍵字
        $page = input('page',1);//接收當前頁(如果沒接收到,默認是1)
        $size = 5;//每頁顯示條數
        $limit = ($page-1)*$size;//偏移量
        $client = ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();//創建es實例
        //設置查詢的條件
        $params = [
            'index' => 'goodslists_index',//索引(類似於庫)
            //'type' => '_doc',
            'body' => [
                //查詢內容
                'query' => [
                    'match' => [//匹配
                        'goods_name' => $word//匹配字段
                    ]
                ],
                'highlight' => [//高亮
                    'pre_tags' => ["<em style='color: red'>"],//樣式自己寫
                    'post_tags' => ["</em>"],
                    'fields' => [
                        "goods_name" => new \stdClass()
                    ]
                ]
            ]
        ];
        //分頁限制
        $params["size"] = $size;//每頁顯示條數
        $params["from"] = $limit;//偏移量
        $results = $client->search($params);//es搜索
        foreach ($results['hits']['hits'] as $k=>$v){
            $results['hits']['hits'][$k]['_source']['goods_name'] = $v['highlight']['goods_name'][0];
        }

        $data = array_column($results['hits']['hits'],'_source');

        $arr['data'] = $data;//數據
        $arr['page'] = $page;//當前頁
        $arr['total'] = $results['hits']['total']['value'];//總條數
        $arr['last_page'] = ceil($results['hits']['total']['value']/$size);//總頁數

        print_r($arr);//剩下的就是前端展示的事情了

    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM