1. 云栖社区>
  2. PHP教程>
  3. 正文

Laravel5.3+Scout+ElasticSearch5.0 小记

作者:用户 来源:互联网 时间:2017-12-01 14:40:59

elasticsearchlaravel5.05.3小记Scout

Laravel5.3+Scout+ElasticSearch5.0 小记 - 摘要: 本文讲的是Laravel5.3+Scout+ElasticSearch5.0 小记,系统环境Ubuntu16.04, ElasticSearch5.0, JDK1.8ElasticSearch5.0安装es5.0没什么要点,只要跟着官方文档流程一般都能安装成功,并成功运行.不过在线上环境,别人还是在用es2.4,一是项目大

系统环境
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, 而另一部分又是你新指定的, 那么会导致你的搜索也好,其他操作也好都受影响.

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索elasticsearch , laravel , 5.0 , 5.3 , 小记 Scout ,以便于您获取更多的相关知识。