Ubuntu16.04, ElasticSearch5.0, JDK1.8
安裝es5.0沒什麼要點,只要跟着官方文檔流程通常都能安裝成功,併成功運行.
不過在線上環境,別人仍是在用es2.4,一是項目大了,二是jdk的不一樣版本對內存的要求不同.
並且在es5.0以後, 因爲取消了site-plugin
, 致使不少插件都不能按照之前的方式安裝了. 好比很經常使用elasticSearch-head
, 如今就要經過Grunt
運行. 或者其餘插件放進Nginx
或者Apache
的www
目錄運行.html
安裝後可能出現的小問題:java
$JAVA_HOME
找不到, 可是的確有安裝, 能夠設置/etc/default/elasticsearch
這個文件裏面找到 JAVA_HOME=/usr/local/java/jdk1.8.0_101/jre
;數據庫
要是環境內存過小就不要安裝, es5.0差很少佔了我2.5G的內存, 固然如今通常人的電腦內存都挺多的;elasticsearch
在.env文件底部添加這三行ide
SCOUT_DRIVER=customElasticSearch ELASTICSEARCH_INDEX=box ELASTICSEARCH_HOST=localhost:9200
這三行配置是Scout
用於肯定你使用什麼Engine
, 而且和搜索引擎的地址.ui
讀者可能會發現個人Driver是customElasticSearch
, 而不是elasticsearch.
由於當你打開ElasticSearchEngine, 找到 performSearch Method,在裏面你會發現有這麼一段代碼this
$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. 在其中,我修改了兩處地方,es5
這只是演示, 要真使用之後必定要改 $matches[] = [ 'match' => [ '字段名' => $builder->query ] ];
$query = [ 'index' => $this->index, 'type' => $builder->model->searchableAs(), 'body' => [ 'query' => [ 'bool' => [ 'filter' => $filters, 'must' => $matches, ], ], ], ];
若是你在數據庫的表有主鍵自增且名爲id
的字段, 可是你不但願 elasticSearch
使用數據表的id
來充當es的Document的id
, 那麼你須要更改model
的 $primaryKey
而且public $incrementing = false;
, 這樣你就能指定當前數據表的其餘值充當es的id
. 若是es
的數據有一部分_id
是數據庫的id
, 而另外一部分又是你新指定的, 那麼會致使你的搜索也好,其餘操做也好都受影響.插件