關於laravel使用es的正確姿勢

2020-09-19 12:03:02
下面由教學欄目給大家介紹laravel使用es的正確姿勢,希望對需要的朋友有所幫助!

Elasticsearch 簡介

Elastic 的底層是開源庫 Lucene。但是,你沒法直接用 Lucene,必須自己寫程式碼去呼叫它的介面。Elastic 是 Lucene 的封裝,提供了 REST API 的操作介面,開箱即用。

ES 和 Mysql

ES 裡的概念類比於 Mysql 如下圖所示:
laravel 使用 es 的正確姿勢

倒排索引

在說倒排索引之前我們先說說什麼是正排索引。正排索引也稱為」前向索引」,它是建立倒排索引的基礎。
laravel 使用 es 的正確姿勢
如上在查詢一個 keyword 在哪些檔案裡包含的時候,需對所有的檔案進行掃描以確保沒有遺漏,這樣就使得檢索時間大大延長,檢索效率低下。這個時候我們就用到了倒排索引,首先將檔案分詞。
laravel 使用 es 的正確姿勢
比如我們要查詢‘搜尋引擎’這個關鍵詞在哪些檔案中出現過。首先我們通過倒排索引可以查詢到該關鍵詞出現的檔案位置是在1和3中;然後再通過正排索引查詢到檔案1和3的內容並返回結果。

Laravel 使用 ES

安裝外掛

basemkhirat/elasticsearch 是 Laravel 中使用 ES 的一個擴充套件,使用起來非常方便:
1)安裝方法

$ composer require basemkhirat/elasticsearch

2)釋出

$ php artisan vendor:publish –provider=」Basemkhirat\Elasticsearch\ElasticsearchServiceProvider」

設定

這樣我們就安裝好了,如下是我們的連線設定:

'connections' => [
    'default' => [
        'servers' => [
            [
                "host" => env("ELASTIC_HOST", "127.0.0.1"),
                "port" => env("ELASTIC_PORT", 9200),
                'user' => env('ELASTIC_USER', ''),
                'pass' => env('ELASTIC_PASS', ''),
                'scheme' => env('ELASTIC_SCHEME', 'http'),
            ]
        ],
        'index' => env('ELASTIC_INDEX', 'my_index')
    ]],

servers 裡可以加入我們的叢集設定。

使用方法

該外掛的使用方法可借鑑 Laravel 的查詢構造器,支援常用的如 wherewhereInwhereBetweenorderByfirstget,也支援分頁方法paginate

$documents = ES::connection(「default」)
->index(「my_index」)
->type(「my_type」)
->get(); # return a collection of results

設定欄位權重:

ES::type(「my_type」)->search(「hello」, function($search){
$search->boost(2)->fields([「title」 => 2, 「content」 => 1])
})->get();

我們也可以通過修改原始碼擴充自己需要用到的方法,也可以構造原生的查詢語句:

$params['body'] = [
            'aggs' => [
                'all_created' => [
                    'terms' => [
                        'field' => 'element.raw',
                        'size'  => $this->_mAggsPageSize                    ],

                    'aggs' => [

                        'sum_pv' => [
                            'sum' => ['field' => 'pv'],
                        ],
                    ],
                ],
            ],
        ];

結語

ES 內建分詞器對中分支援並不友好,比較推薦的是 IK分詞器,需要注意的是ik版本需要與ES的版本號保持一致

以上就是關於laravel使用es的正確姿勢的詳細內容,更多請關注TW511.COM其它相關文章!