Flarum 论坛中文搜索typesense引擎案例
案例参考了flarum-elasticsearch
和flarum-ext-chinese-search
version
PHP 7.4.7
Flarum 1.0.4
Typesense 0.21.0
MySQL 8.0.25
Mysql ngram中文搜索
比起第三方搜索引擎,Mysql内置应该是最简单
如果你不想用typesense搜索引擎 使用mysql的ngram也可以实现中文搜索
1、在my.cnf中设置ngram_token_size
属性
例如,"Happy Birthday"是 "生日快乐"简体中国,在 "生日"是 "birthday"和 "快乐"翻译为"happy"。要搜索诸如此类的两个字符的词,请将ngram_token_size 值设置为 2 或更高。
[mysqld]
ngram_token_size=2
重建索引
1、把discussions
表中的索引字段title
删除,执行下列语句重新建立索引
ALTER TABLE 你的表头_discussions ADD FULLTEXT INDEX title (title) WITH PARSER ngram;
2、把posts
表中的索引字段content
删除,执行下列语句重新建立索引
ALTER TABLE 你的表头_posts ADD FULLTEXT INDEX content (content) WITH PARSER ngram;
就这样你就可以使用中文搜索了。
安装插件
composer require mkm/flarum-typesense-chinese-search *@dev
Typesense sdk
composer require php-http/curl-client typesense/typesense-php
说明
1、PHP 版本必须大于7.4
,否则typesense引擎的sdk包会是2.0
的不是4.7.0
的
2、typesense引擎必须是最新版的0.21.0
,否则没有中文索引
3、在根目录下的extend.php
里添加以下代码
(new Extend\Routes('api'))
->remove('discussions.index')
4、在根目录下的config.php
里添加以下代码
'typesense' =>
array (
'key' => "Hu52dwsas2AdxdE",//typesense密钥
'host' => '127.0.0.1',
'port' => 8108,
'protocol' => 'http',
'indexTableDiscussions'=>"discussions",//数据库discussions表的表名 不带前缀
'indexTablePosts'=>"posts",数据库posts表的表名 不带前缀
'connection_timeout_seconds' => 2,//连接超时秒
),
6、到这里你就可以在你本地论坛测试中文搜索了,没怎么使用laravel有些地方有些冗余。所以希望大家自己能改改 也可以提交issues。