elasticsearch在php中的使用
阿新 • • 發佈:2018-11-05
elasticsearch 環境搭建(windows)
安裝es
要執行es,首先得安裝配置 jdk,具體的步驟谷歌即可。基本的環境配置好之後,就可以去官網上下載 windows 專屬的 zip 壓縮包了。es 6.0.0下載地址,下載好直接開啟 bin 目錄下的 elasticsearch.bat 檔案就可以了。這時使用瀏覽器訪問 localhost:9200 應該就能看es的相關版本資訊了。
安裝head外掛
這個外掛提供了一個視覺化介面操作es,包括索引、文件的建立,以及 resful 風格的查詢。這裡推薦一個安裝連結:head外掛安裝
使用elasticsearch/elasticsearch擴充套件操作es
這裡,我選擇了 Laravel 框架來安裝,操作 es(純屬個人愛好),也可以直接使用 composer 安裝。接下來進行搜尋前的一些準備工作:
- 建立索引
- 建立型別
- 建立文件
- 將 mysql 中的記錄匯入 es
上面的這些步驟都是可以通過這個 elasticsearch/elasticsearch 擴充套件封裝的方法來完成的。
執行搜尋
接下來的內容才是我要重點記錄的,直接上程式碼
public function search(Request $request) { $search = $request->input('key'); $curr_page = $request->input('curr_page', 1); $page_size = $request->input('page_size', 5); //最大值為10000; if ($page_size > 10000) { $page_size = 10000; } $market = $request->input('market_key', ''); $coin = $request->input('coin_key', ''); $currency = $request->input('currency_key', ''); $offset = ($curr_page-1) * $page_size; //搜尋條件 $query_condition[] = [ 'term' => ['online' => 1], ]; if (!empty($market)) { $query_condition[] = [ 'term' => ['market' => strtolower($market)], ]; } if (!empty($coin)) { $query_condition[] = [ 'term' => ['coin' => strtolower($coin)], ]; } if (!empty($currency)) { $query_condition[] = [ 'term' => ['currency' => strtolower($currency)], ]; } $params = [ 'index' => 'search_index', 'type' => 'fulltext', 'from' => $offset, 'size' => $page_size, 'body' => [ 'query' => [ 'bool' => [ 'should' => [ ['match' => ['show' => $search]], ], 'filter' => [ $query_condition ] ] ] ] ]; $response = $this->client->search($params); $result['count'] = 0; $result['list'] = []; if (isset($response['hits']['hits']) && count($response['hits']['hits']) > 0) { $hits = $response['hits']['hits']; foreach ($hits as $hit) { $result['list'][] = $hit['_source']; } } $result['count'] = $response['hits']['total'] ?? 0; return $result; }
params 引數說明:index 為建立的索引,type 為型別,from 代表從第幾個記錄開始取值,size 則是一次返回的數量,body 裡包含了查詢條件及過濾條件,值得注意的是查詢結果裡hits物件裡面的total欄位包含了這次查詢匹配的記錄總數。