您好,欢迎访问一九零五行业门户网

Laravel5.3+Scout+ElasticSearch5.0

系统环境
ubuntu16.04, elasticsearch5.0, jdk1.8
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=customelasticsearch elasticsearch_index=box elasticsearch_host=localhost:9200
这三行配置是scout用于确定你使用什么engine, 并且和搜索引擎的地址.
读者可能会发现我的driver是customelasticsearch, 而不是elasticsearch.
因为当你打开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可能的小坑
如果你在数据库的表有主键自增且名为id的字段, 但是你不希望 elasticsearch使用数据表的id来充当es的document的id, 那么你需要更改model的 $primarykey并且public $incrementing = false;, 这样你就能指定当前数据表的其他值充当es的id. 如果es的数据有一部分_id是数据库的id, 而另一部分又是你新指定的, 那么会导致你的搜索也好,其他操作也好都受影响.
其它类似信息

推荐信息