MENU

Docker Laravel Elasticsearch Ik中文分词

• March 12, 2020 • php阅读设置

最近爬了某图片站14W+数据,正准备做个图片搜索服务。

使用Laravel,Es搜索引擎,坑太多了专门写篇文章记录一下!!

注:我的所有环境均使用docker搭建!

一、安装Elastsearch镜像

这里我安装的es镜像版本是6.8.6
坑一:这里提醒一下,因为我用到了IK分词。如果需要使用一些es的插件,请提前知晓该插件支持的es版本!我就是在遇到插件和es版本对不上 导致很多错误!

docker pull elasticsearch:6.8.6

docker版es的tag可以去这里查:https://hub.docker.com/_/elasticsearch?tab=tags

启动 es容器

docker run -d -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" --name es elasticsearch:6.8.6

本机这里我限制了es的使用内存为512M,并设置es为单例模式single-node。

接下来在浏览器里面访问http://127.0.0.1:9200

看到数据返回:

{
name: "CAOQXSj",
cluster_name: "docker-cluster",
cluster_uuid: "pMS_zrN7Q0Wvlbb26DmHXA",
version: {
number: "6.8.6",
build_flavor: "default",
build_type: "docker",
build_hash: "3d9f765",
build_date: "2019-12-13T17:11:52.013738Z",
build_snapshot: false,
lucene_version: "7.7.2",
minimum_wire_compatibility_version: "5.6.0",
minimum_index_compatibility_version: "5.0.0"
},
tagline: "You Know, for Search"
}

二、安装Elastsearch-head镜像

elastsearch-head是es服务的一个可视化工具,可以更方便直观的帮助我们调试数据。

docker pull mobz/elasticsearch-head:5

启动es-head

docker run -d -p 9100:9100 --name eshead  mobz/elasticsearch-head:5

进入es的bash交互界面,开启一下跨域访问权限,才能使es-head对接上数据

docker exec -ti es /bin/bash

进入config目录,找到elasticsearch.yml 编辑它vim命令 如果没有vim命令就执行apt-

增加如下两行,让es-head可以访问

http.cors.enabled: true
http.cors.allow-origin: "*"

保存后输入exit退出交互界面。
重启es容器

docker restart es

接下来访问http://127.0.0.1:9100

WX20200312-173203@2x.png

坑二:es-head版本过老,内置的http请求方式被es拒绝,所以你得按下面的链接配置一下es-head

https://blog.csdn.net/wangxilong1991/article/details/80618273

三、安装Ik分词器

地址:https://github.com/medcl/elasticsearch-analysis-ik

先进入es的bash交互界面

docker exec -ti es /bin/bash

然后cd plugins目录。
创建一个文件夹 mkdir ik

然后使用wget命令下载ik分词器插件(最好选择和你es版本一样,不然各种错误)
这里我是6.8.6

[root@7ce479a44bf4 plugins]# wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.6/elasticsearch-analysis-ik-6.8.6.zip

解压到ik目录

unzip elasticsearch-analysis-ik-6.8.6.zip -d ik/

然后删除elasticsearch-analysis-ik-6.8.6.zip压缩包

退出bash界面,重启es服务

四、为laravel安装elasticsearch扩展包

具体教程可以参考这篇文章:https://learnku.com/articles/20311

我只是说说里面的一些注意的点:
1.不用先安装scout,直接安装tamayo/laravel-scout-elastic这个包,他会自动将自己所需的依赖包scout安装,
不然容易出现一些版本冲突的玄学问题

2.docker里面的php访问docker里面的es可能会出现找不到ip,这时候将laravel的env配置es服务地址改为host.docker.internal
如下图所示:

WX20200312-175039@2x.png

3.导入数据之前请新建索引,不然直接scout:import导入的数据无法使用ik分词

具体参考:https://learnku.com/articles/4027

4.tamayo/laravel-scout-elastic这个包有个bug,会默认在搜索关键字前后加上星号*,会导致中文分词失效!

需要手动改一下源代码。
在/vendor/tamayo/laravel-scout-elastic/ElasticsearchEngine.php
第140行,把:

'must' => [['query_string' => [ 'query' => "*{$builder->query}*"]]]

左右两边的星号去掉,变为:

'must' => [['query_string' => [ 'query' => "{$builder->query}"]]]
Archives QR Code
QR Code for this page
Tipping QR Code