ElasticSearch全文搜索插件教程

2022-09-27 11:26 0

一、基本操作

1、安装好插件

2、系统后台设置

ElasticSearch全文搜索插件教程

关闭记忆后台操作界面

3、进入配置管理

ElasticSearch全文搜索插件教程

配置好索引名称,索引服务器等参数,在下面勾选需要索引的字段、索引类型以及选择分词器。一般中文数据选text,分词器选ik_max_word即可。

4、创建索引以及导入数据

ElasticSearch全文搜索插件教程

5、查看已经索引的数据

ElasticSearch全文搜索插件教程

在这里你可以查看和删除已经索引的数据,查看标题的分词效果,如果对分词不满意,可以使用自定义分词

到这里你已经可以使用前台页面【你的域名/index.php?s=zyl_elasticsearch&c=home&m=index】进行愉快的搜索了。

二、使用自定义分词

1、自定义分词分类管理,这个其实没多大用处,只是方便大家为词语分类而已

ElasticSearch全文搜索插件教程

点击自定义词库分类,进入自定义词库分类管理

ElasticSearch全文搜索插件教程

分类列表

ElasticSearch全文搜索插件教程

添加分类

2、自定义词库管理

ElasticSearch全文搜索插件教程

点击进入自定义词库管理

ElasticSearch全文搜索插件教程

自定义分词列表

ElasticSearch全文搜索插件教程

添加自定义分词

3、ElasticSearch服务端设置

1、打开elasticsearch/plugins/ik/config/IKAnalyzer.cfg文件,修改remote_ext_dict的值为【你的网址】/dict/fenci.dic,如图所示

ElasticSearch全文搜索插件教程

2、重启elasticsearch服务端

到这里自定义词库设置完成,之前已经索引的数据是不会按新词库分词的,这里就需要【删除索引】删除之前的旧数据,然后重新【创建索引】->【导入数据】

三、使用系统钩子,增删改自动同步索引

把下面的钩子代码添加到系统config/hooks.php文件

//模块内容发布之后
\Phpcmf\Hooks::on('module_content_after', function ($data, $old) {
    try {
        $postdata = array_merge($data[1], $data[0]);
        $postdata['dirname'] = APP_DIR;
        // 内容发布或者修改之后
        if ($data[1]['status'] == 9) {
            // 9表示审核通过的
            \Phpcmf\Service::L('zylElasticsearch', 'Zyl_elasticsearch')->document_update($postdata);
        } else {
            // 其他状态 删除索引文档
            \Phpcmf\Service::L('zylElasticsearch', 'Zyl_elasticsearch')->document_delete($postdata);
        }
    } catch (Throwable $e) {
    }
});

//模块内容审核处理之后
\Phpcmf\Hooks::on('module_verify_after', function ($data) {
    //$data 模块审核表的数据
    // MOD_DIR 表示模块目录
    try {
        $data['dirname'] = MOD_DIR;
        if ($data['status'] == 9) {
            // 9表示已经通过了,这里记录一下是谁审核通过的
            \Phpcmf\Service::L('zylElasticsearch', 'Zyl_elasticsearch')->document_update($data);
        } else {
            // 其他状态 删除索引文档
            \Phpcmf\Service::L('zylElasticsearch', 'Zyl_elasticsearch')->document_delete($data);
        }
    } catch (Throwable $e) {
    }
});

//模块内容删除/回收站之后
//用于后台加入回收站之后、用户中心删除内容之后的操作
\Phpcmf\Hooks::on('module_content_recycle', function ($data) {
    //$data 模块表的数据
    // MOD_DIR 表示模块目录
    try {
        $data['dirname'] = MOD_DIR;
        //删除索引文档
        \Phpcmf\Service::L('zylElasticsearch', 'Zyl_elasticsearch')->document_delete($data);
    } catch (Throwable $e) {
    }
});

//用于后台从回收站中删除之后的操作(彻底删除)
\Phpcmf\Hooks::on('module_content_delete', function ($data) {
    //$data 模块表的数据
    // MOD_DIR 表示模块目录
    //有可能前面到回收站的时候已经删除了,所以这里做容错处理
    try {
        $data['dirname'] = MOD_DIR;
        //删除索引文档
        \Phpcmf\Service::L('zylElasticsearch', 'Zyl_elasticsearch')->document_delete($data);
    } catch (\Throwable $e) {
    }
});

到此,我们插件已经能正常工作了。

咨询
微信
电话