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

 

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

时间: 2024-08-03 18:00:37

phpcms中使用sphinx全文索引教程的相关文章

在Python的Flask框架中实现单元测试的教程

  在Python的Flask框架中实现单元测试的教程,属于自动化部署的方面,可以给debug工作带来诸多便利,需要的朋友可以参考下 概要 在前面的章节里我们专注于在我们的小应用程序上一步步的添加功能上.到现在为止我们有了一个带有数据库的应用程序,可以注册用户,记录用户登陆退出日志以及查看修改配置文件. 在本节中,我们不为应用程序添加任何新功能,相反,我们要寻找一种方法来增加我们已写代码的稳定性,我们还将创建一个测试框架来帮助我们防止将来程序中出现的失败和回滚. 让我们来找bug 在上一章的结尾

PHP中使用curl入门教程

  这篇文章主要介绍了PHP中使用curl入门教程,本文讲解了curl概述.安装curl.PHP中使用curl的步骤.一个简单的curl代码实例等内容,需要的朋友可以参考下 概述 在我的上一篇文章"curl和libcurl简介"中简单的给大家介绍了curl相关的知识.这篇文章向大家介绍一下PHP中的curl扩展. 尽管在上一篇文章中,对curl和libcurl做了区分,也解释了某些相关的概念.同时,也知道了PHP中的curl扩展其实是对libcurl的封装.但是,在这篇文章中,为了写起

MySQL中使用Sphinx实现多线程搜索的方法

  这篇文章主要介绍了在MySQL中使用Sphinx实现多线程搜索的方法,修改Sphinx的搜索引擎配置即可,需要的朋友可以参考下 MySQL.Sphinx及许多数据库和搜索引擎中的查询是单线程的.比如说,在一台32个CPU核心.16个磁盘的R910服务器上执行一个查询,它最多只会用到一个核心和一个磁盘.没错,只会使用一个. 如果查询是CPU密集型作业,那么会使用大约3%的整机CPU能力(以上述32核机器为例).如果是磁盘密集型,则大约会使用6%的整机IO能力(也是与上例同样的配置,16个磁盘组

HTML5中Localstorage的使用教程

  这篇文章主要介绍了HTML5中Localstorage的使用教程,Localstorage被用于浏览器和系统交互的本地传出,需要的朋友可以参考下 什么是localstorage 前几天在老项目中发现有对cookie的操作觉得很奇怪,咨询下来是要缓存一些信息,以避免在URL上面传递参数,但没有考虑过cookie会带来什么问题: ① cookie大小限制在4k左右,不适合存业务数据 ② cookie每次随HTTP事务一起发送,浪费带宽 我们是做移动项目的,所以这里真实适合使用的技术是locals

PPT中简单制作正方体教程

  PPT中简单制作正方体教程         步骤 [插入立方体] 打开我们Word或PowerPoint 中随意一款软件,在"插入"菜单里点"形状"选项卡下拉箭头,找到并选择基本形状里头的[立方体],点击它就算插入. [无填充颜色] 将立方体插入到合适位置,为了保证不变形,我们就一边按"Shift"键一边拖动鼠标调整立方体的大小,插入完成发现有颜色.点下立方体打开"绘图工具-格式"菜单,在形状填充里选择[无填充颜色],去除

PhotoShop制作光盘在手中翻转GIF动画教程

教程介绍用PhotoShop制作光盘在手中翻转GIF动画教程,方法挺简单,主要是先将光盘复制几个图层,Ctrl+T一一变换大小,然后在动画面板里设置过渡就行了.         三联推荐:photoshop7.0迷你版免费下载    |  Photoshop CS5 中文免费下载  |  photoshop免费下载 喜欢的同学可以学习一下! 这素我们用到得素材 和完成的图 效果图: 首先抠图.扣成这货的样子然后我们把它移动到我们的小手上如下图 分类: PS入门教程

在Lua程序中使用MySQL的教程

  这篇文章主要介绍了在Lua程序中使用MySQL的教程,是Lua入门学习中的基础知识,需要的朋友可以参考下 导入MySQL 我们可以用一个简单语句导入SQLite库,假设Lua中正确实现并已完成.在安装过程中,文件夹libsql包含数据库相关的文件. 代码如下: mysql = require "luasql.mysql" 可变的MySQL将提供通过参照主MySQL表访问该功能. 建立连接 我们可以设立一个启动MySQL的环境,然后创建环境的连接.如下所示. 代码如下: local

在Lua程序中使用SQLite的教程

  这篇文章主要介绍了在Lua程序中使用SQLite的教程,包括建立连接到基本的查询等一些操作,需要的朋友可以参考下 SQLite导入 我们可以用一个简单语句导入SQLite库,假设Lua中正确实现并已完成.在安装过程中,文件夹libsql包含数据库相关的文件. 代码如下: sqlite3 = require "luasql.sqlite3" 变量sqlite3将提供通过参照主sqlite3表访问该功能. 建立连接 我们成立了发起sqlite环境,然后创建环境的连接.它如下所示. 代码

使用wxPython获取系统剪贴板中的数据的教程

  这篇文章主要介绍了使用wxPython获取系统剪贴板中的数据的教程,wxPython是一个非常受欢迎的Python图形库,需要的朋友可以参考下 涉及到开发桌面程序,尤其是文本处理,剪贴板就很常用,不像 java 中那么烦锁,wxpython 中访问剪贴板非常简单,寥寥几句足以. ? 1 2 3 4 5 6 # 取得剪贴板并确保其为打开状态 text_obj = wx.TextDataObject() wx.TheClipboard.Open() if wx.TheClipboard.IsOp