sphinx配置,中文分词,PHP调用sphinx_第1页
sphinx配置,中文分词,PHP调用sphinx_第2页
sphinx配置,中文分词,PHP调用sphinx_第3页
sphinx配置,中文分词,PHP调用sphinx_第4页
sphinx配置,中文分词,PHP调用sphinx_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、大纲1.sphinx概述;2.sphinx的优缺点;3.sphinx分布图;4.Sphinx以及coreseek中文分词安装和配置;5.使用PHP使用sphinx;1.sphinx概述Sphinx 是SQL Phrase Index(查询词组索引)的缩写,Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL,XML等 做全文搜索,它提供的API接口包括:PHP,Python,Perl,Ruby,java等,同时为MySQL也设计了一个存储引擎插件(SphinxSE)。它是一个分布式的全文检索系统。2.sphinx的优缺点u优点:优点: 高速的建立索引(在当代CP

2、U上,可达到10 MB/秒); 高性能的搜索(在2 4GB 的文本数据上,平均每次检索响应时间小于0.1秒); 可处理海量数据(目前已知可以处理超过100 GB的文本数据, 在单一CPU的系统上可处理100 M 文档); 提供了优秀的相关度算法,基于短语相似度和统计BM2的复合Ranking方法; 支持分布式搜索; 提供文档片段(摘要以及高亮)生成功能; 可作为MySQL的存储引擎提供搜索服务; 支持布尔、短语、词语相似度等多种检索模式; 文档支持多个全文检索字段(最大不超过32个);u缺点:缺点: 必须要有主键 主键必须为整型 不负责数据存储 (计算) 配置不灵活3.sphinx分布图相当于

3、数据库的中间层,缓解数据库的压力相当于数据库的中间层,缓解数据库的压力4.sphinx的安装和配置Sphinx安装安装1.上传软件包sphinx-0.9.9.tar.gz;2.解压:tar-zxvfsphinx-0.9.9.tar.gz3.编译安装:进入到sphinx的源码文件夹里,运行下列命令就可以安装sphinx了:cd /lamp/sphinx-0.9.9./configure -prefix=/usr/local/sphinx -with-mysql=/usr/local/mysqlmake & make install4.安装完成之后,导入一些数据;安装完成之后,导入一些数据

4、;我们用安装mysql自带的test库进行测试;运行/usr/local/sphinx/etc/目录下的example.sql脚本,把数据导到数据库中:/usr/local/mysql/bin/mysql -uroot -p* use test; /进入test库mysql show tables; /查看表Test库中documents表是自动导进来的;我们插入几条中文进去;mysql insert into documents values(null,1,10,now(),方研矩形,方研矩行科技有限公司);6.配置配置sphinx.conf配置文件配置文件;进入到sphinx的etc目录找

5、到配置文件cd /usr/local/sphinx/etc 我们需要备份一下配置文件,防止改错不好处理。cp sphinx.conf.dist sphinx.conf 进入配置文件。vim sphinx.confSphinx基本配置数据源 src是名字可以自己指定(意思就是说数据从哪里来得)source src1 13行 type = mysql # 数据库类型 sql_host = localhost # MySQL主机IP sql_user = sphinxuser # MySQL用户名 sql_pass = sphinxpass # MySQL密码 sql_db = sphinx # M

6、ySQL数据库 sql_port = 3306 # MySQL端口 sql_sock = /tmp/mysql.sock # 如果是linux下需要开启,指定sock文件。35行sql_query_pre = SET NAMES UTF8 # MySQL检索编码 73行sql_query_pre = SET SESSION query_cache_type=OFF #关闭缓存 74行sql_query= # 获取数据的SQL语句 79行 (默认就可以)SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, co

7、ntent FROM documentssql_attr_uint = group_id# 无符号整型107行 根据79行指定的字段填写sql_attr_timestamp = date_added # 时间类型 131行 根据79行指定的字段填写# 用于命令界面端(CLI)调用的测试(一般来说不需要) 187行sql_query_info= SELECT * FROM documents WHERE id=$id主索引index text1 271行 source = src1 # 索引源声明 (根据我们指定的主索引源的名字)charset_type = utf-8 # 数据编码(设置成ut

8、f8) 34行charset_table = # 上面指定了utf-8,这里需要开启。 353行index testlstemmed:test1增量索引 (先关闭掉#号注释)481行index distl 分布式也注释掉(暂时可以关闭,#号注释)492行索引器设置indexer 529行 mem_limit = 256M # 内存大小限制 默认是 32M, 推荐为 256M 其他用默认即可 sphinx服务进程searchd的相关配置 565行searchd 全部用默认的就可以了。如果是本地测试,使用默认就可以,如果是多个服务器测试需要指定监听的ip即可。Sphinx配置文件结束 创建索引 -

9、c 指定配置文件 -all 对所有索引重新编制索引。 -rotate 用于轮换索引,主要是再不停止服务的时候,增加索引。 -buildstops -buildfreqs 要一起使用, 例:indexer myindex -buildstops text.txt 1000 -buildfreqs 会在当前目录下生成,一个名字叫text.txt,最多包含1000个词的词表。 -merge 合并索引/usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf -all创建索引如果报了一个这样的错误:/usr/local/sphi

10、nx/bin/indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory可以用下面方法解决:cp /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib/libmysqlclient.so.18再次运行创建索引命令就能完成索引的创建了/usr/local/sphinx/bin/indexer -all出现这样的提示就表示创建成功测试创建的索引 检查数据命令:

11、search (详细方法会调用API使用) /usr/local/sphinx/bin/search -c test(test关键字)可以看到将数据中含有test关键字的数据查询出来,包括文档id,权重,属性值等我们搜索下中文看下我们搜索下中文看下/usr/local/sphinx/bin/search -c /usr/local/sphinx/etc/sphinx.conf 方研矩行Coreseek cd /lamp tar -zxvf coreseek-3.2.14.tar.gz 进入到mmseg所在文件夹,先安装中文分词mmseg。 cd /lamp/coreseek-3.2.14/mm

12、seg-3.2.14/ ./bootstrap /输入的warming信息可以忽略,error需要解决 ./configure -prefix=/usr/local/mmseg Make & make install 然后运行mmseg,就能输入安装成功的信息了: /usr/local/mmseg/bin/mmseg 出现这个就安装成功啦接下来,我们要把接下来,我们要把Sphinx和和mmseg结合起来。结合起来。(1)检测安装 进入coreseek目录,进行安装。 cd /lamp/coreseek-3.2.14/csft-3.2.14/ ./configure -prefix=/u

13、sr/local/coreseek -with-mysql=/usr/local/mysql -with-mmseg=/usr/local/mmseg -with-mmseg-includes=/usr/local/mmseg/include/mmseg/ -with-mmseg-libs=/usr/local/mmseg/lib/ make & make install(2)配置带有中文分词的配置带有中文分词的sphinx配置文件配置文件 配置文件和上面的步骤一样,只不过是在coreseek中,有几个地方需要注意。 注意:coreseek中得配置文件也是sphinx.conf,而不是

14、coreseek.conf。 cd /usr/local/coreseek/etc cp sphinx.conf.dist sphinx.conf vim sphinx.confsource src1 13行 type = mysql # 数据库类型sql_host = localhost #MySQL主机IPsql_user = sphinxuser #MySQL用户名sql_pass = sphinxpass #MySQL密码sql_db = sphinx #MySQL数据库sql_port = 3306 # MySQL端口sql_sock = /tmp/mysql.sock # 如果是l

15、inux下需要开启,指定sock文件。35行sql_query_pre = SET NAMES UTF8 # MySQL检索编码 73行sql_query_pre = SET SESSION query_cache_type=OFF #关闭缓存 74行sql_query= # 获取数据的SQL语句 79行 (默认就可以)SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, contentFROM documentssql_attr_uint = group_id# 无符号整型107行 根据79行指定的字段填写

16、sql_attr_timestamp = date_added # 时间类型 131行 根据79行指定的字段填写# 用于命令界面端(CLI)调用的测试(一般来说不需要) 187行sql_query_info= SELECT * FROM documents WHERE id=$idxmlpipe settings 211行 这个是XML类型的,直接过去。source srclthrottled:srcl 继承索引源。 index test1 (只有索引这个里面的值要修改) 需要注释的地方:#stopwords = G:datastopwords.txt 315行#wordforms = G:d

17、atawordforms.txt 321行#exceptions = /data/exceptions.txt 330行#charset_type = sbcs 340行添加下面这两行,意思是把中文分词加入到配置文件中。charset_type = zh_cn.utf-8charset_dictpath= /usr/local/mmseg/etc/ #你安装mmseg的目录#charset_table = # 这里需要关闭 353行(3)生成索引并测试生成索引并测试创建索引/usr/local/coreseek/bin/indexer c /usr/local/coreseek/etc/sph

18、inx.conf all再次测试搜索中文/usr/local/coreseek/bin/search -c /usr/local/coreseek/etc/sphinx.conf 方研矩行出现如下结果表示我们在linux下Sphinx,中文分词已经安装完成了,并测试成功我们可以给/usr/local/coreseek/etc/sphinx.conf这个sphinx.conf重命名为csft.conf,那么上面的创建索引的语句就变为:/usr/local/coreseek/bin/indexer all查看索引是否创建成功的语句就变为:/usr/local/coreseek/bin/search

19、 方研矩行到此,sphinx中文分词已经配置成功啦配置增量索引前,要先创建一个计数表配置增量索引前,要先创建一个计数表sph_counter,记录将文档集分为两个部分的文记录将文档集分为两个部分的文档档ID,每次重新构建主索引是,更新这个表每次重新构建主索引是,更新这个表 /usr/local/mysql/bin/mysql -uroot p123456Use test ;CREATE TABLE sph_counter( counter_id INTEGER PRIMARY KEY NOT NULL, max_doc_id INTEGER NOT NULL);配置增量索引:配置增量索引:主数

20、据源里面:我们需要把欲查询语句改成下面的语句: 13行Source src1 把sql_query_pre的改成下面的语句 79行sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM documentssql_query= SELECT id, group_id,UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents WHERE id( SELECT max_doc_id FROM sph_counter WHERE counter_

21、id=1 )主索引:281行 把名字该成想对应的。Index test1 source = src1 286行path = /usr/local/coreseek/var/data/test1290行 继承索引(也是曾亮索引) 494行index delta:test1source= deltapath= /usr/local/coreseek/var/data/delta到此,增量索引已经配置成功啦建立增量索引:建立增量索引: cd /usr/local/coreseek/bin/./indexer delta(增量索引)建立增量索引如果想重新建立索引,不能再用./indexer all改用

22、./indexer test1(主索引)自动实时跟新索引自动实时跟新索引我们需要建立两个脚本,还要用到计划任务。建立一个主索引和增量索引的脚本Main.sh delta.sh (可以自己命名)在增量索引中写下 delta.sh/usr/local/coreseek/bin/indexer delta -rotate /usr/local/coreseek/var/log/delta.log主索引中写下:main.sh 意思就是合并索引/usr/local/coreseek/bin/indexer -merge test1 delta -rotate /usr/local/coreseek/va

23、r/log/main.log/usr/local/mysql/bin/mysql -uroot -pkkk test -e “replace into sph_counter select 1,max(id) from documents“(更新计数器表)最后,我们需要脚本能够自动运行,以实现,增量索引每10分钟重新建立,和主索引只在午夜2:30时重新建立。脚本写好了,我们需要建立计划任务crontab -e 来编辑 crontab文件,如果之前没有使用,会是一个空的文件。写下下面两条语句*/10 * * * * /usr/local/coreseek/etc/delta.sh30 2 * *

24、 * /usr/local/coreseek/etc/main.sh第一条是表示每10分钟运行。第二条是表示 每天的 凌晨2:30分运行(查看系统时间)如果提示权限问题,给脚本可执行的权限 chmod 755 保存好后:重新启动服务service crond stop service crond start5.使用PHP使用sphinx1.启动服务启动服务/usr/local/coreseek/bin/searchd2.需要到需要到coreseek解压包中找到解压包中找到sphinxapi.php文件放到程文件放到程序目录下。序目录下。cp /root/lamp/coreseek-3.2.14/csft-3.2.14/api/sphinxapi.php /hom

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论