资讯专栏INFORMATION COLUMN

Laravel5.3+Scout+ElasticSearch5.0 小记

OnlyLing / 958人阅读

摘要:系统环境安装没什么要点只要跟着官方文档流程一般都能安装成功并成功运行不过在线上环境别人还是在用一是项目大了二是的不同版本对内存的要求不一样而且在之后由于取消了导致很多插件都不能按照以前的方式安装了比如很常用现在就要通过运行或者其他插件放

系统环境
Ubuntu16.04, ElasticSearch5.0, JDK1.8
ElasticSearch5.0

安装es5.0没什么要点,只要跟着官方文档流程一般都能安装成功,并成功运行.
不过在线上环境,别人还是在用es2.4,一是项目大了,二是jdk的不同版本对内存的要求不一样.
而且在es5.0之后, 由于取消了site-plugin, 导致很多插件都不能按照以前的方式安装了. 比如很常用elasticSearch-head, 现在就要通过Grunt运行. 或者其他插件放进Nginx或者Apachewww目录运行.

安装后可能出现的小问题:

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22018.html

相关文章

  • Laravel 全文检索 Scout集成Algolia

    摘要:写在前面你是否在检索千百万级数据时为性能和速度而担忧呢,即使优化了,创建了数据库索引,还是不尽如人意呢下面就主要介绍如何集成是法国初创公司为你提供毫秒级的数据库实时搜索服务,天下武功无坚不摧,唯快不破。本文基于,其他版本大同小异。 写在前面 你是否在检索千百万级数据时为性能和速度而担忧呢,即使优化了sql,创建了数据库索引,还是不尽如人意呢?下面就主要介绍laravel如何集成Algo...

    Jinkey 评论0 收藏0
  • Laravel中利用Scout集成Elasticsearch搜索引擎

    摘要:写在前面以下简称是一个实时的分布式搜索和分析引擎。在搜索引擎方面,不仅仅有,像另一篇提到的,还有等等,这里不做评价和比较,本篇主要介绍中如何使用。首选必须安装有,请参考。本文基于,其他版本大同小异。 写在前面 Elasticsearch(以下简称es)是一个实时的分布式搜索和分析引擎。 在搜索引擎方面,不仅仅有Elasticsearch,像另一篇提到的Algolia,还有sphinx、...

    buildupchao 评论0 收藏0

发表评论

0条评论

OnlyLing

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<