ElasticSearch5.0
安裝es5.0沒什麼要點,只要跟著官方文檔流程一般都能安裝成功,並成功運行.
不過在線上環境,別人還是在用es2.4,一是專案大了,二是jdk的不同版本對內存的要求不一樣.
而且在es5.0之後, 由於取消了site-plugin, 導致很多插件都不能按照以前的方式安裝了. 比如很常用elasticSearch-head, 現在就要透過Grunt運行. 或其他外掛程式放進Nginx或Apache的www目錄運行.
安裝後可能出現的小問題:
$JAVA_HOME找不到, 但是的確有安裝, 可以設定/etc/default/elasticsearch這份檔案裡面找到JAVA_HOME=/usr/local/java/jdk1.8.0_101/jre;
要是環境記憶體太小就不要安裝, es5.0 當然佔了我2.5G的記憶體,現在一般人的電腦記憶體都蠻多的;
安裝並配置Laravel/Scout
在.env檔底部加入這三行
SCOUT_DRIVER=customElUELASTICSEARCHCDDM是Scout用於確定你使用什麼Engine, 並且和搜尋引擎的地址.
因為當你打開ElasticSearchEngine, 找到performSearch Method,在裡面你會發現有這麼多程式碼
$query = [ 'index' => $this->index, 'type' => $builder->model->searchableAs(), 'body' => [ 'query' => [ 'filtered' => [ 'filter' => $filters, 'query' => [ 'bool' => [ 'must' => $matches ] ], ], ], ], ];
如果你直接運行search Method, 就會告訴你filtered已經取消了,詳見官網這個地址.
但是你又不能去直接改package的代碼, 還好Scout提供了自定義Engine.
所以我們新建一個customElasticSearchEngine, 繼承elasticSearchEngine, 重寫performSearch Method. 在其中,我修改了兩處地方,
这只是演示, 要真使用以后一定要改$matches[] = [ 'match' => [ '字段名' => $builder->query ] ];
$query = [ 'index' => $this->index, 'type' => $builder->model->searchableAs(), 'body' => [ 'query' => [ 'bool' => [ 'filter' => $filters, 'must' => $matches, ], ], ], ];
使用Scout可能的小坑
如果你在數據庫的表有主鍵自增名為且名為欄位, 但是你不希望elasticSearch
使用資料表的id來充當es的Document的id, 那麼你需要更改model的 $primaryKey並且你需要更改model的 $primaryKey並且就能指定當前資料表的其他值充當es的id. 如果es的資料有一部分_id是資料庫的id, 而另一部分又是你新指定的, 那麼會導致你的搜尋也好,其他操作也好都受影響.