Elasticsearch 簡介
Elastic 的底層是開源庫 Lucene。但是,你沒法直接用 Lucene,必須自己寫程式碼去呼叫它的介面。Elastic 是 Lucene 的封裝,提供了 REST API 的操作介面,開箱即用。入門教程可參見阮一峰部落格 全文搜尋引擎 Elasticsearch 入門教程 。
ES 和 Mysql
ES 裡的概念類比於 Mysql 如下圖所示:
倒排索引
在說倒排索引之前我們先說說什麼是正排索引。正排索引也稱為”前向索引”,它是建立倒排索引的基礎。
如上在查詢一個 keyword 在哪些文件裡包含的時候,需對所有的文件進行掃描以確保沒有遺漏,這樣就使得檢索時間大大延長,檢索效率低下。這個時候我們就用到了倒排索引,首先將文件分詞。
比如我們要查詢‘搜尋引擎’這個關鍵詞在哪些文件中出現過。首先我們透過倒排索引可以查詢到該關鍵詞出現的文件位置是在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 的查詢構造器,支援常用的如 where
、whereIn
、whereBetween
、orderBy
、first
、get
,也支援分頁方法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的版本號保持一致。
本作品採用《CC 協議》,轉載必須註明作者和本文連結