首先说明下我的使用环境:win2003 + coreseek 3.2.14 + gbk的mysql ,如有环境变更,请相应做些变更。
首先下载coreseek-3.2.14稳定版:
http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.14-win32.zip
同时下载Microsoft Visual C++ 2005 运行环境 (x86)
http://www.microsoft.com/downloads/details.aspx?FamilyID=32bc1bee-a3f9-4c13-9c99-220b62a191ee&displaylang=zh-cn
如果您的win2003补丁更新的比较新,建议您用Microsoft Visual C++ 2005 SP1 Redistributable Package (x86) 代替上面的,这是是SP1版本,我开始安装的上面的,运行coreseek后报indexer.exe应用程序出错,可能是跟比较高的系统补丁的兼容性的问题,我是升级到最新补丁的。这个地方 coreseek官方都没有更新说明,提醒大家注意。
http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=200B2FD9-AE1A-4A14-984D-389C36F85647
同样,如果您要用coreseek 4.0.1 这个最新版的,我也建议您下载Microsoft Visual C++ 2008的SP1版本,具体不再详述。
现在解压缩coreseek-3.2.14-win32.zip ,比如解压到D:/ coreseek/ ,现在我们切换到这个目录来说。
修改sphinx配置文件etc\csft.conf
#threads
source threads
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = 填入数据库密码
sql_db = 填入你的discuz x2.0数据库名称
sql_port = 3306
sql_query_pre = SET NAMES UTF8 (这里如果数据库是GBK的就修改为gbk,下面所有SET NAME设置同这里)
sql_query_pre = SET SESSION query_cache_type=OFF
sql_query_pre = CREATE TABLE IF NOT EXISTS sph_counter ( counter_id INTEGER PRIMARY KEY NOT NULL,max_doc_id INTEGER NOT NULL)
sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(tid)-100 FROM pre_forum_thread
sql_query = SELECT t.tid AS id,t.tid,t.subject,t.digest,t.displayorder,t.authorid,t.lastpost,t.special \
FROM pre_forum_thread AS t \
WHERE t.tid=$start AND t.tid=$end
sql_query_range = SELECT (SELECT MIN(tid) FROM pre_forum_thread),max_doc_id FROM sph_counter WHERE counter_id=1
sql_range_step = 4096
sql_attr_uint = tid
sql_attr_uint = digest
sql_attr_uint = displayorder
sql_attr_uint = authorid
sql_attr_uint = special
sql_attr_timestamp =lastpost
sql_query_info = SELECT * FROM pre_forum_thread WHERE tid=$id
}
#threads
index threads
{
source = threads
path = var/data/threads #windows下最好用全路径
docinfo = extern
mlock = 0
morphology = none
#charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
charset_dictpath= etc/ #Windows环境下设置文昌网站建设公司,/符号结尾
charset_debug = 0
#### 索引的词最小长度
min_word_len = 1
charset_type = utf-8 (这里如果是GBK数据库就修改为zh_cn.gbk ,下同)
html_strip = 0
##### 字符表,注意:如使用这种方式,则sphinx会对中文进行单字切分,
##### 即进行字索引,若要使用中文分词,必须使用其他分词插件如 coreseek,sfc
charset_table = U+FF10..U+FF19-0..9, 0..9, U+FF41..U+FF5A-a..z, U+FF21..U+FF3A-a..z,\
A..Z-a..z, a..z, U+0149, U+017F, U+0138, U+00DF, U+00FF, U+00C0..U+00D6-U+00E0..U+00F6,\
U+00E0..U+00F6, U+00D8..U+00DE-U+00F8..U+00FE, U+00F8..U+00FE, U+0100-U+0101, U+0101,\
U+0102-U+0103, U+0103, U+0104-U+0105, U+0105, U+0106-U+0107, U+0107, U+0108-U+0109,\
U+0109, U+010A-U+010B, U+010B, U+010C-U+010D, U+010D, U+010E-U+010F, U+010F,\
U+0110-U+0111, U+0111, U+0112-U+0113, U+0113, U+0114-U+0115, U+0115, \
U+0116-U+0117,U+0117, U+0118-U+0119, U+0119, U+011A-U+011B, U+011B, U+011C-U+011D,\
U+011D,U+011E-U+011F, U+011F, U+0130-U+0131, U+0131, U+0132-U+0133, U+0133, \
U+0134-U+0135,U+0135, U+0136-U+0137, U+0137, U+0139-U+013A, U+013A, U+013B-U+013C, \
U+013C,U+013D-U+013E, U+013E, U+013F-U+0140, U+0140, U+0141-U+0142, U+0142, \
U+0143-U+0144,U+0144, U+0145-U+0146, U+0146, U+0147-U+0148, U+0148, U+014A-U+014B, \
U+014B,U+014C-U+014D, U+014D, U+014E-U+014F, U+014F, U+0150-U+0151, U+0151, \
U+0152-U+0153,U+0153, U+0154-U+0155, U+0155, U+0156-U+0157, U+0157, U+0158-U+0159,\
U+0159,U+015A-U+015B, U+015B, U+015C-U+015D, U+015D, U+015E-U+015F, U+015F, \
U+0160-U+0161,U+0161, U+0162-U+0163, U+0163, U+0164-U+0165, U+0165, U+0166-U+0167, \
U+0167,U+0168-U+0169, U+0169, U+016A-U+016B, U+016B, U+016C-U+016D, U+016D, \
U+016E-U+016F,U+016F, U+0170-U+0171, U+0171, U+0172-U+0173, U+0173, U+0174-U+0175,\
U+0175,U+0176-U+0177, U+0177, U+0178-U+00FF, U+00FF, U+0179-U+017A, U+017A, \
U+017B-U+017C,U+017C, U+017D-U+017E, U+017E, U+0410..U+042F-U+0430..U+044F, \
U+0430..U+044F,U+05D0..U+05EA, U+0531..U+0556-U+0561..U+0586, U+0561..U+0587, \
U+0621..U+063A, U+01B9,U+01BF, U+0640..U+06网站建设服务4A, U+0660..U+0669, U+066E, U+066F, \
U+0671..U+06D3, U+06F0..U+06FF,U+0904..U+0939, U+0958..U+095F, U+0960..U+0963, \
U+0966..U+096F, U+097B..U+097F,U+0985..U+09B9, U+09CE, U+09DC..U+09E3, U+09E6..U+09EF, \
U+0A05..U+0A39, U+0A59..U+0A5E,U+0A66..U+0A6F, U+0A85..U+0AB9, U+0AE0..U+0AE3, \
U+0AE6..U+0AEF, U+0B05..U+0B39,U+0B5C..U+0B61, U+0B66..U+0B6F, U+0B71, U+0B85..U+0BB9, \
U+0BE6..U+0BF2, U+0C05..U+0C39,U+0C66..U+0C6F, U+0C85..U+0CB9, U+0CDE..U+0CE3, \
U+0CE6..U+0CEF, U+0D05..U+0D39, U+0D60,U+0D61, U+0D66..U+0D6F, U+0D85..U+0DC6, \
U+1900..U+1938, U+1946..U+194F, U+A800..U+A805,U+A807..U+A822, U+0386-U+03B1, \
U+03AC-U+03B1, U+0388-U+03B5, U+03AD-U+03B5,U+0389-U+03B7, U+03AE-U+03B7, \
U+038A-U+03B9, U+0390-U+03B9, U+03AA-U+03B9,U+03AF-U+03B9, U+03CA-U+03B9, \
U+038C-U+03BF, U+03CC-U+03BF, U+038E-U+03C5,U+03AB-U+03C5, U+03B0-U+03C5, \
U+03CB-U+03C5, U+03CD-U+03C5, U+038F-U+0网站建设的方案3C9,U+03CE-U+03C9, U+03C2-U+03C3, \
U+0391..U+03A1-U+03B1..U+03C1,U+03A3..U+03A9-U+03C3..U+03C9, U+03B1..U+03C1, \
U+03C3..U+03C9, U+0E01..U+0E2E,U+0E30..U+0E3A, U+0E40..U+0E45, U+0E47, U+0E50..U+0E59, \
U+A000..U+A48F, U+4E00..U+9FBF,U+3400..U+4DBF, U+20000..U+2A6DF, U+F900..U+FAFF, \
U+2F800..U+2FA1F, U+2E80..U+2EFF,U+2F00..U+2FDF, U+3100..U+312F, U+31A0..U+31BF, \
U+3040..U+309F, U+30A0..U+30FF,U+31F0..U+31FF, U+AC00..U+D7AF, U+1100..U+11FF, \
U+3130..U+318F, U+A000..U+A48F,U+A490..U+A4CF
min_prefix_len = 0
min_infix_len = 1
ngram_len = 1
}
#threads_minute
source threads_minute : threads
{
sql_query_pre =
sql_query_pre = SET NAMES UTF8
sql_query_pre = SET SESSION query_cache_type=OFF
sql_query_range = SELECT max_doc_id+1,(SELECT MAX(tid) FROM pre_forum_thread) FROM sph_counter WHERE counter_id=1
}
#threads_minute
index threads_minute : threads
{
source = threads_minute
path = var/data/threads_minute #windows下最好用全路径
}
#posts
source posts : threads
{
type = mysql
sql_query_pre =
sql_query_pre = SET NAMES UTF8
sql_query_pre = SET SESSION query_cache_type=OFF
sql_query_pre = CREATE TABLE IF NOT EXISTS sph_counter ( counter_id INTEGER PRIMARY KEY NOT NULL,max_doc_id INTEGER NOT NULL)
sql_query_pre = REPLACE INTO sph_counter SELECT 2, MAX(pid)-5000 FROM pre_forum_post
sql_query = SELECT p.pid AS id,p.tid,p.subject,p.message,t.digest,t.displayorder,t.authorid,t.lastpost,t.special \
FROM pre_forum_post AS p LEFT JOIN pre_forum_thread AS t USING(tid) \
WHERE p.pid=$start AND p.pid=$end
sql_query_range = SELECT (SELECT MIN(pid) FROM pre_forum_post),max_doc_id FROM sph_counter WHERE counter_id=2
sql_range_step = 4096
sql_attr_uint = tid
sql_attr_uint = digest
sql_attr_uint = displayorder
sql_attr_uint = authorid
sql_attr_uint = special
sql_attr_timestamp =lastpost
sql_query_info = SELECT * FROM pre_forum_post WHERE pid=$id
}
#posts
index posts
{
source = posts
path = var/data/posts #windows下最好用全路径
docinfo = extern
mlock = 0
morphology = none
#charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
charset_dictpath= etc/ #Windows环境下设置,/符号结尾
charset_debug = 0
#### 索引的词最小长度
min_word_len = 1
charset_type = utf-8
html_strip = 0
##### 字符表,注意:如使用这种方式,则sphinx会对中文进行单字切分,
##### 即进行字索引,若要使用中文分词,必须使用其他分词插件如 coreseek,sfc
charset_table = U+FF10..U+FF19-0..9, 0..9, U+FF41..U+FF5A-a..z, U+FF21..U+FF3A-a..z,\
A..Z-a..z, a..z, U+0149, U+017F, U+0138, U+00DF, U+00FF, U+00C0..U+00D6-U+00E0..U+00F6,\
U+00E0..U+00F6, U+00D8..U+00DE-U+00F8..U+00FE, U+00F8..U+00FE, U+0100-U+0101, U+0101,\
U+0102-U+0103, U+0103, U+0104-U+0105, U+0105, U+0106-U+0107, U+0107, U+0108-U+0109,\
U+0109, U+010A-U+010B, U+010B, U+010C-U+010D, U+010D, U+010E-U+010F, U+010F,\
U+0110-U+0111, U+0111, U+0112-U+0113, U+0113, U+0114-U+0115, U+0115, \
U+0116-U+0117,U+0117, U+0118-U+0119, U+0119, U+011A-U+011B, U+011B, U+011C-U+011D,\
U+011D,U+011E-U+011F, U+011F, U+0130-U+0131, U+0131, U+0132-U+0133, U+0133, \
U+0134-U+0135,U+0135, U+0136-U+0137, U+0137, U+0139-U+013A, U+013A, U+013B-U+013C, \
U+013C,U+013D-U+013E, U+013E, U+013F-U+0140, U+0140, U+0141-U+0142, U+0142, \
U+0143-U+0144,U+0144, U+0145-U+0146, U+0146, U+0147-U+0148, U+0148, U+014A-U+014B, \
U+014B,U+014C-U+014D, U+014D, U+014E-U+014F, U+014F, U+0150-U+0151, U+0151, \
U+0152-U+0153,U+0153, U+0154-U+0155, U+0155, U+0156-U+0157, U+0157, U+0158-U+0159,\
U+0159,U+015A-U+015B, U+015B, U+015C-U+015D, U+015D, U+015E-U+015F, U+015F, \
U+0160-U+0161,U+0161, U+0162-U+0163, U+0163, U+0164-U+0165, U+0165, U+0166-U+0167, \
U+0167,U+0168-U+0169, U+0169, U+016A-U+016B, U+016B, U+016C-U+016D, U+016D, \
U+016E-U+016F,U+016F, U+0170-U+0171, U+0171, U+0172-U+0173, U+0173, U+0174-U+0175,\
U+0175,U+0176-U+0177, U+0177, U+0178-U+00FF, U+00FF, U+0179-U+017A, U+017A, \
U+017B-U+017C,U+017C, U+017D-U+017E, U+017E, U+0410..U+042F-U+0430..U+044F, \
U+0430..U+044F,U+05D0..U+05EA, U+0531..U+0556-U+0561..U+0586, U+0561..U+0587, \
U+0621..U+063A, U+01B9,U+01BF, U+0640..U+064A, U+0660..U+0669, U+066E, U+066F, \
U+0671..U+06D3, U+06F0..U+06FF,U+0904..U+0939, U+0958..U+095F, U+0960..U+0963, \
U+0966..U+096F, U+097B..U+097F,U+0985..U+09B9, U+09CE, U+09DC..U+09E3, U+09E6..U+09EF, \
U+0A05..U+0A39, U+0A59..U+0A5E,U+0A66..U+0A6F, U+0A85..U+0AB9, U+0AE0..U+0AE3, \
U+0AE6..U+0AEF, U+0B05..U+0B39,U+0B5C..U+0B61, U+0B66..U+0B6F, U+0B71, U+0B85..U+0BB9, \
U+0BE6..U+0BF2, U+0C05..U+0C39,U+0C66..U+0C6F, U+0C85..U+0CB9, U+0CDE..U+0CE3, \
U+0CE6..U+0CEF, U+0D05..U+0D39, U+0D60,U+0D61, U+0D66..U+0D6F, U+0D85..U+0DC6, \
U+1900..U+1938, U+1946..U+194F, U+A800..U+A805,U+A807..U+A822, U+0386-U+03B1, \
U+03AC-U+03B1, U+0388-U+03B5, U+03AD-U+03B5,U+0389-U+03B7, U+03AE-U+03B7, \
U+038A-U+03B9, U+0390-U+03B9, U+03AA-U+03B9,U+03AF-U+03B9, U+03CA-U+03B9, \
U+038C-U+03BF, U+03CC-U+03BF, U+038E-U+03C5,U+03AB-U+03C5, U+03B0-U+03C5, \
U+03CB-U+03C5, U+03CD-U+03C5, U+038F-U+03C9,U+03CE-U+03C9, U+03C2-U+03C3, \
U+0391..U+03A1-U+03B1..U+03C1,U+03A3..U+03A9-U+03C3..U+03C9, U+03B1..U+03C1, \
U+03C3..U+03C9, U+0E01..U+0E2E,U+0E30..U+0E3A, U+0E40..U+0E45, U+0E47, U+0E50..U+0E59, \
U+A000..U+A48F, U+4E00..U+9FBF,U+3400..U+4DBF, U+20000..U+2A6DF, U+F900..U+FAFF, \
U+2F800..U+2FA1F, U+2E80..U+2EFF,U+2F00..U+2FDF, U+3100..U+312F, U+31A0..U+31BF, \
U+3040..U+309F, U+30A0..U+30FF,U+31F0..U+31FF, U+AC00..U+D7AF, U+1100..U+11FF, \
U+3130..U+318F, U+A000..U+A48F,U+A490..U+A4CF
min_prefix_len = 0
min_infix_len = 1
ngram_len = 1
}
#posts_minute
source posts_minute : posts
{
sql_query_pre =
sql_query_pre = SET NAMES UTF8
sql_query_pre = SET SESSION query_cache_type=OFF
sql_query_range = SELECT max_doc_id+1,(SELECT MAX(pid) FROM pre_forum_post) FROM sph_counter WHERE counter_id=2
}
#posts_minute
index posts_minute : posts
{
source = posts_minute
path = var/data/posts_minute #windows下最好用全路径
}
#全局indexer定义
indexer
{
mem_limit = 256M
}
#searchd服务定义
searchd
{
listen = 3312
read_timeout = 5
max_children = 30
max_matches = 10000
seamless_rotate = 0
preopen_indexes = 0
unlink_old = 1
pid_file = var/log/searchd_discuzx.pid #windows下最好用全路径
log = var/log/searchd_discuzx.log #windows下最好用全路径
query_log = var/log/query_discuzx.log #windows下最好用全路径
}
设置好csft.conf 后我们就可以点击test.cmd 开始生成索引并开启全文搜索服务了,此过程跟你的数据库大小有关系,耐心等待一会。
至此全文搜索服务器搭建好了,开始Discuz的设置
登录后台: 全局 搜索 开启全文搜索
这里要修改两个个地方,discuz自己写错了一个单词 threads_mintue 和posts_mintue
后面分钟的单词写错了,我不知道是不是他们故意的,邪恶下~~
分别修改为:threads_minute 和posts_minute
再要修改程序source\module\search\search_forum.php
找到237行左右
if($srchtype == 'fulltext' && $_G['setting']['sphinxon']) {
修改为:
// if($srchtype == 'fulltext' && $_G['setting']['sphinxon']) {
if($srchtxt && $_G['setting']['sphinxon']) {
对于要修改的原代码我习惯用//屏蔽,方便以后找回或者对照。
网上大部分说是直接用if($_G['setting']['sphinxon']) {
这样子是有问题的,就是搜索最新帖子的时候没有关键字,只能用系统自带的。
至此,discuz x2 的全文搜索就ok了,这个对于拥有独立服务器并且帖子数量相对多些的论坛非常有用,且占用服务器资源非常小。discuz x2 全文搜索演示站点:http://bbs.tumuzhe.com 土木者论坛。
本文由tumuzhe 原创,转摘请注明出处,谢谢!
南京牧狼文化传媒有限公司简介:
牧狼传媒,牧者之心,狼者之性,以牧之谦卑宽容之心待人,以狼之团结无畏之性做事!
公司注册资金100万,主营众筹全案服务、网站营销全案服务、网站建设、微信小程序开发、电商网店设计、H5页面设计、腾讯社交广告投放以及电商营销推广全案等相关业务,致力于为客户提供更有价值的服务,创造让用户满意的效果!
为百度官方及其大客户、苏宁易购、金山WPS秀堂、美的、创维家电、新东方在线、伊莱克斯、宝丽莱等国内国外知名品牌服务过,服务经验丰富!同时,公司也是南京电子商务协会会员单位、猪八戒网官方认证签约服务商、江苏八戒服务网联盟、南京浦口文化产业联合会会员单位,可以为您提供更好的服务!
主营项目:众筹全案服务、网站营销全案服务、网站建设、微信小程序开发、电商网店设计、H5页面设计、腾讯社交广告投放、竞价托管、网站优化、电商代运营等
合作客户:百度、苏宁易购、饿了么、美的、创维家电、新东方在线、宝丽莱、金山WPS秀堂、伊莱克斯
资质荣誉:百度商业服务市场2017年度最佳图片服务商、南京电子商务协会会员单位、猪八戒网官方认证签约服务商、江苏八戒服务网联盟、南京浦口文化产业联合会会员单位、八戒通TOP服务商、"易拍即合杯"H5创意大赛"三等奖"。