IT星球论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 200|回复: 0

phpcms sphinx全文索引教程

[复制链接]

1999

主题

1

好友

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

优秀会员 助人为乐 辛勤工作 技术精英 多才多艺 优秀班竹 灌水天才 星球管理 宣传大使 灌水之王 财富勋章 版主勋章 动漫勋章 勤奋会员 论坛精英 PS高手 心 8 闪游皮肤 双鱼座 8★8➹ 志愿者 乖

发表于 2016-2-25 15:36:47 |显示全部楼层
PHPcms sphinx全文索引教程
phpcms sphinx全文索引教程英文介绍:http://www.sphinxsearch.com/docs/manual-0.9.9.html
一、首先需要在服务器上安装sphinx
windows上安装sphinx
1.下载支持MySQL的包  http://www.sphinxsearch.com/downloads/sphinx-0.9.9-win32.zip
2.解压缩 sphinx-0.9.9-win32.zip 到 D:\sphinx
3.安装sphinx服务,在命令行执行命令

  D:\sphinx\searchd —install —config d:\sphinx\sphinx.conf —servicename SphinxSearch
英文参照:http://www.sphinxsearch.com/docs … #installing-windows
linux服务器上安装sphinx
1.下载源码包 http://www.sphinxsearch.com/downloads/sphinx-0.9.9.tar.gz
  $ tar xzvf sphinx–0.9.8.tar.gz
$ cd sphinx
$ ./configure —prefix=/usr/local/sphinx —with–mysql=/usr/local/mysql
$ make
$ make install
常见问题1

/usr/local/sphinx–0.9.9/src/sphinx.cpp:20060: undefined reference to libiconv_open'
/usr/local/sphinx-0.9.9/src/sphinx.cpp:20078: undefined reference to libiconv‘
/usr/local/sphinx-0.9.9/src/sphinx.cpp:20084: undefined reference to libiconv_close'
collect2: ld returned 1 exit status
make[2]: *** [indexer] Error 1
make[2]: Leaving directory /home/jling/sphinx-0.9.9/src’
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/jling/sphinx–0.9.9/src‘
make: *** [all-recursive] Error 1
解决办法:打开configure文件,找到“#define USE_LIBICONV 1”,将注释去掉,并将1改成0。
常见问题2

error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or directory
解决办法:

64位系统ln –s /usr/local/webserver/mysql/lib/mysql/libmysqlclient.so.16.0.0 /usr/lib64/libmysqlclient.so.16
32位系统ln –s /usr/local/webserver/mysql/lib/mysql/libmysqlclient.so.16.0.0 /usr/lib/libmysqlclient.so.16

sphinx.conf样例
  source main
{
type     = mysql    #数据库类型
sql_host    = 10.228.134.211 #数据库ip
sql_user    = admin    #数据库用户名
sql_pass    = admin    #数据库密码
sql_db     = phpcms_v9   #数据库名
sql_port    = 3306    # 数据库端口
  sql_query_pre = SET NAMES utf8
sql_query_pre = REPLACE INTO v9_sphinx_counter SELECT 1, MAX(searchid) FROM v9_search
sql_query = SELECT searchid, adddate, siteid, typeid, id, data FROM v9_search \
WHERE searchid>=$start AND searchid<=$end
sql_query_range  = SELECT 1,max_doc_id FROM v9_sphinx_counter WHERE counter_id=1
sql_range_step = 5000
  #字符串属性设置、需要过滤、排序的时候用到
sql_attr_uint  = typeid
sql_attr_uint  = siteid
sql_attr_uint  = id
sql_attr_timestamp  = adddate
sql_query_info  = SELECT * FROM v9_search WHERE searchid=$id
}
source delta
{
type     = mysql    #数据库类型
sql_host    = 10.228.134.211 #数据库ip
sql_user    = admin    #数据库用户名
sql_pass    = admin    #数据库密码
sql_db     = phpcms_v9   #数据库名
sql_port    = 3306    # 数据库端口
     sql_query_pre = SET NAMES utf8
sql_query = SELECT searchid, adddate, siteid, typeid, id, data FROM v9_search \
WHERE searchid >( SELECT max_doc_id FROM v9_sphinx_counter WHERE counter_id=1 )
sql_query_post = REPLACE INTO v9_sphinx_counter SELECT 1, MAX(searchid) FROM v9_search
#字符串属性设置、需要过滤、排序的时候用到
sql_attr_uint  = typeid
sql_attr_uint  = siteid
sql_attr_uint  = id
sql_attr_timestamp  = adddate
sql_query_info  = SELECT * FROM v9_search WHERE searchid=$id
}
#主索引
index main
{
source = main
# 放索引的目录
path = D:\sphinx\data\main
# 编码
charset_type = utf–8
# 指定utf-8的编码表
charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
# 简单分词,只支持0和1,如果要搜索中文,请指定为1
ngram_len = 1
# 需要分词的字符,如果要搜索中文,去掉前面的注释
ngram_chars   = U+3000..U+2FA1F
}
#增量索引
index delta
{
source = delta
path = D:\sphinx\data\delta
# 编码
charset_type = utf–8
# 指定utf-8的编码表
charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
# 简单分词,只支持0和1,如果要搜索中文,请指定为1
ngram_len = 1
# 需要分词的字符,如果要搜索中文,去掉前面的注释
ngram_chars   = U+3000..U+2FA1F
}

indexer
{
mem_limit    = 128M
}
searchd
{
port     = 9312
log      = D:\sphinx\data\phpcms\searchd.log
query_log    = D:\sphinx\data\phpcms\query.log
read_timeout   = 5
max_children   = 30
pid_file    = D:\sphinx\data\phpcms\searchd.pid
max_matches    = 2000
seamless_rotate   = 0
preopen_indexes   = 0
unlink_old    = 1
}

附件:设置计划任务更新索引
1.windows下
需要设置计划任务
#凌晨4点合并索引,执行merge.bat
#其余时间每分钟更新索引,执行delta.bat
merge.bat


@ECHO off
D:\sphinx\bin\indexer.exe —config D:\sphinx\sphinx.conf —merge main delta —rotate
echo indexing, window will close when complete


delta.bat

@ECHO off
D:\sphinx\bin\indexer.exe —config D:\sphinx\sphinx.conf delta —rotate
echo indexing, window will close when complete
2.linux下编辑定时任务 crontab -e

#凌晨4点合并索引,其余时间每分钟更新索引
* 0–3 * * * /usr/local/sphinx/bin/indexer —config /usr/local/sphinx/etc/sphinx.conf delta —rotate
* 6–23 * * * /usr/local/sphinx/bin/indexer —config /usr/local/sphinx/etc/sphinx.conf delta —rotate
0 4 * * * /usr/local/sphinx/bin/indexer —config /usr/local/sphinx/etc/sphinx.conf —merge main delta —rotate
各种路径、权限需要应用所在服务器一致,如:
sphinx.conf 中需要配置
sql_host 数据库主机地址
sql_user 数据库用户名
sql_pass 数据库密码
sql_db 数据库名
sql_port 数据库端口
phpcms表前缀样例中为phpcms_
索引路径 D:\sphinx\data\delta

phpcms sphinx全文索引教程

该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

回顶部