新手入门教程 tutorial

提供phpcms最基础的安装,以及后台使用教程

phpcms的sphinx全文索引教程

 admin  2023-06-23 07:34:09
英文介绍: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服务,在命令行执行命令
  1. 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
  1. $ tar xzvf sphinx-0.9.8.tar.gz 
  2. $ cd sphinx 
  3. $ ./configure --prefix=/usr/local/sphinx --with-mysql=/usr/local/mysql 
  4. $ make 
  5. $ make install 
常见问题1
  1. /usr/local/sphinx-0.9.9/src/sphinx.cpp:20060: undefined reference to `libiconv_open' 
  2. /usr/local/sphinx-0.9.9/src/sphinx.cpp:20078: undefined reference to `libiconv' 
  3. /usr/local/sphinx-0.9.9/src/sphinx.cpp:20084: undefined reference to `libiconv_close' 
  4. collect2: ld returned 1 exit status 
  5. make[2]: *** [indexer] Error 1 
  6. make[2]: Leaving directory `/home/jling/sphinx-0.9.9/src' 
  7. make[1]: *** [all] Error 2 
  8. make[1]: Leaving directory `/home/jling/sphinx-0.9.9/src' 
  9. make: *** [all-recursive] Error 1 

解决办法:打开configure文件,找到“#define USE_LIBICONV 1”,将注释去掉,并将1改成0。


常见问题2
  1. 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样例 

  1. source main 
  2. { 
  3. type     = mysql    #数据库类型 
  4. sql_host    = 10.228.134.211 #数据库ip 
  5. sql_user    = admin    #数据库用户名 
  6. sql_pass    = admin    #数据库密码 
  7. sql_db     = phpcms_v9   #数据库名 
  8. sql_port    = 3306    # 数据库端口 
  9.  
  10. sql_query_pre = SET NAMES utf8 
  11. sql_query_pre = REPLACE INTO v9_sphinx_counter SELECT 1, MAX(searchid) FROM v9_search 
  12. sql_query = SELECT searchid, adddate, siteid, typeid, id, data FROM v9_search \ 
  13.     WHERE searchid>=$start AND searchid<=$end 
  14. sql_query_range  = SELECT 1,max_doc_id FROM v9_sphinx_counter WHERE counter_id=1 
  15. sql_range_step = 5000 
  16.  
  17. #字符串属性设置、需要过滤、排序的时候用到 
  18. sql_attr_uint  = typeid 
  19. sql_attr_uint  = siteid 
  20. sql_attr_uint  = id 
  21. sql_attr_timestamp  = adddate 
  22. sql_query_info  = SELECT * FROM v9_search WHERE searchid=$id 
  23. } 
  24.  
  25. source delta 
  26. { 
  27. type     = mysql    #数据库类型 
  28. sql_host    = 10.228.134.211 #数据库ip 
  29. sql_user    = admin    #数据库用户名 
  30. sql_pass    = admin    #数据库密码 
  31. sql_db     = phpcms_v9   #数据库名 
  32. sql_port    = 3306    # 数据库端口 
  33.  
  34.     sql_query_pre = SET NAMES utf8 
  35.     sql_query = SELECT searchid, adddate, siteid, typeid, id, data FROM v9_search \ 
  36.   WHERE searchid >( SELECT max_doc_id FROM v9_sphinx_counter WHERE counter_id=1 ) 
  37. sql_query_post = REPLACE INTO v9_sphinx_counter SELECT 1, MAX(searchid) FROM v9_search 
  38. #字符串属性设置、需要过滤、排序的时候用到 
  39. sql_attr_uint  = typeid 
  40. sql_attr_uint  = siteid 
  41. sql_attr_uint  = id 
  42. sql_attr_timestamp  = adddate 
  43. sql_query_info  = SELECT * FROM v9_search WHERE searchid=$id 
  44. } 
  45.  
  46. #主索引 
  47. index main 
  48. { 
  49. source = main 
  50. # 放索引的目录 
  51. path = D:\sphinx\data\main 
  52. # 编码 
  53. charset_type = utf-8 
  54. # 指定utf-8的编码表 
  55. charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F 
  56. # 简单分词,只支持0和1,如果要搜索中文,请指定为1 
  57. ngram_len = 1 
  58. # 需要分词的字符,如果要搜索中文,去掉前面的注释 
  59. ngram_chars   = U+3000..U+2FA1F 
  60. } 
  61.  
  62. #增量索引 
  63. index delta 
  64. { 
  65.     source = delta 
  66.     path = D:\sphinx\data\delta 
  67. # 编码 
  68. charset_type = utf-8 
  69. # 指定utf-8的编码表 
  70. charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F 
  71. # 简单分词,只支持0和1,如果要搜索中文,请指定为1 
  72. ngram_len = 1 
  73. # 需要分词的字符,如果要搜索中文,去掉前面的注释 
  74. ngram_chars   = U+3000..U+2FA1F 
  75. } 
  76.  
  77.  
  78. indexer 
  79. { 
  80. mem_limit    = 128M 
  81. } 
  82.  
  83. searchd 
  84. { 
  85. port     = 9312 
  86. log      = D:\sphinx\data\phpcms\searchd.log 
  87. query_log    = D:\sphinx\data\phpcms\query.log 
  88. read_timeout   = 5 
  89. max_children   = 30 
  90. pid_file    = D:\sphinx\data\phpcms\searchd.pid 
  91. max_matches    = 2000 
  92. seamless_rotate   = 0 
  93. preopen_indexes   = 0 
  94. unlink_old    = 1 
  95. } 

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

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

2.linux下编辑定时任务 crontab -e
  1. #凌晨4点合并索引,其余时间每分钟更新索引 
  2. * 0-3 * * * /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf delta --rotate 
  3. * 6-23 * * * /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf delta --rotate 
  4. 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

phpcmsv9_withsphinx.zip
本文《phpcms的sphinx全文索引教程》发布于PHPCMS管理系统文章,作者:admin,如若转载,请注明出处:https://www.phpcms.vip/help/manual/502.html,否则禁止转载,谢谢配合!