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
, 而另外一部分又是你新指定的, 那么会致使你的搜索也好,其余操做也好都受影响.插件