全文搜索插件
本文阅读预计需要: 3 minutes
环境要求
- 本节仅适用于单独购买该插件的企业用户。免费用户请忽略本环节。
插件介绍
在网盘文件管理页面搜索文件时,若勾选更多-文件内容,默认支持对txt等各种纯文本内容搜索,但若需要对PDF,office等文件进行内容搜索,则需要安装此扩展插件。
注 意
- 需要在插件中心启用,并且连接测试正常后方可使用。
- 全文搜索插件实现逻辑是提取文件内容到数据库,并通过对数据库增加
fulltext
索引实现的。- 全文搜索文件内容提取默认每分钟执行一次,在后台服务器管理-计划任务中可以查看。
配置说明
- 在插件中心安装全文搜索插件。
-
在服务器端安装必要支持环境JAVA, 在插件中心进入全文搜索插件配置,检查连接测试是否正常。
yum install java-11-openjdk
-
连接到MySQL数据库,增加
fulltext
索引-- 移除旧的索引(不存在报错正常) ALTER TABLE `comment` DROP INDEX `content`; ALTER TABLE `user_meta` DROP INDEX `value`; ALTER TABLE `group_meta` DROP INDEX `value`; ALTER TABLE `io_source` DROP INDEX `name`; ALTER TABLE `io_source_meta` DROP INDEX `value`; ALTER TABLE `io_file_contents` DROP INDEX `content`; -- 创建全文索引 ALTER TABLE `comment` ADD FULLTEXT (`content`); ALTER TABLE `user_meta` ADD FULLTEXT (`value`); ALTER TABLE `group_meta` ADD FULLTEXT (`value`); ALTER TABLE `io_source` ADD FULLTEXT (`name`); ALTER TABLE `io_source_meta` ADD FULLTEXT (`value`); ALTER TABLE `io_file_contents` ADD FULLTEXT (`content`) WITH PARSER ngram;
提 示
- ngram 中文分词较精准,但可能因短词重复率太高引起内存不足报错“FTS query exceeds”,建议优化配置
/etc/my.cnf
ngram_token_size = 4 #ngram 分词器中 N 的大小,默认为2,增大以避免查询过宽 innodb_ft_result_cache_limit = 4G #InnoDB 引擎结果缓存大小,默认2G,最大4G
- 如果使用的不是MySQL,而是不支持ngram的MariaDB,最后一条改为
ALTER TABLE `io_file_contents` ADD FULLTEXT(`content`);
- (可选)在站点下
config/setting_user.php
文件后新增配置$config['settingSystemDefault']['searchFulltext'] = 1; // like%% 转为全文索引(默认只有内容搜索会用全文索引,这里把普通查询也改成全文索引方式) // $config['settingSystemDefault']['searchFulltextForce'] = 1; // 完整匹配; (否则会对$words进行分词,包含一部分也作为结果;会多出结果) $config['settingSystemDefault']['searchFulltextInnodb'] = 1;
- (可选)如果没有使用
innodb
, 建议修改表引擎为innodb
alter table comment engine=InnoDB;
alter table comment_meta engine=InnoDB;
alter table comment_praise engine=InnoDB;
alter table `group` engine=InnoDB;
alter table group_meta engine=InnoDB;
alter table io_file engine=InnoDB;
alter table io_file_contents engine=InnoDB;
alter table io_file_meta engine=InnoDB;
alter table io_source engine=InnoDB;
alter table io_source_auth engine=InnoDB;
alter table io_source_event engine=InnoDB;
alter table io_source_history engine=InnoDB;
alter table io_source_meta engine=InnoDB;
alter table io_source_recycle engine=InnoDB;
alter table share engine=InnoDB;
alter table share_report engine=InnoDB;
alter table share_to engine=InnoDB;
alter table system_log engine=InnoDB;
alter table system_option engine=InnoDB;
alter table system_session engine=InnoDB;
alter table `user` engine=InnoDB;
alter table user_fav engine=InnoDB;
alter table user_group engine=InnoDB;
alter table user_meta engine=InnoDB;
alter table user_option engine=InnoDB;