joomla版本为joomla4,es版本为7
最终效果为将joomla文章索引到es上,可以通过es进行文章的全站搜索,适用于全站文章内容查找
joomla添加elasticsearch-php的lib
使用composer下载es-php
先将es-php的lib包通过composer下载下来:
找个目录新建composer.json文件,并写入es的相关下载
touch composer.json
{ "require":{ "elasticsearch/elasticsearch":"~7.0" } }
执行composer install
将es的lib下载好
参考截图:
创建joomla的lib
在extensions目录下(或者随便找个目录)创建文件夹,比如lib_elasticsearch
将刚才下载好的es的整个vendor目录复制到这里
创建xml,比如lib_elasticsearch.xml
xml格式跟组件,模块的xml格式类似,注意extension type="library"
搞完以后在joomla安装好,在libraries中就能看到如下目录了
joomla创建es插件,监听文章变化
插件编写详细方法可以参考joomla的官方文档
插件的xml配置,<extension type="plugin" group="finder" method="upgrade">
把插件安装到joomla系统自带的finder中
在插件中使用es-php
在文件头部加上
require_once JPATH_LIBRARIES . '/escli/vendor/autoload.php';
然后再引用
use Elasticsearch\ClientBuilder;
可以在构造函数中将client初始化:
处理插件事件监听方法
接下来就是实现文章的事件监听方法了
比如:onFinderAfterDelete,onFinderAfterSave等
思路可以参考finder目录下,对content的索引处理
大概的思路是
保存文章后,通过文章id查询到文章,经过自己业务的逻辑判断后,决定把文章加入索引则将文章的html标签去除,空格换行去除,然后构建文章url,将文章的关键信息都通过esclient放到es服务的索引中
删除文章后根据id对es服务中的文章也进行删除
还有文章状态变更等响应逻辑处理,还可以加入joomla菜单关联文章触发的相关逻辑处理
创建索引实现参考:
设置article分词为ik_max_word,title的分词为ik_smart
url是用于查询是定位文章在网站前台的位置
将文章按id加入索引
移除文章索引
通过api调用es搜索文章
写在前台组件site目录中
同样的引入es-php,controller extends ApiController
搜索条件参考:
from,size用于分页
body构建按文章后标题查询
highlight将搜索结果匹配处进行高亮显示
将得到的数据返回给前端,然后前端就可以编写出对应的模块展示这些搜索结果了