600多G数据库的sphinx全文检索案例
社工库的规模越来越大,MSSQL的查询速度已经不够用了,改用全文检索,目前效果不错,全库在650G左右,索引160G,全文检索响应时间在5秒以内。
主要参考了The Web Of Answers的一个搭建帖子,具体链接找不到了,做了很多修改和改进,便于添加新库。
给出一些配置信息,有兴趣的同学可以留言交流。
索引配置信息:
搭建期间遇到的几个问题:
做索引时报 “out of memory” 错误:很多人认为是内存不够大,超过4G的索引就不行了,真是 too young,不好好看手册,看我怎么解决: Coreseek “out of memory” 解决 。
邮箱作为关键词搜索时将@自动作为分隔符断开:也就是说,你搜索 helloyouyou@163.com这个邮箱,它自动给你分割为helloyouyou和163.com进行搜索并给出结果~看我怎么解决:Coreseek搭建的社工库中@特殊字符的搜索 。(其实最终没能解决😭)
搭建流程备忘:
创建数据库
CREATE TABLE `shegongku` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`description` text COLLATE utf8_unicode_ci,
`entry` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '主要存放的表',
`hits` int(10) DEFAULT '0',
`date_created` int(10) DEFAULT NULL,
`date_updated` int(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `shegongku_0001` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`db_id` int(10) DEFAULT NULL,//这里的db_id按照上面shekongku表的id来设置,可以在创建一行后设置默认值。
`line` text,
PRIMARY KEY (`id`),
KEY `db_id` (`db_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE `shegongku_0002` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`db_id` int(10) DEFAULT NULL,
`line` text,
PRIMARY KEY (`id`),
KEY `db_id` (`db_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
导入数据
load data local infile "c:/test.txt" ignore into table shegongku_0001 character set utf8 fields terminated by '|||' lines terminated by '\n' (line);
注意TXT文档必须为UTF8格式
load data local infile "c:/aipai.com/1-20W.txt" ignore into table shegongku_0001 character set utf8 fields terminated by '|||' lines terminated by '\n' (line);
进coreseek根目录设置路径set PATH=%CD%\bin;%PATH%
建索引 bin\indexer -c etc\csft_shegongku.conf --all(bin\indexer -c etc\csft_shegongku.conf sgk_twshegongku_0001_index单个索引)
搜索 bin\search -c etc\csft_shegongku.conf -a venus
创建临时服务 bin\searchd -c etc\csft_shegongku.conf --console
创建服务 bin\searchd --install --config f:/coreseek/etc/csft_shegongku.conf --servicename coreseek
PHP调用API,使用PHP搜索
删除服务 bin\searchd --delete --servicename coreseek
每次添加数据库首先在shegongku表添加一行,记录id号,然后创建一个表,db_id按照id号设置默认值。修改search.php第63行。
insert into xunlei(`realname`,`tips`,`shenfenzheng`,`qq`,`site`,`username`,`email`,`password`) select `realname`,`tips`,`shenfenzheng`,`qq`,`site`,`username`,`email`,`password` from xunlei_bak
改进数据库结构和建表方式,直接添加一个新库,然后在search.php和csft_shegongku.conf添加相应库名就OK了。